├── .gitattributes
├── .gitignore
├── CONTRIBUTING.md
├── Demo
├── AboutTTY.dfm
├── AboutTTY.pas
├── MnForm.ddp
├── MnForm.dfm
├── MnForm.pas
├── Res
│ ├── About.bmp
│ ├── COMPORT.ICO
│ ├── Connect.bmp
│ ├── Disconnect.bmp
│ ├── Quit.bmp
│ ├── Settings.bmp
│ └── TTYDemo.bmp
├── SettingsDlg.dfm
├── SettingsDlg.pas
├── TTY.dpr
├── TTY.dproj
├── TTY.res
└── TTY_Icon.ico
├── Design
└── CPDReg.pas
├── Help
├── COMDRV32.HLP
├── ComDrv32.GID
├── ComDrv32.cnt
└── ComDrv32.toc
├── Images
├── TCommPortDriver16.png
├── TCommPortDriver24.png
├── TCommPortDriver32.png
├── TCommPortDriver48.png
└── TCommPortDriver64.png
├── LICENSE.txt
├── NOTICE.txt
├── Packages
├── BuildPackages.groupproj
├── ComPortDrv.dpk
├── ComPortDrv.dproj
├── ComPortDrv.dres
├── ComPortDrv.identcache
├── ComPortDrv.res
├── ComPortDrvD.dpk
├── ComPortDrvD.dproj
├── ComPortDrvD.dres
├── ComPortDrvD.res
├── ComPortDrvDResource.rc
└── ComPortDrvResource.rc
├── README.md
└── Source
├── CPDrv.pas
└── SerialPorts.pas
/.gitattributes:
--------------------------------------------------------------------------------
1 | # These files are text and should be normalized (convert crlf => lf)
2 | *.pas text
3 | *.dpr text
4 | *.dproj text
5 | *.dfm text
6 | *.dpk text
7 | *.fmx text
8 | *.local text
9 | *.inc text
10 | *.txt text
11 | *.md text
12 | *.toc text
13 | *.cnt text
14 | *.rc text
15 | *.groupproj text
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /Compiled
2 |
3 | __history
4 | __recovery
5 | **/Win32/
6 | **/Win64/
7 |
8 | *.local
9 | *.identcache
10 | *.dsk
11 | *.~*
12 | *.stat
13 | Thumbs.db
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | We welcome contributions from the Delphi community!
2 |
3 | If you like to contribute then either submit a pull request with your proposed
4 | changes along with a description about what you like to achieve with the
5 | modification/addition you propose or send an e-mail to the person listed as main contact
6 | in notice.txt
7 |
--------------------------------------------------------------------------------
/Demo/AboutTTY.dfm:
--------------------------------------------------------------------------------
1 | object AboutBoxForm: TAboutBoxForm
2 | Left = 390
3 | Top = 290
4 | BorderStyle = bsNone
5 | Caption = 'About TTY'
6 | ClientHeight = 231
7 | ClientWidth = 312
8 | Color = clBtnFace
9 | Font.Charset = DEFAULT_CHARSET
10 | Font.Color = clWindowText
11 | Font.Height = -11
12 | Font.Name = 'MS Sans Serif'
13 | Font.Style = []
14 | FormStyle = fsStayOnTop
15 | Position = poDesktopCenter
16 | OnKeyDown = FormKeyDown
17 | TextHeight = 13
18 | object Panel1: TPanel
19 | Left = 0
20 | Top = 0
21 | Width = 312
22 | Height = 231
23 | Align = alClient
24 | BevelOuter = bvNone
25 | BorderWidth = 3
26 | Color = clBlack
27 | TabOrder = 0
28 | OnClick = Panel1Click
29 | object Panel2: TPanel
30 | Left = 3
31 | Top = 3
32 | Width = 306
33 | Height = 225
34 | Align = alClient
35 | BevelOuter = bvNone
36 | Color = clWhite
37 | TabOrder = 0
38 | OnClick = Panel1Click
39 | object Image1: TImage
40 | Left = 20
41 | Top = 28
42 | Width = 32
43 | Height = 32
44 | AutoSize = True
45 | Picture.Data = {
46 | 055449636F6E0000010001002020100000000000E80200001600000028000000
47 | 2000000040000000010004000000000080020000000000000000000000000000
48 | 0000000000000000000080000080000000808000800000008000800080800000
49 | C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000
50 | FFFFFF0087800000000000000000000000000000878000000000000000000000
51 | 0000000087800000000000000000000000000000878800000000888888000000
52 | 0000000008F8800008888FFFFF8800000000000008FF888888FFF88888F88000
53 | 000000000088FFFFFF888000008F80000000000000008888880000000008F800
54 | 0000000000000000000000000008F8000000000000000000000000000008F800
55 | 0000000000000000000000000008880000000000000000000000000000800000
56 | 0000000000000000000000000087788000000000000000000000000000000000
57 | 0000000000000000000000000088888000000000000000000000000008777778
58 | 0000000000000000000000008777777780000000000000000000000877777777
59 | 780000000000000000000887FFFFFFFF7780000000000000000008F788888888
60 | 7788000000000000000008F7FFFFFFFF7788000000000000000008F788888888
61 | 7788000000000000000008F7FFFFFFFF77880000000000000000088888888888
62 | 8888000000000000000000000000000000000000000000000008777777777777
63 | 777780000000000000087FFFFFFFFFFFFFFF88000000000000008F8888888888
64 | 8888F800000000000000083BBBBBBBBBB3300000000000000000003BBBBBBBBB
65 | B330000000000000000000370707070707300000000000000000000333333333
66 | 333000000FFFFFFF0FFFFFFF0FF03FFF07800FFF800007FF800003FFC007C3FF
67 | F03FE1FFFFFFE1FFFFFFE1FFFFFFE1FFFFFFC1FFFFFFC0FFFFFFC0FFFFFF80FF
68 | FFFF007FFFFE003FFFFC001FFFF8000FFFF80007FFF80007FFF80007FFF80007
69 | FFF80007FFF00007FFE00003FFE00001FFF00001FFF80003FFFC000FFFFC000F
70 | FFFE001F}
71 | Transparent = True
72 | OnClick = Panel1Click
73 | end
74 | object Label2: TLabel
75 | Left = 60
76 | Top = 88
77 | Width = 187
78 | Height = 14
79 | Caption = 'Implements a simple TTY terminal using'
80 | Font.Charset = ANSI_CHARSET
81 | Font.Color = clBlack
82 | Font.Height = -11
83 | Font.Name = 'Arial'
84 | Font.Style = []
85 | ParentFont = False
86 | OnClick = Panel1Click
87 | end
88 | object Label3: TLabel
89 | Left = 60
90 | Top = 104
91 | Width = 187
92 | Height = 14
93 | Caption = 'TCommPortDriver serial I/O component.'
94 | Font.Charset = ANSI_CHARSET
95 | Font.Color = clBlack
96 | Font.Height = -11
97 | Font.Name = 'Arial'
98 | Font.Style = []
99 | ParentFont = False
100 | OnClick = Panel1Click
101 | end
102 | object Label4: TLabel
103 | Left = 60
104 | Top = 152
105 | Width = 208
106 | Height = 14
107 | Caption = #169' 1996-2000 M. Cocco. All rights reserved.'
108 | Font.Charset = ANSI_CHARSET
109 | Font.Color = clBlack
110 | Font.Height = -11
111 | Font.Name = 'Arial'
112 | Font.Style = []
113 | ParentFont = False
114 | OnClick = Panel1Click
115 | end
116 | object Label5: TLabel
117 | Left = 60
118 | Top = 168
119 | Width = 222
120 | Height = 14
121 | Caption = #169' 1996-2000 d3k Soft. Co. All rights reserved.'
122 | Font.Charset = ANSI_CHARSET
123 | Font.Color = clBlack
124 | Font.Height = -11
125 | Font.Name = 'Arial'
126 | Font.Style = []
127 | ParentFont = False
128 | OnClick = Panel1Click
129 | end
130 | object Image2: TImage
131 | Left = 52
132 | Top = 8
133 | Width = 170
134 | Height = 67
135 | AutoSize = True
136 | Picture.Data = {
137 | 07544269746D61703A310000424D3A310000000000003604000028000000AA00
138 | 0000430000000100080000000000042D00000000000000000000000100000001
139 | 000000000000000080000080000000808000800000008000800080800000C0C0
140 | C000C0DCC000F0CAA600BD0808008C000000940000009C000000A5000000AD00
141 | 0000B5000000BD000000C600000084080800BD080800C6080800CE0808009410
142 | 10009C101000AD101000B5101000BD101000C6101000CE101000D61010008C18
143 | 180094181800AD181800B5181800D618180094212100AD212100B5212100DE21
144 | 2100E72121008C29290094292900C6292900CE292900E7292900EF2929008C31
145 | 31009C313100A5313100B5313100BD313100CE313100D6313100EF313100F731
146 | 31008C393900AD393900BD393900C6393900CE393900F7393900FF3939009C42
147 | 4200B5424200C6424200CE424200D6424200FF4242008C4A4A00944A4A00A54A
148 | 4A00B54A4A00CE4A4A00D64A4A00DE4A4A00FF4A4A008C525200945252009C52
149 | 5200A5525200AD525200B5525200BD525200D6525200E7525200FF5252008C5A
150 | 5A009C5A5A00A55A5A00B55A5A00CE5A5A00E75A5A00FF5A5A0094636300B563
151 | 6300BD636300C6636300CE636300D6636300EF636300FF6363009C6B6B00AD6B
152 | 6B00BD6B6B00C66B6B00CE6B6B00D66B6B00DE6B6B00FF6B6B0094737300A573
153 | 7300BD737300C6737300CE737300D6737300FF7373009C7B7B00A57B7B00B57B
154 | 7B00D67B7B00DE7B7B00FF7B7B009C848400A5848400AD848400C6848400CE84
155 | 8400DE848400E7848400FF848400948C8C009C8C8C00A58C8C00AD8C8C00B58C
156 | 8C00C68C8C00CE8C8C00DE8C8C00E78C8C00EF8C8C00F78C8C009C949400AD94
157 | 9400B5949400D6949400E79494009C9C9C00AD9C9C00B59C9C00C69C9C00D69C
158 | 9C00DE9C9C00E79C9C00F79C9C00FF9C9C00A5A5A500ADA5A500B5A5A500CEA5
159 | A500D6A5A500DEA5A500E7A5A500FFA5A500ADADAD00BDADAD00D6ADAD00EFAD
160 | AD00F7ADAD00FFADAD00B5B5B500BDB5B500C6B5B500D6B5B500DEB5B500E7B5
161 | B500EFB5B500BDBDBD00CEBDBD00D6BDBD00E7BDBD00EFBDBD00FFBDBD00C6C6
162 | C600CEC6C600D6C6C600EFC6C600FFC6C600CECECE00D6CECE00DECECE00E7CE
163 | CE00EFCECE00D6D6D600E7D6D600EFD6D600F7D6D600FFD6D600DEDEDE00EFDE
164 | DE00F7DEDE00FFDEDE00E7E7E700F7E7E700FFE7E700EFEFEF00FFEFEF00F7F7
165 | F700FFF7F700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
166 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
167 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
168 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
169 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F0FBFF00A4A0
170 | A000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF
171 | FF00D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
172 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
173 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
174 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
175 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
176 | D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
177 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
178 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
179 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
180 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
181 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1
182 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
183 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
184 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
185 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
186 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
187 | D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
188 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
189 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
190 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
191 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
192 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1
193 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
194 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
195 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
196 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
197 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1
198 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
199 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
200 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
201 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
202 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
203 | D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
204 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
205 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
206 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
207 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
208 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1
209 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
210 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
211 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
212 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
213 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
214 | 0000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
215 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
216 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
217 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
218 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
219 | D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
220 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
221 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
222 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
223 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
224 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1
225 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
226 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
227 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
228 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
229 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
230 | D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
231 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
232 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
233 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
234 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
235 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1
236 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
237 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
238 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
239 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
240 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1
241 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
242 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
243 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
244 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
245 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
246 | D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
247 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
248 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
249 | D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D1D1D1D1D1D1D1D1D1D1D1D1D1D1
250 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0
251 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1
252 | D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D1D1D1D1D1D1D1D0D0D0D0D0D0D0
253 | D0D0D1D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D1D1D1D1D1D1D1D1D1D1D1D0D0
254 | D0D0D0D0D0D0D0D0D0D0D0D0D0D0D1D1D1D1D1D1CDCDC6C6C6C6C6C6C6CDCDCD
255 | D1D1D1D0D0D0D0D0D0D0D0D1D0D0D0D0D0D0D0D0D0D0D1D0D0D0D0D0D0D1D0D0
256 | CDCDCDC6C6C6C2C6C6C6C6CDCDCDD1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
257 | 0000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1CDCDC6C6C6C6C6C6C6CDCDD0
258 | D1D1D1D0CDCDC6C6C6C6C6C6C6CDCDD0D1D1D1D1D0CDCDC6C6C6C6C6C6C6CDCD
259 | D0D1D1D1D1D1D1D1D0CDCDC6C6C6C6C6C6C6C6C6C6C6C6C6C6CDCDCDD1CDCDC6
260 | BCBC0707B10707B10707B8C6CDCDCDCDC6C6C6C6C2C6C6C6C6C6C6C6C6C6C6C6
261 | C6C6C6C6C6C6C6C6C6C6CDCDC6BCBC070707070707B10707B8C6CDD1D1D1D1D1
262 | D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D0CD
263 | BCBC0707070707B10707BCCDD0D1D0CDBCBC0707070707B10707BCCDD0D1D1D0
264 | CDC1B8070707B107B10707BCCDD0D1D1D1D1D1D0CDC1B80707070707B1070707
265 | B1070707B107B8C6CDC6BCBC07B1A4A4A4A4A4A4A4A4AAB1BCBCBCBC070707B1
266 | 07B10707070707B107B1070707070707B10707B10707BCB8BC07B1A4A4A4A4A4
267 | A49EA4A4AAB1BCC6CFD1D1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1
268 | D1D1D1D1D1D1D1D1D1D1CDC6BC07A4A4A4A49EA4A4A407BCCDD0CDC6BCB1A4A4
269 | A4A49EA4A4A407BCCDD0D1CDC6BC07A4A4A4A4A4A4A4A407BCCDD0D1D1D1D1CD
270 | C6BCB1A4A4A4A4A49EA4A49EA4A49EA4A4A4AA07BCB80707AAA4F793F7939393
271 | F7939CA4B1070707A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A49EA4
272 | A4AAB107B1AAA49C93939393939393F7F7A4B107C6CFD1D1D1D1D1D1D1D1D1D1
273 | D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1CDC6C6BCB1A4F7939393F7
274 | 939CA407C6D1CDC2BCB1A4F7939393F7939CA407C6D0D0C6C6B8B1A4F7939393
275 | F7939CA407BCCDD1D1D1CDCAC1BCB1A4F7939393939393939393939393F79CA4
276 | 070707A4A4A49CF793F793F7939393F7A407B1AAA4F7939393F7939CA49C93F7
277 | 9393F7939CA49C93F79393F793A4AAB1B1A4A4F7F793F79393F7939393F79DAA
278 | 07C6D1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1
279 | D1CDCAC6BC86584E4D454D454DF7A407C6D1CAC6BC07584E4D454D454E75A407
280 | BCD0D0CAC6BCA5594D4E454D455E9CA4B1BCCDD1D1D1CDCAC6BCA5594D4E454E
281 | 454D464D464D4D6E839393A4B10707AAA4944F290B0B040429578E93A4B10707
282 | 584D4E454D454EA4A44D4E4D454D464DA4A44D4E4D454D454DA4B10707AA944F
283 | 290C0B0B0424387B9393F7A407BCCDD1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1
284 | D1D1D1D1D1D1D1D1D1D1D1D1D0CDC6C6C15F0B0B0B0B040404A4A407BCD1CAC6
285 | C1BC0B0B0C0B0404044DA407BCD1D0C6C6C1950C0B0B0B04042AA4A4B1BCC6D1
286 | D1D1CDC6C6C1950C0B0B0B0B0B0B0C0B0B0B0404134DF7A4070707A54F0C0D0E
287 | 0F0F0F0E0B0B136EF7B1BCB80B0C0B0B04040BB1070C0B0B0B04040BB1070C0B
288 | 0B0B040404AA07BC07510B0D0E0D0F0F0E0D0C0B388E939CAA07C6D1D1D1D1D1
289 | D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1CDCDC6C6700E0D
290 | 0E0D0E0B0CA4A407C1D1CAC6C6C60E0D0E0D0D0C0B50A407BCD0D0CDC6C69F0D
291 | 0E0D0E0D0C2FA4AAB1BCC6D0D1D1CDCDC6C69F0D0E0D0E0D0E0F0F0F0D0E0D0D
292 | 0C0B45AA07BCBC390D0F111111121111110E0B048407BCC10D0D0E0D0E0D0DCA
293 | CD0D0D0E0D0E0D0DCACD0D0D0E0D0E0B0C07C6C1680D0E0F111111121111100D
294 | 0B2FF793A407BCCDD1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1
295 | D1D1D1D1D0CDCDCAC6680F0F1111110D0BA4AA07BCD1CDC6C6C60F0F1111110E
296 | 0B58A407BCD1D0CDC6C6A60F0F1111110D30A4A407BCC6D1D1D1CDCDC6C6A60F
297 | 0F1111121111111112111111100D0CA5CABC7E0D0F12111111110A121111100B
298 | 1707C6C60F10111111100FD0D00F10111111100FD0D00F101111110F0DBCCDBC
299 | 190F111112111111111111110E0B669CA4B1BCCDD0D1D1D1D1D1D1D1D1D1D1D1
300 | 0000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1CDCDC6C6710F101111120F0CAAA407
301 | C1D1CACAC6C60F101111110F0B59A407BCD0D0CDCAC6A60F0F1111120F31A4AA
302 | B1BCC6D0D1D1CDCDC6C6A60F0F1111111111111111111211110F0D96D0C6250F
303 | 1111111111BAB61B1111110F0B77CDCD0F111112110F0FD1D111111111120F0F
304 | D1D111111112110F0EBCCD890F101111111134C91B111111100D249DA4B1BCC6
305 | D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D0CDCDC6
306 | C6700F0F1111110F0BAAA407BCD1CDC6C6C60F0F1111120F0C58A407BCD1D0CD
307 | C6C6A60F0F1111110F30AAA407BCC6D1D1D1CDCDCAC6A60F0F11111211119264
308 | 0A111111110F0E70D1C60F10111111120FD0D111121111110E5FCDCD0F111111
309 | 11100FD0D111111211110F0FD0D111111111110F0DC6CF680F111111111179D1
310 | 11121111110D0BAAA407BCC6D0D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1
311 | D1D1D1D1D1D1D1D1D1CDCDC6C6710F0F1112110F0CAAAA07BCD1CDC6CAC60F10
312 | 1111110F0B59A407BCD0D0CDC6C6A60F0F1112110F31A4AAB1BCC6D0D1D1CDCD
313 | C6C6A60F0F1111111111B5C90A11121111100D68D1AE0F0F121111110FD1D111
314 | 111111120F3AD0D10F121112110F0FD1D11111111111100FD1D1111112111110
315 | 0FCDCD410F111112110F79D111111112110E0B8FA407BCC6D1D1D1D1D1D1D1D1
316 | D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D0CDCDCAC6700F0F1211110F
317 | 0BAAA407BCD1CDC6C6C60F0F1112110F0C58AAB1BCD1D0CDC6C6A60F0F111112
318 | 0F30AAA407BCC6D1D1D1CDCDC6C6A60F0F111211110FB5D111111111110F0D68
319 | D1A6100F1111110F10D0D11111111111113AD1D11111111111100FD0D1111111
320 | 12110F0FD0D111111111110F0FD1D03A0F111111111079D111111111110F0C86
321 | A407BCC6D0D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1
322 | D1CDCDC6C6710F0F1111110F0CAAAAB1C1D1CACAC6C60F101111120F0B59A407
323 | BCD1CDCAC6C69F0F101111110F31A4AAB1BCC6D0D1D1CDCDC6C6A60F0F111111
324 | 1110B5D111111211110F0E68D1AE0F10111111100FD1D1110A1511111141D1D1
325 | 11111112110F0FD1D111111111110F10D1D11111111211100FD0D14111111111
326 | 100F79D111111112110F0B86A407BCC6D1D1D1D1D1D1D1D1D1D1D1D10000D1D1
327 | D1D1D1D1D1D1D1D1D1D1D1D1D0CDCDC6C6700F0F1211110F0BAAA407BCD1CDC6
328 | C6C60F0F1111110F0C58A407BCD1CDC6C6C19F0F0F1112110F30AAA4B1BCC6D1
329 | D1D1CDCDCAC69F0F101112110F0FB5D111111111110F0D68D1A6100F11111111
330 | 0FCDD1423C42423C4262D1D10F11121111100FD0D11111121111100FD0D11111
331 | 1211110F0FD1D13A111211110F0F79D111111211110F0C86A407BCC6D0D1D1D1
332 | D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1CDCDC6C6710F0F
333 | 1111120F0CAAAA07C1D1CACAC6C60F101112110F0C58A407BCD1CDC6C1BC9F0F
334 | 111111110F31A4A4AA07BCCFD1D1CDCAC6C6A60F0F111111100FB5D111111112
335 | 110F0D68D1AE0F10111111120FCDCDD1D1D1D1D1D1CDD1D00F111111110F0FD1
336 | D111111111110F0FD1D11111111111100FD0D14211111111100F79D111111111
337 | 110F0C86A407BCC6D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1
338 | D1D1D1D1D0CDCDCAC6700F101111110F0BAAA407BCD1CDC6CAC60F0F11111110
339 | 0B58AA07BCD1C6C6C1BC600F121111110F0C9DA4A407BCCDD1D1CDCDCAC6A60F
340 | 0F1112110F0FB5D111111111120F0E68D1A6100F1111111111413A413C423C42
341 | 3A62D1D10F11121111100FD0D11111111211100FD0D111111112110F0FD1D13C
342 | 111112110F0F79D111111112110F0B86A407BCC6D0D1D1D1D1D1D1D1D1D1D1D1
343 | 0000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1CDCDC6C6710F0F1112110F0CA4AA07
344 | BCD1CDC6C6C6100F1112110F0B59AAB1C1D1C6C6BCC6250F11111211100B76A4
345 | A4B1B8CDD1D1CDCDC6C6A60F0F111111100FB5D111111211110F0D68D1AE100F
346 | 111112111111111112111111103AD1D00F111111120F0FD1D111111211110F0F
347 | D1D11111121111100FD0D14211121111100F79D111111211110F0C86A407BCC6
348 | D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D0CDCDC6
349 | C6700F10111111100BAAAA07BCD1CDC6C6C60F0F1111110F0C58AA07C6D1C6C6
350 | C1B80F1011111111110D3FA4A4AA07C6D1D1CDCDC6C6A60F0F1112110F0FB5D1
351 | 11111111110F0E68D1A6100F1111111111121111111111110F3BD0D111111211
352 | 110F0FD0D11111111111100FD0D111111111110F0FD1D13C111111110F0F79D1
353 | 11111111110F0C86A407BCC6D0D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1
354 | D1D1D1D1D1D1D1D1D1CDCDC6C6710F0F1111110F0BAAA407BCD1CDC6CAC60F10
355 | 1112110F0B59AA07C6D1C6C6BC880F1111111111110E17A4A4A407BCCDD1CDCD
356 | C6C6A60F0F111111100FB5D111111112110F0D68D1AE0F0F1211111111110A12
357 | 111111120F3AD0D11111111111100FD1D111111112110F0FD1D1111111121110
358 | 0FD0D14211111111100F79D111111112110F0B87A407BCC6D1D1D1D1D1D1D1D1
359 | D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D0CDCDCAC6700F101111120F
360 | 0CAAAA07BCD1CDC6C6C60F0F1111110F0C58AA07CDCDC6C6BC530F1111111112
361 | 11100B8FA4A4B1BCCDD1CDCDCAC69F0F101111120F0FB5D11111121111100D68
362 | D1A6100F1111121111D18C11111111110F3BD1D111111112110F0FD0D1111112
363 | 1111100FD0D111111111110F0FD1D142111112110F0F79D111111211110F0C86
364 | A407BCC6D0D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1
365 | D1CDCDC6C6710F0F1111110F0BAAA407C1D1CACAC6C60F101112110F0B59AA07
366 | CDCDC6C6C2190F111211111111110D4FA4A4B1BCCDD1CDCDC6C6A60F0F111111
367 | 0F0FB5D111111111110F0D68D1AE100F1111111111D17911111211111040D0D1
368 | 0F11111111120FD1D00F111111111110D1D00F11121111100FCDD15C0A111111
369 | 120F79D11111111111100B86A407BCC6D1D1D1D1D1D1D1D1D1D1D1D10000D1D1
370 | D1D1D1D1D1D1D1D1D1D1D1D1D0CDC6C6C6700F0F1112110F0CA4AAB1BCD1CDC6
371 | C6C60F0F1111110F0C58AA07CDCAC1C1AC100F111111111111110E24A4A4AA07
372 | CAD1CDCDC6C6A60F0F111211100FB5D111111112110F0E68D1BE0F1112111111
373 | 11D080111111110F0F6AD1D10F12111111110FCDD10F11111211110FCDD10F11
374 | 1111110F0ECDD19912111111110F78D111111111110F0B94AAB1BCC6D0D1D1D1
375 | D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1CDCDC6C6C6C6710F0F
376 | 121111100BAAA407BCCDC6C6C6C6100F1112110F0C58AA07CDC6C1BC700F1211
377 | 1111541111110F0C94A4A407BCD1CDCDCAC6A60F0F1111110F0FB5D111111111
378 | 11100D68D1D01B1B1111121111CF6A111112110F0E9FD1CD0F11111211110FC7
379 | C31112111111110FC3C31111121111100DC6D1A711111111121172CD12111112
380 | 110E1807B107BCC6D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1
381 | D1D0CDBCBCBCBCC1C6680F0F1111110F0BAAA40707BCC1C6C6C60F0F11111110
382 | 0B58AAB1C6BCBCBC250F1111111198111211100B6FA4A4B1BCD1D0CDC6C6A60F
383 | 0F111211100FB5D111111211110F0D68D0D162232711111111491B111111110F
384 | 19C6D1CD10111111111211344911111111111211494911111111110F21C6D1CE
385 | 11230A1111111B49111111110F0F510707BCBCCDD0D1D1D1D1D1D1D1D1D1D1D1
386 | 0000D1D1D1D1D1D1D1D1D1D1D1CDC6BC07B10707BC700F101111110F0CA4A4A4
387 | A4AAB1BCBCC60F101111110F0B59A4A40707BCB20D101111112BC3111111110D
388 | 30A4A4AA07CDD1CDC6C6A60F0F111111110FB5D00F111111120F0D68CDD1C911
389 | 5D4C0A11111111121111100F7FCDD1CD0F1B1111111111111111111111111111
390 | 1111111112110F0F40C6D1D16C279B1D11111111111111111019B2BCBCBCC6CD
391 | D0D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1CDCAC1BCB1A4A4AA
392 | 07680F11121111100BAAA4F7F7A4A4B107C10F0F1112110F0E58A4F7A4B1BC7E
393 | 0F1111111149D1111111110E0BA4A4A407CDD1CACAC6A60F0F111112110FB5D1
394 | 0F121111110F0D5FC6D1D1A71174C9653D3636351D0F0F60C6CDD1CD117AB656
395 | 3627276D6D745636231B0A8C9BC59B5D35150F0FA6CDD1D1CC342EB6A9563636
396 | 362D1B0F19B2C6C6C6C6C6CDD1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1
397 | D1D1D1D1CDCAC6BCB18F767D86510F11111111110D877B767B857B7D86960F11
398 | 111111110D477B757C94B8510F1112110F79D1550A1111100B76A4A407C6D1CD
399 | C6C6A60F0F111111110FAEC011111111110F0E67BCCFD1D1C0340A1111111111
400 | 112BA1CDCDD1D1D1111D1111111111CB3C111111111179D1C734111111111997
401 | C6CDD1D1D1D1791B111111111111115BBEC6C6C6C6CACDD0D1D1D1D1D1D1D1D1
402 | D1D1D1D10000D1D1D1D1D1D1D1D1D1D0CDC6C6C1BC300C0B0E0F111211111211
403 | 100D0B0B0B590B0C0B0E0F1112111112110E0B0C0B30BC261111111110AED19B
404 | 0A1211110D3FA4A4B1BCD1CDC6C6A60F0F1112111112622B11111112110F0D90
405 | BCC6D1D1D1D1C7B079807998C7CDCDCDCDD1D1D1B5B5B5B5B5B5B5D0D0C08079
406 | 80C3CDD1D1D1B5807998C7CDC6CDD1D1D1D1D1D1B58A798079B5C7CDC6C6C6C6
407 | CACDD1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1CDCDC6C6
408 | C6320D0F0F1111111111111111110F0E0F720F0F0F111111111111111111100F
409 | 0F3AC0111112110F0DBED1B61B1111110E1FA4A4B1BCD1CDC6C6A60F0F111111
410 | 1111111111111111110F0DA5BCC6D1D1D1D1D0D0D0D1D0D0CFCDCDCDCDD1D1D1
411 | D1D1D1D0D0D0D0D1D0D0D0D0CFCDCDD1D1D1D0D0D0CDCDCDCDCDD1D1D1D1D1D1
412 | D0D0D1D0D0D0CFCDCDCDC6CDCDD0D1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1
413 | D1D1D1D1D1D1D1D0CDCDC6C6C63A0F1111111111111111111111111111791111
414 | 11111111111111111111111111428A111111111019C6D1CE111D11110F0D94A4
415 | AABCD1CDC6C6A60F0A0A111111111111111211110F105ABCBCC6CDD1D1D1D1D0
416 | D0D0D1D0D0CDCDCFD1D1D1D1D1D1D0D1D0D0D0D0D1D0D0D0D0D1D0D1D1D1D0D0
417 | D0D1CDCDCDCDD1D1D1D1D1D1D1D0D0D0D0D1D0CDCDCDCDCDD1D1D1D1D1D1D1D1
418 | D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1CDCDCDC6CD4165A356444444
419 | 44444444442D1D0A11A382A97A56444444444444444436271D4955365D440A0F
420 | 3ACAD1D11D9BA9230F0E67B1B1B8D0CDCDCDA61165B6564444443E443D351D11
421 | 0F33BCBCBCC6CDD1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
422 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D0CDD1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
423 | D0CDCDD1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1
424 | CDCDCDCDCD42160A111111111111111111111111118A1D1D1111111111111111
425 | 1111111111340A0A1111110F6ACDD1D1341D1111110F25BC07BCD1D1CDCDB411
426 | 1D1111111111111111111B4991C6C6C6C6C6CDD0D1D1D1D1D1D1D1D1D1D1D1D1
427 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
428 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
429 | 0000D1D1D1D1D1D1D1D1D1D1D1CDCDCDD1C3B5B5B5B5B5B5B5B5B5B5B5B5B5B5
430 | B5C0B5B5BAB5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B4C2CDD1D1C3B5B5B5
431 | B4ADAEC6C6C6CDD1D1D0C7B5B5B5B5B5B5B5B5B5C0D0CDCDCDCDC6C6C6CACDD1
432 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
433 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
434 | D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D0
435 | D0D1D0D0D0D0D0D1D0D0D0D0D0D1D0D0D0D0D1D0D0D0D0D1D0D0D0D0D1D0D0D0
436 | D0D1D0CDCFCDD1D1D1D0D0D0D0CFCDCDC6CACFD1D1D1D1D1D1D1D0D0D0D0D1D0
437 | D0D0CFCDCDCDCDCDCDCDD0D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
438 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
439 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1
440 | D1D1D1D1D1D1D1D1D1D1D1D1D0D0D0D0D1D0D0D0D0D1D0D0D0D0D1D0D0D0D0D1
441 | D0D0D0D0D1D0D0D0D0D1D0D0D0D0D1D0D0D0D1D1D1D0D1D0D0D0CDCDCDCDD1D1
442 | D1D1D1D1D1D0D1D0D0D0D0D1D0D0D0CDCFCDCDCDCDD1D1D1D1D1D1D1D1D1D1D1
443 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
444 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
445 | D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
446 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
447 | D1D1D1D1D1D1D1D1CDD1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D0CDD1
448 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
449 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
450 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1
451 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
452 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
453 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
454 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
455 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1
456 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
457 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
458 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
459 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
460 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
461 | D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
462 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
463 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
464 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
465 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
466 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1
467 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
468 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
469 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
470 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
471 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
472 | 0000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
473 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
474 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
475 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
476 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
477 | D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
478 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
479 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
480 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
481 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
482 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1
483 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
484 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
485 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
486 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
487 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
488 | D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
489 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
490 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
491 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
492 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
493 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1
494 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
495 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
496 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
497 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
498 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1
499 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
500 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
501 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
502 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
503 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
504 | D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
505 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
506 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
507 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
508 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
509 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1
510 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
511 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
512 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
513 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
514 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
515 | 0000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
516 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
517 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
518 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
519 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
520 | D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
521 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
522 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
523 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
524 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
525 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D10000D1D1D1D1D1D1
526 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
527 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
528 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
529 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
530 | D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1
531 | D1D1D1D10000}
532 | OnClick = Panel1Click
533 | end
534 | object Image3: TImage
535 | Left = 178
536 | Top = 184
537 | Width = 113
538 | Height = 34
539 | AutoSize = True
540 | Picture.Data = {
541 | 07544269746D61709E130000424D9E1300000000000036040000280000007100
542 | 0000220000000100080000000000680F00000000000000000000000100000001
543 | 000000000000000080000080000000808000800000008000800080800000C0C0
544 | C000C0DCC000F0CAA6009CCE9C00FF00000000630000009C000031313100319C
545 | 310063636300639C630063CE63009C9C9C009CCE9C00CECECE00CEFFCE000063
546 | FF00009CFF00319CFF00639CFF0063CEFF009CCEFF00CECEFF00CEFFFF00FFFF
547 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
548 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
549 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
550 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
551 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
552 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
553 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
554 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
555 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
556 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
557 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
558 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
559 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
560 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
561 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
562 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
563 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
564 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
565 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
566 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
567 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
568 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
569 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
570 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
571 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
572 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
573 | FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F0FBFF00A4A0
574 | A000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF
575 | FF001F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
576 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
577 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
578 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F0000001F1F0B0B1F0B0B1F0B0B
579 | 1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B
580 | 0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F
581 | 0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B
582 | 1F0B0B1F0B0B1F0000001F1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B
583 | 1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B
584 | 0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F
585 | 0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0000001F1F
586 | 0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B
587 | 1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B
588 | 0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F
589 | 0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0000001F1F0B0B1F0B0B1F0B0B1F0B0B1F
590 | 0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B
591 | 1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B
592 | 0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F
593 | 0B0B1F0000001F1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F
594 | 0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B
595 | 1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B
596 | 0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0000001F1F0B0B1F0B
597 | 0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F
598 | 0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B
599 | 1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B
600 | 0B1F0B0B1F0B0B1F0B0B1F0000001F1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B
601 | 0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F
602 | 0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B
603 | 1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F0B0B1F00
604 | 00001F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
605 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
606 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
607 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F0000001F1F1F1F1F1F1F1F1F1F
608 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
609 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
610 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
611 | 1F1F1F1F1F1F1F0000001F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
612 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
613 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1C1F1F1F1F1F
614 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1B1F1F1F1F1F0000001F1F
615 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
616 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
617 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1B171F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
618 | 1F1F1F1F1F1F1F1F1F171B1F1F1F1F0000001F1F1F1F1F1F1F1F1F1F1F1F1F1F
619 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
620 | 1F1F1F1F1F1D18171A1F1F1F1F1C18181C1F1F1F1F1C191F1D191F1E181E1F1F
621 | 1F1B1719181D1F1F1F1F1C1819191B1F1F1F1F191C1F191B1F1F1F1F1F19171F
622 | 1F1F1F0000001F1F1F1313131313131313151F1F1F1F1F1F1F1F1F15100E0E0E
623 | 10131F1F1F1F1F1F1513131F1F1F1F1F1F1F151313151F1F1E17191E1B1F1F1F
624 | 1D171C1D171D1F1F1F1B171F1C171F1E171E1F1F1F1B171D19171F1F1F1F1719
625 | 1F17191F1F1F1F17191F17191F1F1F1F1F17171C1F1F1F0000001F1F13000000
626 | 00000000000000101F1F1F1F1F1F100000000000000000131F1F1F1F13000E1F
627 | 1F1F1F1F1F1F00000E1F1F1F1C171F1F1F1F1F1F1C171F1F171B1F1F1F1B171F
628 | 1C171F1E171E1F1F1F1B171F1F171D1F1F1F1A171C17191F1F1F1F171A1F1819
629 | 1F1F1F1F1B1719191F1F1F0000001F1F1500001F1515151513100000001F1F1F
630 | 1F130000151F1F1F1F100000151F1F1F13000E1F1F1F1F1F1500000E1F1F1F1F
631 | 1E171C1F1D1F1F1F1D171E1F171C1F1F1F1B171F1B171D1C171E1F1F1F1B171F
632 | 1C171E1F1F1F1F1E1C17191F1F1F1F17191F17191F1F1F1F18191F171E1F1F00
633 | 00001F1F1500001F1F1F1F1F1F1F1F00000E1F1F1F0000101F1F1F1F1F1F1000
634 | 0E1F1F1F13000E1F1F1F1F1500000E1F1F1F1F1F1F1A1717171F1F1F1F191717
635 | 181F1F1F1F1A171717181917171F1F1F1F1B171717181F1F1F1F1B1718171D1F
636 | 1F1F1F171717171C1F1F1F1C171C1F17191F1F0000001F1F1500001F1F1F1F1F
637 | 1F1F1F1F0000151F1F15151F1F1F1F1F1F1F1500001F1F1F13000E1F1F1F1000
638 | 00101F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
639 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
640 | 1F1F1F1F1F1F1F0000001F1F1500001F1F1F1F1F1F1F1F1F0E000E1F1F1F1F1F
641 | 1F1F1F1F1F1F13000E1F1F1F13000E1F1F130000101F1F1F1F1F1F1F1F16161F
642 | 1F1F1F1F1F1F1F16161F1F1F1F1F1F1F1F1F1F1F16161F1F1F1F1F1F1F1F1F1F
643 | 1F1F1F1F1F161F1F1F161F1F1F1F1F1F1F1F1F1F1F16161F1F1F1F0000001F1F
644 | 1500001F1F1F1F1F1F1F1F1F1300001F1F1F1F1F1F1F1F1F1F150000151F1F1F
645 | 13000E1F100000131F1F1F1F1F1F1F120C0C0C0D121F1F1F1F0F0C120D0F1F1F
646 | 1F120C0D1F1F1F120C0D0A1F1F0F0C161F1F0F0C151F1F1F0F0C0C0A120C0F1F
647 | 120C0F1F1F1F1F150C0C0C0D121F1F0000001F1F1500001F1F1F1F1F1F1F1F1F
648 | 1500001F1F1F1F1F1F10000000000E151F1F1F1F13000E100000151F1F1F1F1F
649 | 1F1F1F0F121F1F0A0C111F1F0F0C0A1F160C0C1F1F0A0C0D1F1F1F0C0C1F1F1F
650 | 1F0C0C121F1F0C0C111F1F0A0C0C1F150C0C1F1F120C0F1F1F1F160C0C0A1F1F
651 | 0A1F1F0000001F1F1500001F1F1F1F1F1F1F1F1F1500001F1F1F1F1F1F130E0E
652 | 00000E1F1F1F1F1F1300000000131F1F1F1F1F1F1F1F1F1F1F1F1F1F0D0C1F1F
653 | 0C0C161F1F0D0C0A1F0A0C0F1F1F1F0C0C1F1F1F0A0C0D0D1F160C0D0C1F1F0A
654 | 0C0C1F1F0D0C1F1F0A0C0F1F1F1F110C0F1F1F1F1F1F1F0000001F1F1500001F
655 | 1F1F1F1F1F1F1F1F1000001F1F1F1F1F1F1F1F1F1F1300001F1F1F1F13000E13
656 | 0000151F1F1F1F1F1F1F1F1F1F1F1F0A0C0C1F150C0C1F1F1F0F0C111F0A0C0F
657 | 1F1F1F0C0C1F1F1F0F0C120F160A0C120F0A1F1F0F0C12160D0C1F1F0A0C0F1F
658 | 1F1F0F0C0F1F1616161F1F0000001F1F1500001F1F1F1F1F1F1F1F1F0000101F
659 | 1F1F1F1F1F1F1F1F1F1F0000131F1F1F13000E1F150000131F1F1F1F1F1F1F1F
660 | 1F1F120C0C0C1F160C0C1F1F1F0F0C111F0A0C0F1F1F1F0C0C1F1F1F0C0C160A
661 | 120D0C150A0F1F1F1F1F0A0F0C0C1F1F0A0C0F1F1F1F0F0C0D12120C0C151F00
662 | 00001F1F1500001F1F1F1F1F1F1F1F1300001F1F1F1300001F1F1F1F1F1F0E00
663 | 131F1F1F13000E1F1F1F00000E1F1F1F1F1F1F1F0A0C0C0C0C0A1F1F0C0C161F
664 | 1F0D0C0A1F0A0C0F1F1F1F0C0C1F1F160C0C1F1F0C0C0C1F1F0C1F1F1F1F1F1F
665 | 0C0C161F0A0C0C120A1F0A0C0F1F1F0C0C161F0000001F1F1500001F1F1F1F1F
666 | 1F1F100000131F1F1F150000131F1F1F1F1300001F1F1F1F13000E1F1F1F1F0E
667 | 00001F1F1F1F1F150C0C0C0F1F1F1F1F150C0F1F0A0C0D1F1F0A0C0F1F1F160C
668 | 0C161F110C0F1F1F0D0C0D1F1F0D121F0D12150F0C0C1F1F120C0F0C0C0A1F0C
669 | 0C1F160C0F1F1F0000001F1F1500000E0E0E0E0E00000000131F1F1F1F1F1300
670 | 00000E0E000000131F1F1F1F13000E1F1F1F1F1F100000151F1F1F110C0D161F
671 | 1F1F1F1F1F160F0F0D121F1F0A0D0C0D0F15120C0C110A0F0D121F1F0A0D121F
672 | 1F0A0F1F1F110D0D0F161F1F0A0D121F0F0A1F1F110D0D121F1F1F0000001F1F
673 | 1500000000000000000010151F1F1F1F1F1F1F1F100000000010151F1F1F1F1F
674 | 13000E1F1F1F1F1F1F150000131F1F110C0A1F1F1F1F1F1F1F1F1F1F1F1F1F1F
675 | 1F160C0A1F1F1F0C0C1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
676 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F0000001F1F1F1F1F1F1F1F1F1F1F1F1F1F
677 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
678 | 1F1F1F150C121F1F120A1F1F1F1F1F1F1F1F1F1F1F1F0C1F1F1F1F0C0C161F1F
679 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
680 | 1F1F1F0000001F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
681 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F0A0C0C0C0C0A1F1F
682 | 1F1F1F1F1F1F1F1F1F1F120D0F0D1F1F15161F1F1F1F1F1F1F1F1F1F1F1F1F1F
683 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F0000001F1F1F1F1F1F
684 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
685 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F16161F1F1F1F1F1F1F1F1F1F1F1F1F1F1F0F
686 | 0C0D1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
687 | 1F1F1F1F1F1F1F1F1F1F1F0000001F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
688 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
689 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F16161F1F1F1F1F1F1F1F1F1F
690 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F00
691 | 00001F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
692 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
693 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
694 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F0000001F1F1F1F1F1F1F1F1F1F
695 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
696 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
697 | 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
698 | 1F1F1F1F1F1F1F000000}
699 | OnClick = Panel1Click
700 | end
701 | object Label1: TLabel
702 | Left = 60
703 | Top = 132
704 | Width = 206
705 | Height = 14
706 | Caption = #169' 2021-2025 M. Humm. All rights reserved.'
707 | Font.Charset = ANSI_CHARSET
708 | Font.Color = clBlack
709 | Font.Height = -11
710 | Font.Name = 'Arial'
711 | Font.Style = []
712 | ParentFont = False
713 | OnClick = Panel1Click
714 | end
715 | object Panel3: TPanel
716 | Left = 56
717 | Top = 70
718 | Width = 230
719 | Height = 1
720 | BevelOuter = bvNone
721 | Color = clBlack
722 | Font.Charset = DEFAULT_CHARSET
723 | Font.Color = clBlack
724 | Font.Height = -11
725 | Font.Name = 'MS Sans Serif'
726 | Font.Style = []
727 | ParentFont = False
728 | TabOrder = 0
729 | OnClick = Panel1Click
730 | end
731 | end
732 | end
733 | end
734 |
--------------------------------------------------------------------------------
/Demo/AboutTTY.pas:
--------------------------------------------------------------------------------
1 | {*****************************************************************************
2 | The TComportDrv team licenses this file
3 | to you under the Apache License, Version 2.0 (the
4 | "License"); you may not use this file except in compliance
5 | with the License. A copy of this licence is found in the root directory
6 | of this project in the file LICENCE.txt or alternatively at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing,
11 | software distributed under the License is distributed on an
12 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
13 | KIND, either express or implied. See the License for the
14 | specific language governing permissions and limitations
15 | under the License.
16 | *****************************************************************************}
17 | unit AboutTTY;
18 |
19 | interface
20 |
21 | uses
22 | Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
23 | ExtCtrls, StdCtrls;
24 |
25 | type
26 | TAboutBoxForm = class(TForm)
27 | Panel1: TPanel;
28 | Panel2: TPanel;
29 | Image1: TImage;
30 | Label2: TLabel;
31 | Label3: TLabel;
32 | Panel3: TPanel;
33 | Label4: TLabel;
34 | Label5: TLabel;
35 | Image2: TImage;
36 | Image3: TImage;
37 | Label1: TLabel;
38 | procedure Panel1Click(Sender: TObject);
39 | procedure FormKeyDown(Sender: TObject; var Key: Word;
40 | Shift: TShiftState);
41 | private
42 | FIsModal: boolean;
43 | FReqToClose: boolean;
44 |
45 | procedure CloseMe;
46 | public
47 | // Constructor
48 | constructor Create( AOwner: TComponent; isModal: boolean ); reintroduce; virtual;
49 |
50 | property ReqToClose: boolean read FReqToClose;
51 | end;
52 |
53 | var
54 | AboutBoxForm: TAboutBoxForm;
55 |
56 | implementation
57 |
58 | {$R *.DFM}
59 |
60 | // Constructor
61 | constructor TAboutBoxForm.Create( AOwner: TComponent; isModal: boolean );
62 | begin
63 | inherited Create( AOwner );
64 | FIsModal := isModal;
65 | FReqToClose := false;
66 | end;
67 |
68 | procedure TAboutBoxForm.CloseMe;
69 | begin
70 | if FIsModal then
71 | ModalResult := mrOk
72 | else
73 | FReqToClose := true;
74 | end;
75 |
76 | procedure TAboutBoxForm.Panel1Click(Sender: TObject);
77 | begin
78 | CloseMe;
79 | end;
80 |
81 | procedure TAboutBoxForm.FormKeyDown(Sender: TObject; var Key: Word;
82 | Shift: TShiftState);
83 | begin
84 | CloseMe;
85 | end;
86 |
87 | end.
88 |
--------------------------------------------------------------------------------
/Demo/MnForm.ddp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MHumm/ComPortDriver/bf448a548bc08812b39f7e5ebd31cea6f077b3de/Demo/MnForm.ddp
--------------------------------------------------------------------------------
/Demo/MnForm.pas:
--------------------------------------------------------------------------------
1 | {*****************************************************************************
2 | The TComportDrv team licenses this file
3 | to you under the Apache License, Version 2.0 (the
4 | "License"); you may not use this file except in compliance
5 | with the License. A copy of this licence is found in the root directory
6 | of this project in the file LICENCE.txt or alternatively at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing,
11 | software distributed under the License is distributed on an
12 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
13 | KIND, either express or implied. See the License for the
14 | specific language governing permissions and limitations
15 | under the License.
16 | *****************************************************************************}
17 | unit MnForm;
18 |
19 | interface
20 |
21 | uses
22 | // Delphi units
23 | Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
24 | Menus, ComCtrls, ExtCtrls, StdCtrls, ToolWin, ImgList, ClipBrd,idglobal,
25 | // ComDrv32 units
26 | CPDrv,
27 | // TTY units
28 | AboutTTY,
29 | SettingsDlg, System.ImageList;
30 |
31 | type
32 | TMainForm = class(TForm)
33 | cpDrv: TCommPortDriver;
34 | MainMenu: TMainMenu;
35 | FileMenu: TMenuItem;
36 | OptionsMenu: TMenuItem;
37 | Splitter1: TSplitter;
38 | RXPanel: TPanel;
39 | IncomingRichEdit: TRichEdit;
40 | Panel2: TPanel;
41 | TXPanel: TPanel;
42 | OutgoingRichEdit: TRichEdit;
43 | Panel3: TPanel;
44 | ToolBar1: TToolBar;
45 | ConnectToolButton: TToolButton;
46 | DisconnectToolButton: TToolButton;
47 | SettingsToolButton: TToolButton;
48 | E_ImageList: TImageList;
49 | QuitTTYToolButton: TToolButton;
50 | SerialIOSettingsCmd: TMenuItem;
51 | Label1: TLabel;
52 | Label2: TLabel;
53 | IT_PopupMenu: TPopupMenu;
54 | OT_PopupMenu: TPopupMenu;
55 | IT_ClearCmd: TMenuItem;
56 | OT_ClearCmd: TMenuItem;
57 | N1: TMenuItem;
58 | OT_CutCmd: TMenuItem;
59 | OT_CopyCmd: TMenuItem;
60 | N3: TMenuItem;
61 | IT_CopyCmd: TMenuItem;
62 | ActionsMenu: TMenuItem;
63 | ActionsConnectCmd: TMenuItem;
64 | ActionsDisconnectCmd: TMenuItem;
65 | FileQuitCmd: TMenuItem;
66 | HelpMenu: TMenuItem;
67 | HelpAboutCmd: TMenuItem;
68 | ToolButton1: TToolButton;
69 | OT_PasteCmd: TMenuItem;
70 | Panel1: TPanel;
71 | StatusPanel: TPanel;
72 | FrameSettingsPanel: TPanel;
73 | FlowSettingsPanel: TPanel;
74 | procedure SettingsToolButtonClick(Sender: TObject);
75 | procedure FormCreate(Sender: TObject);
76 | procedure ConnectToolButtonClick(Sender: TObject);
77 | procedure DisconnectToolButtonClick(Sender: TObject);
78 | procedure OutgoingRichEditKeyDown(Sender: TObject; var Key: Word;
79 | Shift: TShiftState);
80 | procedure OT_ClearCmdClick(Sender: TObject);
81 | procedure OutgoingRichEditKeyPress(Sender: TObject; var Key: Char);
82 | ///
83 | /// Handles all incoming data
84 | ///
85 | procedure cpDrvReceiveData(Sender: TObject; DataPtr: Pointer;
86 | DataSize: DWord);
87 | procedure IT_ClearCmdClick(Sender: TObject);
88 | procedure QuitTTYToolButtonClick(Sender: TObject);
89 | procedure HelpAboutCmdClick(Sender: TObject);
90 | procedure OT_CutCmdClick(Sender: TObject);
91 | procedure OT_CopyCmdClick(Sender: TObject);
92 | procedure OT_PasteCmdClick(Sender: TObject);
93 | procedure IT_CopyCmdClick(Sender: TObject);
94 | procedure OT_PopupMenuPopup(Sender: TObject);
95 | procedure IT_PopupMenuPopup(Sender: TObject);
96 | private
97 | // Startup about-box (splash screen)
98 | FAboutBox: TAboutBoxForm;
99 | FAboutBoxShownTime: DWORD;
100 |
101 | // Called when the message queue gets empty.
102 | procedure IdleProc( Sender: TObject; var Done: boolean );
103 | // Updates the panels on bottom of this window.
104 | procedure UpdateStatusPanels;
105 | // Displays an error box informing the user we can't send data
106 | procedure CannotSendError;
107 | public
108 | end;
109 |
110 | var
111 | MainForm: TMainForm;
112 |
113 | implementation
114 |
115 | {$R *.DFM}
116 |
117 | // Form setup
118 | procedure TMainForm.FormCreate(Sender: TObject);
119 | begin
120 | // Redirect OnIdle
121 | Application.OnIdle := IdleProc;
122 | // Display the splash screen
123 | FAboutBox := TAboutBoxForm.Create( nil, false );
124 | Enabled := false;
125 | FAboutBoxShownTime := GetTickCount();
126 | FAboutBox.Show;
127 | FAboutBox.Update;
128 | end;
129 |
130 | // Lets the user to customize I/O settings
131 | procedure TMainForm.SettingsToolButtonClick(Sender: TObject);
132 | var dlg: TSettingsForm;
133 | begin
134 | // Tell the user we cannot change settings while a connection is active
135 | if cpDrv.Connected then
136 | begin
137 | if Application.MessageBox( 'Could not change settings while a connection is active.'#13#10+
138 | 'Close the connection and continue ?',
139 | 'Confirm',
140 | MB_OKCANCEL or MB_ICONQUESTION ) <> ID_OK then
141 | exit;
142 | cpDrv.Disconnect;
143 | end;
144 | // Let the user to customize settings
145 | dlg := nil;
146 | try
147 | dlg := TSettingsForm.Create( Self, cpDrv );
148 | dlg.ShowModal;
149 | finally
150 | dlg.Free;
151 | end;
152 | end;
153 |
154 | // Called when the message queue gets empty.
155 | procedure TMainForm.IdleProc( Sender: TObject; var Done: boolean );
156 | var elapsedTime: DWORD;
157 | begin
158 | Done := false;
159 | // Hides the splash-screen
160 | if FAboutBox <> nil then
161 | begin
162 | elapsedTime := GetTickCount - FAboutBoxShownTime;
163 | if elapsedTime < 400 then
164 | SetForegroundWindow( FAboutBox.Handle );
165 | if (elapsedTime > 5000) or FAboutBox.ReqToClose then
166 | begin
167 | FAboutBox.Free;
168 | FAboutBox := nil;
169 | Enabled := true;
170 | end;
171 | end;
172 | // Updates status panels
173 | UpdateStatusPanels;
174 | end;
175 |
176 | // Updates the panels on bottom of this window.
177 | procedure TMainForm.UpdateStatusPanels;
178 | const _databits: array[TDataBits] of string = ('5','6','7','8');
179 | _parity: array[TParity] of string = ('N','E','O','M','S');
180 | _stopbits: array[TStopBits] of string = ('1','1.5','2');
181 | _hwflow: array[THwFlowControl] of string = ('None','None+DTR on','RTS/CTS');
182 | _swflow: array[TSwFlowControl] of string = ('None','XON/XOFF');
183 | var
184 | s: string;
185 | begin
186 | // Updates the connection status
187 | if cpDrv.Connected then
188 | s := 'Connected to "' + string(cpDrv.PortName) + '"'
189 | else
190 | s := 'Not connected';
191 | StatusPanel.Caption := s;
192 | // Show current frame settings
193 | s := IntToStr( cpDrv.BaudRateValue ) + ',' +
194 | _databits[ cpDrv.DataBits ] + ',' +
195 | _parity[ cpDrv.Parity ] + ',' +
196 | _stopbits[ cpDrv.StopBits ];
197 | FrameSettingsPanel.Caption := s;
198 | // Show current flow control settings
199 | s := 'Hw:' + _hwflow[ cpDrv.HwFlow ] + ' - Sw:' + _swflow[ cpDrv.SwFlow ];
200 | FlowSettingsPanel.Caption := s;
201 | end;
202 |
203 | // Connect
204 | procedure TMainForm.ConnectToolButtonClick(Sender: TObject);
205 | begin
206 | // Do nothing if already connected
207 | if cpDrv.Connected then
208 | exit;
209 | // Try connecting
210 | if not cpDrv.Connect then
211 | begin
212 | Application.MessageBox( 'Could not connect to serial port.'#13#10+
213 | 'Please, check settings and try again.',
214 | 'Error',
215 | MB_OK or MB_ICONERROR );
216 | exit;
217 | end;
218 | end;
219 |
220 | // Disconnect
221 | procedure TMainForm.DisconnectToolButtonClick(Sender: TObject);
222 | begin
223 | // Do nothing if not connected
224 | if not cpDrv.Connected then
225 | exit;
226 | // Disconnect
227 | cpDrv.Disconnect;
228 | end;
229 |
230 | // If user is trying to send text but the connection is not active then
231 | // automatically bring it on.
232 | procedure TMainForm.OutgoingRichEditKeyDown(Sender: TObject; var Key: Word;
233 | Shift: TShiftState);
234 | begin
235 | if not cpDrv.Connected then
236 | begin
237 | ConnectToolButtonClick( nil );
238 | if not cpDrv.Connected then
239 | Key := 0;
240 | end;
241 | end;
242 |
243 | procedure TMainForm.OT_ClearCmdClick(Sender: TObject);
244 | begin
245 | OutgoingRichEdit.Lines.BeginUpdate;
246 | OutgoingRichEdit.Lines.Clear;
247 | OutgoingRichEdit.Lines.EndUpdate;
248 | end;
249 |
250 |
251 | // Displays an error box informing the user we can't send data
252 | procedure TMainForm.CannotSendError;
253 | begin
254 | if cpDrv.CheckLineStatus then
255 | Application.MessageBox( 'Could not send data.'#13#10+
256 | 'No device connected to serial port or device is off. Please, turn it on.'#13#10 +
257 | 'Try setting Device Check to Off in the settings dialog box.'#13#10 +
258 | 'Also, replace your two wires serial cable with a full wires cable.',
259 | 'Warning',
260 | MB_OK or MB_ICONINFORMATION )
261 | else
262 | Application.MessageBox( 'Could not send data.'#13#10+
263 | 'Please, check connections and try again.'#13#10 +
264 | 'Turn serial device on or, try setting Device Check to On in the settings dialog box.'#13#10 +
265 | 'Also, disable Hardware Flow Control if you are using a two wires cable.',
266 | 'Warning',
267 | MB_OK or MB_ICONINFORMATION )
268 | end;
269 |
270 | procedure TMainForm.OutgoingRichEditKeyPress(Sender: TObject;
271 | var Key: Char);
272 | begin
273 | // Do nothing if not connected
274 | if not cpDrv.Connected then
275 | exit;
276 | // Send the character
277 | if not cpDrv.SendChar(AnsiChar(Key)) then
278 | CannotSendError;
279 | end;
280 |
281 | procedure TMainForm.cpDrvReceiveData(Sender: TObject; DataPtr: Pointer;
282 | DataSize: DWord);
283 | var iLastLine, i: integer;
284 | s, ss: string;
285 | begin
286 | // Convert incoming data into a string
287 | s := StringOfChar( ' ', DataSize );
288 |
289 | ShowMessage('DataSize='+inttostr(DataSize));
290 | for i:=1 to DataSize do begin
291 | ShowMessage('<'+s[i]+'>'+#10+inttostr(ord(s[i]))+'/'+inttohex(ord(s[i]),2));
292 | end;
293 |
294 | ShowMessage('DataSize='+inttostr(DataSize)+#10+'<'+s+'>'+inttostr(length(s)));
295 |
296 | move( DataPtr^, pchar(s)^, DataSize );
297 |
298 | // for i:=1 to 9 do showmessage(inttobin(ord(s[i])));
299 | // Exit if s is empty. This usually occurs when one or more NULL characters
300 | // (chr(0)) are received.
301 | while pos( #0, s ) > 0 do
302 | delete( s, pos( #0, s ), 1 );
303 | if s = '' then
304 | exit;
305 | // Remove line feeds
306 | i := pos( #10, s );
307 | while i <> 0 do
308 | begin
309 | delete( s, i, 1 );
310 | i := pos( #10, s );
311 | end;
312 |
313 | // Don't redraw the rich edit control until we finished updating it
314 | //IncomingRichEdit.Lines.BeginUpdate;
315 | // Get last line index
316 | iLastLine := IncomingRichEdit.Lines.Count-1;
317 | // If the rich edit is empty...
318 | if iLastLine = -1 then
319 | begin
320 | // Remove line feeds from the string
321 | i := pos( #10, s );
322 | while i <> 0 do
323 | begin
324 | delete( s, i, 1 );
325 | i := pos( #10, s );
326 | end;
327 | // Remove carriage returns from the string (break lines)
328 | i := pos( #13, s );
329 | while i <> 0 do
330 | begin
331 | ss := copy( s, 1, i-1 );
332 | delete( s, 1, i );
333 | IncomingRichEdit.Lines.Append( ss );
334 | i := pos( #13, s );
335 | end;
336 | IncomingRichEdit.Lines.Append( s );
337 | end
338 | else
339 | begin
340 | // String to add is : last line added + new one
341 | s := IncomingRichEdit.Lines[iLastLine] + s;
342 | // Remove carriage returns (break lines)
343 | i := pos( #13, s );
344 | while i <> 0 do
345 | begin
346 | ss := copy( s, 1, i-1 );
347 | delete( s, 1, i );
348 | if iLastLine <> -1 then
349 | begin
350 | IncomingRichEdit.Lines[iLastLine] := ss;
351 | iLastLine := -1;
352 | end
353 | else
354 | IncomingRichEdit.Lines.Append( ss );
355 | i := pos( #13, s );
356 | end;
357 | if iLastLine <> -1 then
358 | IncomingRichEdit.Lines[iLastLine] := s
359 | else
360 | IncomingRichEdit.Lines.Append( s );
361 | end;
362 | //IncomingRichEdit.Lines.EndUpdate;
363 | // Scroll incoming text rich edit
364 | SendMessage( IncomingRichEdit.Handle, EM_SCROLLCARET, 0, 0 );
365 | end;
366 |
367 | procedure TMainForm.IT_ClearCmdClick(Sender: TObject);
368 | begin
369 | IncomingRichEdit.Lines.BeginUpdate;
370 | IncomingRichEdit.Lines.Clear;
371 | IncomingRichEdit.Lines.EndUpdate;
372 | end;
373 |
374 | // Quits TTY
375 | procedure TMainForm.QuitTTYToolButtonClick(Sender: TObject);
376 | begin
377 | PostQuitMessage( Handle );
378 | end;
379 |
380 | procedure TMainForm.HelpAboutCmdClick(Sender: TObject);
381 | var dlg: TAboutBoxForm;
382 | begin
383 | dlg := nil;
384 | try
385 | dlg := TAboutBoxForm.Create( Self, true );
386 | dlg.ShowModal;
387 | finally
388 | dlg.Free;
389 | end;
390 | end;
391 |
392 | procedure TMainForm.OT_CutCmdClick(Sender: TObject);
393 | begin
394 | OutgoingRichEdit.CutToClipboard;
395 | end;
396 |
397 | procedure TMainForm.OT_CopyCmdClick(Sender: TObject);
398 | begin
399 | OutgoingRichEdit.CopyToClipboard;
400 | end;
401 |
402 | procedure TMainForm.OT_PasteCmdClick(Sender: TObject);
403 | var clp: TClipboard;
404 | s, ss: string;
405 | iLastLine, i: integer;
406 | begin
407 | // Get the clipboard object
408 | clp := Clipboard;
409 | // If the clipboard contains some text...
410 | if clp.HasFormat( CF_TEXT ) then
411 | begin
412 | // Automatically connect
413 | if not cpDrv.Connected then
414 | begin
415 | ConnectToolButtonClick( nil );
416 | if not cpDrv.Connected then
417 | exit;
418 | end;
419 | // Get the text
420 | s := clp.AsText;
421 | // Remove line feeds
422 | i := pos( #10, s );
423 | while i <> 0 do
424 | begin
425 | delete( s, i, 1 );
426 | i := pos( #10, s );
427 | end;
428 | // Add the text to the rich edit and send it
429 | iLastLine := OutgoingRichEdit.Lines.Count-1;
430 | i := pos( #13, s );
431 | while i <> 0 do
432 | begin
433 | ss := copy( s, 1, i-1 );
434 | delete( s, 1, i );
435 | if iLastLine <> -1 then
436 | begin
437 | OutgoingRichEdit.Lines[iLastLine] := OutgoingRichEdit.Lines[iLastLine] + ss;
438 | iLastLine := -1;
439 | end
440 | else
441 | OutgoingRichEdit.Lines.Append( ss );
442 | if not cpDrv.SendString(AnsiString(ss) + #13 ) then
443 | begin
444 | CannotSendError;
445 | exit;
446 | end;
447 | i := pos( #13, s );
448 | end;
449 | if iLastLine <> -1 then
450 | OutgoingRichEdit.Lines[iLastLine] := OutgoingRichEdit.Lines[iLastLine] + s
451 | else
452 | OutgoingRichEdit.Lines.Append( s );
453 | if not cpDrv.SendString(AnsiString(s)) then
454 | CannotSendError;
455 | end;
456 | end;
457 |
458 | procedure TMainForm.IT_CopyCmdClick(Sender: TObject);
459 | begin
460 | IncomingRichEdit.CopyToClipboard;
461 | end;
462 |
463 | procedure TMainForm.OT_PopupMenuPopup(Sender: TObject);
464 | begin
465 | OT_ClearCmd.Enabled := OutgoingRichEdit.Lines.Count > 0;
466 | OT_CutCmd.Enabled := OutgoingRichEdit.SelLength > 0;
467 | OT_CopyCmd.Enabled := OutgoingRichEdit.SelLength > 0;
468 | OT_PasteCmd.Enabled := Clipboard.HasFormat( CF_TEXT );
469 | end;
470 |
471 | procedure TMainForm.IT_PopupMenuPopup(Sender: TObject);
472 | begin
473 | IT_ClearCmd.Enabled := IncomingRichEdit.Lines.Count > 0;
474 | IT_CopyCmd.Enabled := IncomingRichEdit.SelLength > 0;
475 | end;
476 |
477 | end.
478 |
--------------------------------------------------------------------------------
/Demo/Res/About.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MHumm/ComPortDriver/bf448a548bc08812b39f7e5ebd31cea6f077b3de/Demo/Res/About.bmp
--------------------------------------------------------------------------------
/Demo/Res/COMPORT.ICO:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MHumm/ComPortDriver/bf448a548bc08812b39f7e5ebd31cea6f077b3de/Demo/Res/COMPORT.ICO
--------------------------------------------------------------------------------
/Demo/Res/Connect.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MHumm/ComPortDriver/bf448a548bc08812b39f7e5ebd31cea6f077b3de/Demo/Res/Connect.bmp
--------------------------------------------------------------------------------
/Demo/Res/Disconnect.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MHumm/ComPortDriver/bf448a548bc08812b39f7e5ebd31cea6f077b3de/Demo/Res/Disconnect.bmp
--------------------------------------------------------------------------------
/Demo/Res/Quit.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MHumm/ComPortDriver/bf448a548bc08812b39f7e5ebd31cea6f077b3de/Demo/Res/Quit.bmp
--------------------------------------------------------------------------------
/Demo/Res/Settings.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MHumm/ComPortDriver/bf448a548bc08812b39f7e5ebd31cea6f077b3de/Demo/Res/Settings.bmp
--------------------------------------------------------------------------------
/Demo/Res/TTYDemo.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MHumm/ComPortDriver/bf448a548bc08812b39f7e5ebd31cea6f077b3de/Demo/Res/TTYDemo.bmp
--------------------------------------------------------------------------------
/Demo/SettingsDlg.dfm:
--------------------------------------------------------------------------------
1 | object SettingsForm: TSettingsForm
2 | Left = 406
3 | Top = 310
4 | BorderStyle = bsDialog
5 | Caption = 'Settings'
6 | ClientHeight = 206
7 | ClientWidth = 314
8 | Color = clBtnFace
9 | Font.Charset = DEFAULT_CHARSET
10 | Font.Color = clWindowText
11 | Font.Height = -11
12 | Font.Name = 'MS Sans Serif'
13 | Font.Style = []
14 | Position = poDesktopCenter
15 | TextHeight = 13
16 | object Panel1: TPanel
17 | Left = 0
18 | Top = 0
19 | Width = 314
20 | Height = 206
21 | Align = alClient
22 | BevelOuter = bvNone
23 | BorderWidth = 2
24 | TabOrder = 0
25 | object SettingsPageControl: TPageControl
26 | Left = 2
27 | Top = 2
28 | Width = 310
29 | Height = 202
30 | ActivePage = BaseSettingsTabSheet
31 | Align = alClient
32 | TabOrder = 0
33 | object BaseSettingsTabSheet: TTabSheet
34 | Caption = 'Base Settings'
35 | object Label1: TLabel
36 | Left = 32
37 | Top = 24
38 | Width = 51
39 | Height = 13
40 | Alignment = taRightJustify
41 | Caption = 'Port name:'
42 | FocusControl = PortComboBox
43 | end
44 | object Label2: TLabel
45 | Left = 34
46 | Top = 52
47 | Width = 49
48 | Height = 13
49 | Alignment = taRightJustify
50 | Caption = 'Baud rate:'
51 | FocusControl = BaudRateComboBox
52 | end
53 | object Label3: TLabel
54 | Left = 38
55 | Top = 80
56 | Width = 45
57 | Height = 13
58 | Alignment = taRightJustify
59 | Caption = 'Data bits:'
60 | FocusControl = DataBitsComboBox
61 | end
62 | object Label4: TLabel
63 | Left = 54
64 | Top = 108
65 | Width = 29
66 | Height = 13
67 | Alignment = taRightJustify
68 | Caption = 'Parity:'
69 | FocusControl = ParityComboBox
70 | end
71 | object Label5: TLabel
72 | Left = 39
73 | Top = 136
74 | Width = 44
75 | Height = 13
76 | Alignment = taRightJustify
77 | Caption = 'Stop bits:'
78 | FocusControl = StopBitsComboBox
79 | end
80 | object PortComboBox: TComboBox
81 | Left = 88
82 | Top = 20
83 | Width = 114
84 | Height = 21
85 | TabOrder = 0
86 | Items.Strings = (
87 | '\\.\COM1'
88 | '\\.\COM2'
89 | '\\.\COM3'
90 | '\\.\COM4'
91 | '\\.\COM5'
92 | '\\.\COM6'
93 | '\\.\COM7'
94 | '\\.\COM8'
95 | '\\.\COM9'
96 | '\\.\COM10'
97 | '\\.\COM11'
98 | '\\.\COM12'
99 | '\\.\COM13'
100 | '\\.\COM14'
101 | '\\.\COM15'
102 | '\\.\COM16')
103 | end
104 | object BaudRateComboBox: TComboBox
105 | Left = 88
106 | Top = 48
107 | Width = 114
108 | Height = 21
109 | TabOrder = 1
110 | Items.Strings = (
111 | '110'
112 | '300'
113 | '600'
114 | '1200'
115 | '2400'
116 | '4800'
117 | '9600'
118 | '14400'
119 | '19200'
120 | '38400'
121 | '56000'
122 | '57600'
123 | '115200'
124 | '128000'
125 | '230400'
126 | '256000'
127 | '460800'
128 | '921600')
129 | end
130 | object DataBitsComboBox: TComboBox
131 | Left = 88
132 | Top = 76
133 | Width = 114
134 | Height = 21
135 | Style = csDropDownList
136 | TabOrder = 2
137 | Items.Strings = (
138 | '5'
139 | '6'
140 | '7'
141 | '8')
142 | end
143 | object ParityComboBox: TComboBox
144 | Left = 88
145 | Top = 104
146 | Width = 114
147 | Height = 21
148 | Style = csDropDownList
149 | TabOrder = 3
150 | Items.Strings = (
151 | 'None'
152 | 'Odd'
153 | 'Even'
154 | 'Mark'
155 | 'Space')
156 | end
157 | object StopBitsComboBox: TComboBox
158 | Left = 88
159 | Top = 132
160 | Width = 114
161 | Height = 21
162 | Style = csDropDownList
163 | TabOrder = 4
164 | Items.Strings = (
165 | '1'
166 | '1.5'
167 | '2')
168 | end
169 | end
170 | object FlowControlTabSheet: TTabSheet
171 | Caption = 'Flow Control'
172 | ImageIndex = 1
173 | object Label6: TLabel
174 | Left = 12
175 | Top = 24
176 | Width = 71
177 | Height = 13
178 | Alignment = taRightJustify
179 | Caption = 'Hardware flow:'
180 | FocusControl = HwFlowComboBox
181 | end
182 | object Label7: TLabel
183 | Left = 16
184 | Top = 52
185 | Width = 67
186 | Height = 13
187 | Alignment = taRightJustify
188 | Caption = 'Software flow:'
189 | FocusControl = SwFlowComboBox
190 | end
191 | object Label8: TLabel
192 | Left = 22
193 | Top = 80
194 | Width = 61
195 | Height = 13
196 | Alignment = taRightJustify
197 | Caption = 'DTR control:'
198 | FocusControl = DTRControlComboBox
199 | end
200 | object HwFlowComboBox: TComboBox
201 | Left = 88
202 | Top = 20
203 | Width = 114
204 | Height = 21
205 | Style = csDropDownList
206 | TabOrder = 0
207 | Items.Strings = (
208 | 'None'
209 | 'None but RTS on'
210 | 'RTS/CTS')
211 | end
212 | object SwFlowComboBox: TComboBox
213 | Left = 88
214 | Top = 48
215 | Width = 114
216 | Height = 21
217 | Style = csDropDownList
218 | TabOrder = 1
219 | Items.Strings = (
220 | 'None'
221 | 'XON/XOFF')
222 | end
223 | object DTRControlComboBox: TComboBox
224 | Left = 88
225 | Top = 76
226 | Width = 114
227 | Height = 21
228 | Style = csDropDownList
229 | TabOrder = 2
230 | Items.Strings = (
231 | 'Standard'
232 | 'Keep off')
233 | end
234 | end
235 | object TabSheet1: TTabSheet
236 | Caption = 'Device Control'
237 | ImageIndex = 2
238 | object Label9: TLabel
239 | Left = 13
240 | Top = 24
241 | Width = 70
242 | Height = 13
243 | Alignment = taRightJustify
244 | Caption = 'Device check:'
245 | FocusControl = DevCheckComboBox
246 | end
247 | object DevCheckComboBox: TComboBox
248 | Left = 88
249 | Top = 20
250 | Width = 114
251 | Height = 21
252 | Style = csDropDownList
253 | TabOrder = 0
254 | Items.Strings = (
255 | 'Yes'
256 | 'No')
257 | end
258 | end
259 | end
260 | end
261 | object CancelButton: TButton
262 | Left = 228
263 | Top = 60
264 | Width = 76
265 | Height = 25
266 | Cancel = True
267 | Caption = 'Cancel'
268 | ModalResult = 2
269 | TabOrder = 2
270 | end
271 | object OkButton: TButton
272 | Left = 228
273 | Top = 32
274 | Width = 75
275 | Height = 25
276 | Caption = 'Ok'
277 | Default = True
278 | TabOrder = 1
279 | OnClick = OkButtonClick
280 | end
281 | end
282 |
--------------------------------------------------------------------------------
/Demo/SettingsDlg.pas:
--------------------------------------------------------------------------------
1 | {*****************************************************************************
2 | The TComportDrv team licenses this file
3 | to you under the Apache License, Version 2.0 (the
4 | "License"); you may not use this file except in compliance
5 | with the License. A copy of this licence is found in the root directory
6 | of this project in the file LICENCE.txt or alternatively at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing,
11 | software distributed under the License is distributed on an
12 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
13 | KIND, either express or implied. See the License for the
14 | specific language governing permissions and limitations
15 | under the License.
16 | *****************************************************************************}
17 | unit SettingsDlg;
18 |
19 | interface
20 |
21 | uses
22 | // Delphi units
23 | Windows, Messages, SysUtils, Classes,
24 | Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls,
25 | // ComDrv32 units
26 | CPDrv;
27 |
28 | type
29 | TSettingsForm = class( TForm )
30 | Panel1: TPanel;
31 | SettingsPageControl: TPageControl;
32 | BaseSettingsTabSheet: TTabSheet;
33 | OkButton: TButton;
34 | CancelButton: TButton;
35 | PortComboBox: TComboBox;
36 | Label1: TLabel;
37 | BaudRateComboBox: TComboBox;
38 | Label2: TLabel;
39 | Label3: TLabel;
40 | DataBitsComboBox: TComboBox;
41 | Label4: TLabel;
42 | ParityComboBox: TComboBox;
43 | Label5: TLabel;
44 | StopBitsComboBox: TComboBox;
45 | FlowControlTabSheet: TTabSheet;
46 | Label6: TLabel;
47 | HwFlowComboBox: TComboBox;
48 | Label7: TLabel;
49 | SwFlowComboBox: TComboBox;
50 | Label8: TLabel;
51 | DTRControlComboBox: TComboBox;
52 | TabSheet1: TTabSheet;
53 | Label9: TLabel;
54 | DevCheckComboBox: TComboBox;
55 | procedure OkButtonClick(Sender: TObject);
56 | private
57 | // TCommPortDriver whose settings must be customized
58 | FCPDrv: TCommPortDriver;
59 | // Shows current settings
60 | procedure UpdateControls;
61 | public
62 | // Constructor
63 | constructor Create( AOwner: TComponent; ACPDrv: TCommPortDriver ); reintroduce; virtual;
64 | end;
65 |
66 | implementation
67 |
68 | {$R *.DFM}
69 |
70 | // Constructor
71 | constructor TSettingsForm.Create( AOwner: TComponent; ACPDrv: TCommPortDriver );
72 | begin
73 | // Call inherited constructor
74 | inherited Create( AOwner );
75 | // Save the cpDrv reference
76 | FCPDrv := ACPDrv;
77 | // Show current settings
78 | UpdateControls;
79 | // Be sure the "Base Settings" tab control is the one selected
80 | SettingsPageControl.ActivePage := BaseSettingsTabSheet;
81 | end;
82 |
83 | // Shows current settings
84 | procedure TSettingsForm.UpdateControls;
85 | begin
86 | // Base Settings page
87 | PortComboBox.Text := string(FCPDrv.PortName);
88 | BaudRateComboBox.Text := IntToStr( FCPDrv.BaudRateValue );
89 | DataBitsComboBox.ItemIndex := ord( FCPDrv.DataBits );
90 | ParityComboBox.ItemIndex := ord( FCPDrv.Parity );
91 | StopBitsComboBox.ItemIndex := ord( FCPDrv.StopBits );
92 | // Flow Control page
93 | HwFlowComboBox.ItemIndex := ord( FCPDrv.HwFlow );
94 | SwFlowComboBox.ItemIndex := ord( FCPDrv.SwFlow );
95 | DTRControlComboBox.ItemIndex := ord( not FCPDrv.EnableDTROnOpen );
96 | // Device Control page
97 | DevCheckComboBox.ItemIndex := ord( not FCPDrv.CheckLineStatus );
98 | end;
99 |
100 | procedure TSettingsForm.OkButtonClick(Sender: TObject);
101 | var newPortName: string;
102 | newBaudRate: DWORD;
103 | begin
104 | // Validate settings
105 | newPortName := Trim( PortComboBox.Text );
106 | if newPortName = '' then
107 | begin
108 | Application.MessageBox( 'Please, enter a valid port name.',
109 | 'Error',
110 | MB_OK or MB_ICONERROR );
111 | exit;
112 | end;
113 | newBaudRate := DWORD( StrToIntDef( BaudRateComboBox.Text, -1 ) );
114 | if (newBaudRate < 110) or (newBaudRate > 921600) then
115 | begin
116 | Application.MessageBox( 'Please, enter a valid baud rate.',
117 | 'Error',
118 | MB_OK or MB_ICONERROR );
119 | exit;
120 | end;
121 | // Apply new settings
122 | FCPDrv.PortName := newPortName;
123 | FCPDrv.BaudRateValue := newBaudRate;
124 | FCPDrv.DataBits := TDataBits( DataBitsComboBox.ItemIndex );
125 | FCPDrv.Parity := TParity( ParityComboBox.ItemIndex );
126 | FCPDrv.StopBits := TStopBits( StopBitsComboBox.ItemIndex );
127 | FCPDrv.HwFlow := THwFlowControl( HwFlowComboBox.ItemIndex );
128 | FCPDrv.SwFlow := TSwFlowControl( SwFlowComboBox.ItemIndex );
129 | FCPDrv.EnableDTROnOpen := DTRControlComboBox.ItemIndex = 0;
130 | FCPDrv.CheckLineStatus := DevCheckComboBox.ItemIndex = 0;
131 | // Done
132 | ModalResult := mrOk;
133 | end;
134 |
135 | end.
136 |
--------------------------------------------------------------------------------
/Demo/TTY.dpr:
--------------------------------------------------------------------------------
1 | program TTY;
2 |
3 | uses
4 | Forms,
5 | MnForm in 'MnForm.pas' {MainForm},
6 | SettingsDlg in 'SettingsDlg.pas' {SettingsForm},
7 | AboutTTY in 'AboutTTY.pas' {AboutBoxForm},
8 | CPDrv in '..\Source\CPDrv.pas';
9 |
10 | {$R *.RES}
11 |
12 | begin
13 | Application.Initialize;
14 | Application.Title := 'TTY Demo';
15 | Application.CreateForm(TMainForm, MainForm);
16 | Application.Run;
17 | end.
18 |
--------------------------------------------------------------------------------
/Demo/TTY.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MHumm/ComPortDriver/bf448a548bc08812b39f7e5ebd31cea6f077b3de/Demo/TTY.res
--------------------------------------------------------------------------------
/Demo/TTY_Icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MHumm/ComPortDriver/bf448a548bc08812b39f7e5ebd31cea6f077b3de/Demo/TTY_Icon.ico
--------------------------------------------------------------------------------
/Design/CPDReg.pas:
--------------------------------------------------------------------------------
1 | unit CPDReg;
2 |
3 | interface
4 |
5 | procedure Register;
6 |
7 | implementation
8 |
9 | uses
10 | // Delphi units
11 | Classes,
12 | // ComDrv units
13 | CPDrv;
14 |
15 | //{$R CPDReg.dcr}
16 |
17 | const
18 | TargetTab = 'System';
19 |
20 | procedure Register;
21 | begin
22 | RegisterComponents( TargetTab, [TCommPortDriver]);
23 | end;
24 |
25 | end.
26 |
--------------------------------------------------------------------------------
/Help/COMDRV32.HLP:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MHumm/ComPortDriver/bf448a548bc08812b39f7e5ebd31cea6f077b3de/Help/COMDRV32.HLP
--------------------------------------------------------------------------------
/Help/ComDrv32.GID:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MHumm/ComPortDriver/bf448a548bc08812b39f7e5ebd31cea6f077b3de/Help/ComDrv32.GID
--------------------------------------------------------------------------------
/Help/ComDrv32.cnt:
--------------------------------------------------------------------------------
1 | :Base comdrv32.hlp>main
2 | :Title ComDrv32 Serial I/O Package
3 | ; Link section
4 | ;=============
5 | :Include DELPHI4.cfg
6 | ; CNT section
7 | ;============
8 | :include COMDRV32.TOC
9 |
--------------------------------------------------------------------------------
/Help/ComDrv32.toc:
--------------------------------------------------------------------------------
1 | :Base comdrv32.hlp>main
2 | :Title ComDrv32 Serial I/O Package
3 |
4 | 1 ComDrv32 Reference
5 | 2 About and copyright notice=ABOUT_COPYRIGHT
6 | 2 Getting Started
7 | 3 ComDrv32 Package Overview=OVERVIEW
8 | 2 TCommPortDriver Reference
9 | 3 TCommPortDriver component=TCommPortDriver
10 |
--------------------------------------------------------------------------------
/Images/TCommPortDriver16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MHumm/ComPortDriver/bf448a548bc08812b39f7e5ebd31cea6f077b3de/Images/TCommPortDriver16.png
--------------------------------------------------------------------------------
/Images/TCommPortDriver24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MHumm/ComPortDriver/bf448a548bc08812b39f7e5ebd31cea6f077b3de/Images/TCommPortDriver24.png
--------------------------------------------------------------------------------
/Images/TCommPortDriver32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MHumm/ComPortDriver/bf448a548bc08812b39f7e5ebd31cea6f077b3de/Images/TCommPortDriver32.png
--------------------------------------------------------------------------------
/Images/TCommPortDriver48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MHumm/ComPortDriver/bf448a548bc08812b39f7e5ebd31cea6f077b3de/Images/TCommPortDriver48.png
--------------------------------------------------------------------------------
/Images/TCommPortDriver64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MHumm/ComPortDriver/bf448a548bc08812b39f7e5ebd31cea6f077b3de/Images/TCommPortDriver64.png
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [yyyy] [name of copyright owner]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/NOTICE.txt:
--------------------------------------------------------------------------------
1 | TCommPortDriver V3.0
2 | All rights reseved.
3 |
4 | Copyright (c) 2021 by Markus Humm. (markus [dot] humm [at] googlemail [dot] com) (main contact)
5 | Copyright (c) 2021 by Renate Schaaf.
6 | Copyright (c) 1996-2000 by Marco Cocco.
7 | (mcocco [at] libero [dot] it or: ditrek [at] tiscali [dot] it
8 | Copyright (c) 1996-2000 by d3k Software Company.
9 |
10 | FOR UPDATES : https://github.com/MHumm/ComPortDriver
11 | BUG REPORTS : https://github.com/MHumm/ComPortDriver/issues
--------------------------------------------------------------------------------
/Packages/BuildPackages.groupproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {30BE372F-D9DD-460C-8317-3085FFBDFC11}
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | Default.Personality.12
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/Packages/ComPortDrv.dpk:
--------------------------------------------------------------------------------
1 | package ComPortDrv;
2 |
3 | {$R *.res}
4 | {$R *.dres}
5 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
6 | {$ALIGN 8}
7 | {$ASSERTIONS ON}
8 | {$BOOLEVAL OFF}
9 | {$DEBUGINFO OFF}
10 | {$EXTENDEDSYNTAX ON}
11 | {$IMPORTEDDATA ON}
12 | {$IOCHECKS ON}
13 | {$LOCALSYMBOLS ON}
14 | {$LONGSTRINGS ON}
15 | {$OPENSTRINGS ON}
16 | {$OPTIMIZATION OFF}
17 | {$OVERFLOWCHECKS OFF}
18 | {$RANGECHECKS OFF}
19 | {$REFERENCEINFO ON}
20 | {$SAFEDIVIDE OFF}
21 | {$STACKFRAMES ON}
22 | {$TYPEDADDRESS OFF}
23 | {$VARSTRINGCHECKS ON}
24 | {$WRITEABLECONST OFF}
25 | {$MINENUMSIZE 1}
26 | {$IMAGEBASE $400000}
27 | {$DEFINE DEBUG}
28 | {$ENDIF IMPLICITBUILDING}
29 | {$DESCRIPTION 'COM-Port driver serial I/O component'}
30 | {$LIBSUFFIX AUTO}
31 | {$RUNONLY}
32 | {$IMPLICITBUILD OFF}
33 |
34 | requires
35 | rtl;
36 |
37 | contains
38 | CPDrv in '..\Source\CPDrv.pas';
39 |
40 | end.
41 |
--------------------------------------------------------------------------------
/Packages/ComPortDrv.dproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {80817F0C-2D59-455D-A91B-CFB060CEE373}
4 | ComPortDrv.dpk
5 | 20.3
6 | None
7 | True
8 | Debug
9 | Win32
10 | 1048579
11 | Package
12 | ComPortDrv
13 |
14 |
15 | true
16 |
17 |
18 | true
19 | Base
20 | true
21 |
22 |
23 | true
24 | Base
25 | true
26 |
27 |
28 | true
29 | Base
30 | true
31 |
32 |
33 | true
34 | Base
35 | true
36 |
37 |
38 | true
39 | Base
40 | true
41 |
42 |
43 | true
44 | Base
45 | true
46 |
47 |
48 | true
49 | Cfg_1
50 | true
51 | true
52 |
53 |
54 | true
55 | Cfg_1
56 | true
57 | true
58 |
59 |
60 | true
61 | Cfg_1
62 | true
63 | true
64 |
65 |
66 | true
67 | Base
68 | true
69 |
70 |
71 | true
72 | Cfg_2
73 | true
74 | true
75 |
76 |
77 | true
78 | Cfg_2
79 | true
80 | true
81 |
82 |
83 | true
84 | Cfg_2
85 | true
86 | true
87 |
88 |
89 | .\$(Platform)\$(Config)
90 | .\$(Platform)\$(Config)
91 | false
92 | false
93 | false
94 | false
95 | false
96 | true
97 | true
98 | System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
99 | All
100 | ComPortDrv
101 | true
102 | true
103 |
104 |
105 | None
106 | android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar
107 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png
108 |
109 |
110 | None
111 | android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar
112 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png
113 |
114 |
115 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
116 | Debug
117 | true
118 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
119 | 1033
120 | COM-Port driver serial I/O component
121 | $(Auto)
122 |
123 |
124 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
125 | Debug
126 | true
127 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
128 | 1033
129 | COM-Port driver serial I/O component
130 | $(Auto)
131 |
132 |
133 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
134 | Debug
135 | true
136 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
137 | 1033
138 | true
139 | $(Auto)
140 | COM-Port driver serial I/O component
141 |
142 |
143 | DEBUG;$(DCC_Define)
144 | true
145 | false
146 | true
147 | true
148 | true
149 |
150 |
151 | false
152 | true
153 | 1033
154 | ..\Compiled\$(Platform)\$(Config)
155 |
156 |
157 | true
158 | 1033
159 |
160 |
161 | true
162 | 1033
163 |
164 |
165 | false
166 | RELEASE;$(DCC_Define)
167 | 0
168 | 0
169 |
170 |
171 | true
172 | 1033
173 |
174 |
175 | true
176 | 1033
177 |
178 |
179 | true
180 | 1033
181 |
182 |
183 |
184 | MainSource
185 |
186 |
187 |
188 |
189 | RCDATA
190 | TCommPortDriver16_PNG
191 |
192 |
193 | RCDATA
194 | TCommPortDriver24_PNG
195 |
196 |
197 | RCDATA
198 | TCommPortDriver32_PNG
199 |
200 |
201 | Base
202 |
203 |
204 | Cfg_1
205 | Base
206 |
207 |
208 | Cfg_2
209 | Base
210 |
211 |
212 |
213 | Delphi.Personality.12
214 | Package
215 |
216 |
217 |
218 | ComPortDrv.dpk
219 |
220 |
221 | Microsoft Office 2000 Beispiele für gekapselte Komponenten für Automatisierungsserver
222 | Microsoft Office XP Beispiele für gekapselte Komponenten für Automation Server
223 |
224 |
225 |
226 |
227 |
228 | true
229 |
230 |
231 |
232 |
233 | true
234 |
235 |
236 |
237 |
238 | true
239 |
240 |
241 |
242 |
243 |
244 | 1
245 |
246 |
247 | 0
248 |
249 |
250 |
251 |
252 | res\xml
253 | 1
254 |
255 |
256 | res\xml
257 | 1
258 |
259 |
260 |
261 |
262 | library\lib\armeabi
263 | 1
264 |
265 |
266 | library\lib\armeabi
267 | 1
268 |
269 |
270 |
271 |
272 | library\lib\armeabi-v7a
273 | 1
274 |
275 |
276 |
277 |
278 | library\lib\mips
279 | 1
280 |
281 |
282 | library\lib\mips
283 | 1
284 |
285 |
286 |
287 |
288 | library\lib\armeabi-v7a
289 | 1
290 |
291 |
292 | library\lib\arm64-v8a
293 | 1
294 |
295 |
296 |
297 |
298 | library\lib\armeabi-v7a
299 | 1
300 |
301 |
302 |
303 |
304 | res\drawable
305 | 1
306 |
307 |
308 | res\drawable
309 | 1
310 |
311 |
312 |
313 |
314 | res\drawable-anydpi-v21
315 | 1
316 |
317 |
318 | res\drawable-anydpi-v21
319 | 1
320 |
321 |
322 |
323 |
324 | res\values
325 | 1
326 |
327 |
328 | res\values
329 | 1
330 |
331 |
332 |
333 |
334 | res\values-v21
335 | 1
336 |
337 |
338 | res\values-v21
339 | 1
340 |
341 |
342 |
343 |
344 | res\values-v31
345 | 1
346 |
347 |
348 | res\values-v31
349 | 1
350 |
351 |
352 |
353 |
354 | res\values-v35
355 | 1
356 |
357 |
358 | res\values-v35
359 | 1
360 |
361 |
362 |
363 |
364 | res\drawable-anydpi-v26
365 | 1
366 |
367 |
368 | res\drawable-anydpi-v26
369 | 1
370 |
371 |
372 |
373 |
374 | res\drawable
375 | 1
376 |
377 |
378 | res\drawable
379 | 1
380 |
381 |
382 |
383 |
384 | res\drawable
385 | 1
386 |
387 |
388 | res\drawable
389 | 1
390 |
391 |
392 |
393 |
394 | res\drawable
395 | 1
396 |
397 |
398 | res\drawable
399 | 1
400 |
401 |
402 |
403 |
404 | res\drawable-anydpi-v33
405 | 1
406 |
407 |
408 | res\drawable-anydpi-v33
409 | 1
410 |
411 |
412 |
413 |
414 | res\values
415 | 1
416 |
417 |
418 | res\values
419 | 1
420 |
421 |
422 |
423 |
424 | res\values-night-v21
425 | 1
426 |
427 |
428 | res\values-night-v21
429 | 1
430 |
431 |
432 |
433 |
434 | res\drawable
435 | 1
436 |
437 |
438 | res\drawable
439 | 1
440 |
441 |
442 |
443 |
444 | res\drawable-xxhdpi
445 | 1
446 |
447 |
448 | res\drawable-xxhdpi
449 | 1
450 |
451 |
452 |
453 |
454 | res\drawable-xxxhdpi
455 | 1
456 |
457 |
458 | res\drawable-xxxhdpi
459 | 1
460 |
461 |
462 |
463 |
464 | res\drawable-ldpi
465 | 1
466 |
467 |
468 | res\drawable-ldpi
469 | 1
470 |
471 |
472 |
473 |
474 | res\drawable-mdpi
475 | 1
476 |
477 |
478 | res\drawable-mdpi
479 | 1
480 |
481 |
482 |
483 |
484 | res\drawable-hdpi
485 | 1
486 |
487 |
488 | res\drawable-hdpi
489 | 1
490 |
491 |
492 |
493 |
494 | res\drawable-xhdpi
495 | 1
496 |
497 |
498 | res\drawable-xhdpi
499 | 1
500 |
501 |
502 |
503 |
504 | res\drawable-mdpi
505 | 1
506 |
507 |
508 | res\drawable-mdpi
509 | 1
510 |
511 |
512 |
513 |
514 | res\drawable-hdpi
515 | 1
516 |
517 |
518 | res\drawable-hdpi
519 | 1
520 |
521 |
522 |
523 |
524 | res\drawable-xhdpi
525 | 1
526 |
527 |
528 | res\drawable-xhdpi
529 | 1
530 |
531 |
532 |
533 |
534 | res\drawable-xxhdpi
535 | 1
536 |
537 |
538 | res\drawable-xxhdpi
539 | 1
540 |
541 |
542 |
543 |
544 | res\drawable-xxxhdpi
545 | 1
546 |
547 |
548 | res\drawable-xxxhdpi
549 | 1
550 |
551 |
552 |
553 |
554 | res\drawable-small
555 | 1
556 |
557 |
558 | res\drawable-small
559 | 1
560 |
561 |
562 |
563 |
564 | res\drawable-normal
565 | 1
566 |
567 |
568 | res\drawable-normal
569 | 1
570 |
571 |
572 |
573 |
574 | res\drawable-large
575 | 1
576 |
577 |
578 | res\drawable-large
579 | 1
580 |
581 |
582 |
583 |
584 | res\drawable-xlarge
585 | 1
586 |
587 |
588 | res\drawable-xlarge
589 | 1
590 |
591 |
592 |
593 |
594 | res\values
595 | 1
596 |
597 |
598 | res\values
599 | 1
600 |
601 |
602 |
603 |
604 | res\drawable-anydpi-v24
605 | 1
606 |
607 |
608 | res\drawable-anydpi-v24
609 | 1
610 |
611 |
612 |
613 |
614 | res\drawable
615 | 1
616 |
617 |
618 | res\drawable
619 | 1
620 |
621 |
622 |
623 |
624 | res\drawable-night-anydpi-v21
625 | 1
626 |
627 |
628 | res\drawable-night-anydpi-v21
629 | 1
630 |
631 |
632 |
633 |
634 | res\drawable-anydpi-v31
635 | 1
636 |
637 |
638 | res\drawable-anydpi-v31
639 | 1
640 |
641 |
642 |
643 |
644 | res\drawable-night-anydpi-v31
645 | 1
646 |
647 |
648 | res\drawable-night-anydpi-v31
649 | 1
650 |
651 |
652 |
653 |
654 | 1
655 |
656 |
657 | 1
658 |
659 |
660 | 0
661 |
662 |
663 |
664 |
665 | 1
666 | .framework
667 |
668 |
669 | 1
670 | .framework
671 |
672 |
673 | 1
674 | .framework
675 |
676 |
677 | 0
678 |
679 |
680 |
681 |
682 | 1
683 | .dylib
684 |
685 |
686 | 1
687 | .dylib
688 |
689 |
690 | 1
691 | .dylib
692 |
693 |
694 | 0
695 | .dll;.bpl
696 |
697 |
698 |
699 |
700 | 1
701 | .dylib
702 |
703 |
704 | 1
705 | .dylib
706 |
707 |
708 | 1
709 | .dylib
710 |
711 |
712 | 1
713 | .dylib
714 |
715 |
716 | 1
717 | .dylib
718 |
719 |
720 | 1
721 | .dylib
722 |
723 |
724 | 0
725 | .bpl
726 |
727 |
728 |
729 |
730 | 0
731 |
732 |
733 | 0
734 |
735 |
736 | 0
737 |
738 |
739 | 0
740 |
741 |
742 | 0
743 |
744 |
745 | 0
746 |
747 |
748 | 0
749 |
750 |
751 | 0
752 |
753 |
754 | 0
755 |
756 |
757 |
758 |
759 | 1
760 |
761 |
762 | 1
763 |
764 |
765 |
766 |
767 |
768 |
769 |
770 | Contents\Resources
771 | 1
772 |
773 |
774 | Contents\Resources
775 | 1
776 |
777 |
778 | Contents\Resources
779 | 1
780 |
781 |
782 |
783 |
784 | library\lib\armeabi-v7a
785 | 1
786 |
787 |
788 | library\lib\arm64-v8a
789 | 1
790 |
791 |
792 | 1
793 |
794 |
795 | 1
796 |
797 |
798 | 1
799 |
800 |
801 | 1
802 |
803 |
804 | 1
805 |
806 |
807 | 1
808 |
809 |
810 | 1
811 |
812 |
813 | 0
814 |
815 |
816 |
817 |
818 | library\lib\armeabi-v7a
819 | 1
820 |
821 |
822 |
823 |
824 | 1
825 |
826 |
827 | 1
828 |
829 |
830 | 1
831 |
832 |
833 |
834 |
835 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
836 | 1
837 |
838 |
839 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
840 | 1
841 |
842 |
843 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
844 | 1
845 |
846 |
847 |
848 |
849 |
850 |
851 |
852 | 1
853 |
854 |
855 | 1
856 |
857 |
858 | 1
859 |
860 |
861 |
862 |
863 | Assets
864 | 1
865 |
866 |
867 | Assets
868 | 1
869 |
870 |
871 |
872 |
873 | Assets
874 | 1
875 |
876 |
877 | Assets
878 | 1
879 |
880 |
881 |
882 |
883 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
884 | 1
885 |
886 |
887 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
888 | 1
889 |
890 |
891 |
892 |
893 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
894 | 1
895 |
896 |
897 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
898 | 1
899 |
900 |
901 |
902 |
903 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
904 | 1
905 |
906 |
907 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
908 | 1
909 |
910 |
911 |
912 |
913 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
914 | 1
915 |
916 |
917 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
918 | 1
919 |
920 |
921 |
922 |
923 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
924 | 1
925 |
926 |
927 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
928 | 1
929 |
930 |
931 |
932 |
933 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
934 | 1
935 |
936 |
937 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
938 | 1
939 |
940 |
941 |
942 |
943 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
944 | 1
945 |
946 |
947 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
948 | 1
949 |
950 |
951 |
952 |
953 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
954 | 1
955 |
956 |
957 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
958 | 1
959 |
960 |
961 |
962 |
963 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
964 | 1
965 |
966 |
967 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
968 | 1
969 |
970 |
971 |
972 |
973 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
974 | 1
975 |
976 |
977 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
978 | 1
979 |
980 |
981 |
982 |
983 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
984 | 1
985 |
986 |
987 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
988 | 1
989 |
990 |
991 |
992 |
993 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
994 | 1
995 |
996 |
997 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
998 | 1
999 |
1000 |
1001 |
1002 |
1003 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1004 | 1
1005 |
1006 |
1007 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1008 | 1
1009 |
1010 |
1011 |
1012 |
1013 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1014 | 1
1015 |
1016 |
1017 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
1018 | 1
1019 |
1020 |
1021 |
1022 |
1023 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1024 | 1
1025 |
1026 |
1027 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1028 | 1
1029 |
1030 |
1031 |
1032 |
1033 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1034 | 1
1035 |
1036 |
1037 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1038 | 1
1039 |
1040 |
1041 |
1042 |
1043 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1044 | 1
1045 |
1046 |
1047 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1048 | 1
1049 |
1050 |
1051 |
1052 |
1053 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1054 | 1
1055 |
1056 |
1057 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1058 | 1
1059 |
1060 |
1061 |
1062 |
1063 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1064 | 1
1065 |
1066 |
1067 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1068 | 1
1069 |
1070 |
1071 |
1072 |
1073 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1074 | 1
1075 |
1076 |
1077 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
1078 | 1
1079 |
1080 |
1081 |
1082 |
1083 |
1084 |
1085 |
1086 |
1087 |
1088 |
1089 |
1090 |
1091 |
1092 |
1093 |
1094 |
1095 |
1096 | False
1097 | False
1098 | False
1099 | True
1100 | True
1101 | True
1102 |
1103 |
1104 | 12
1105 |
1106 |
1107 |
1108 |
1109 |
1110 |
--------------------------------------------------------------------------------
/Packages/ComPortDrv.dres:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MHumm/ComPortDriver/bf448a548bc08812b39f7e5ebd31cea6f077b3de/Packages/ComPortDrv.dres
--------------------------------------------------------------------------------
/Packages/ComPortDrv.identcache:
--------------------------------------------------------------------------------
1 | .D:\Projekte\ComPortDrvUnicode\Source\CPDrv.pas 4D:\Projekte\ComPortDrvUnicode\Source\SerialPorts.pas
--------------------------------------------------------------------------------
/Packages/ComPortDrv.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MHumm/ComPortDriver/bf448a548bc08812b39f7e5ebd31cea6f077b3de/Packages/ComPortDrv.res
--------------------------------------------------------------------------------
/Packages/ComPortDrvD.dpk:
--------------------------------------------------------------------------------
1 | package ComPortDrvD;
2 |
3 | {$R *.res}
4 | {$R *.dres}
5 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
6 | {$ALIGN 8}
7 | {$ASSERTIONS ON}
8 | {$BOOLEVAL OFF}
9 | {$DEBUGINFO OFF}
10 | {$EXTENDEDSYNTAX ON}
11 | {$IMPORTEDDATA ON}
12 | {$IOCHECKS ON}
13 | {$LOCALSYMBOLS ON}
14 | {$LONGSTRINGS ON}
15 | {$OPENSTRINGS ON}
16 | {$OPTIMIZATION OFF}
17 | {$OVERFLOWCHECKS OFF}
18 | {$RANGECHECKS OFF}
19 | {$REFERENCEINFO ON}
20 | {$SAFEDIVIDE OFF}
21 | {$STACKFRAMES ON}
22 | {$TYPEDADDRESS OFF}
23 | {$VARSTRINGCHECKS ON}
24 | {$WRITEABLECONST OFF}
25 | {$MINENUMSIZE 1}
26 | {$IMAGEBASE $400000}
27 | {$DEFINE DEBUG}
28 | {$ENDIF IMPLICITBUILDING}
29 | {$DESCRIPTION 'COM-Port driver serial I/O component'}
30 | {$LIBSUFFIX AUTO}
31 | {$DESIGNONLY}
32 | {$IMPLICITBUILD OFF}
33 |
34 | requires
35 | rtl,
36 | ComPortDrv;
37 |
38 | contains
39 | CPDReg in '..\Design\CPDReg.pas';
40 |
41 | end.
42 |
--------------------------------------------------------------------------------
/Packages/ComPortDrvD.dres:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MHumm/ComPortDriver/bf448a548bc08812b39f7e5ebd31cea6f077b3de/Packages/ComPortDrvD.dres
--------------------------------------------------------------------------------
/Packages/ComPortDrvD.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MHumm/ComPortDriver/bf448a548bc08812b39f7e5ebd31cea6f077b3de/Packages/ComPortDrvD.res
--------------------------------------------------------------------------------
/Packages/ComPortDrvDResource.rc:
--------------------------------------------------------------------------------
1 | TCommPortDriver16_PNG RCDATA "..\\Images\\TCommPortDriver16.png"
2 | TCommPortDriver_PNG RCDATA "..\\Images\\TCommPortDriver24.png"
3 | TCommPortDriver32_PNG RCDATA "..\\Images\\TCommPortDriver32.png"
4 | TCommPortDriver48_PNG RCDATA "..\\Images\\TCommPortDriver48.png"
5 | TCommPortDriver64_PNG RCDATA "..\\Images\\TCommPortDriver64.png"
6 |
--------------------------------------------------------------------------------
/Packages/ComPortDrvResource.rc:
--------------------------------------------------------------------------------
1 | TCommPortDriver16_PNG RCDATA "..\\Images\\TCommPortDriver16.png"
2 | TCommPortDriver24_PNG RCDATA "..\\Images\\TCommPortDriver24.png"
3 | TCommPortDriver32_PNG RCDATA "..\\Images\\TCommPortDriver32.png"
4 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ComPortDriver
2 | Win32/64 VCL and Firemonkey COM-Port component for Delphi
3 |
4 | This is a Unicode and further improved version of the CpDrv non-visible component for communicating via
5 | RS232 COM-Ports on Windows. The code is published under the Apache 2.0 license with the consent of its
6 | original author. Due to the use of $(AUTO) for the libsuffix it is compatible from D10.4.1 onwards only.
7 | If you remove this setting in the package project option of both packages it should work with older
8 | versions as well. The code found in SerialPorts.pas is not working yet.
9 |
10 | Changes in this V3.1.x release compared with 2.1:
11 |
12 | * fix non packet mode for higher baudrates: the old version didn't check if the buffer the received data
13 | shall be written into is large enough. The new version calls the received event in a loop until all data
14 | has been received and signalled to avoid memory corruption
15 | * the maximum buffer size has been increased from 8192 (8 kb) to 65536 byte (64 kb)
16 | * SetCommBreak and ClearCommBreak functions for sending a break signal have been added
17 | * EnumComPorts to get a list of available COM-ports has been added. This is a list of port names only,
18 | without the description or friendly name.
19 | * Properties for getting the minimum and maximum transmit and receive buffer sizes have been added
20 | * The source code is XMLDOC commented now
21 | * changed license to Apache 2.0
22 | * fixed demo application (there was a Problem with the About Dialog preventing compilation)
23 |
24 | Installation:
25 | Open BuildPackages from the package subdirectory. Compile the runtime package (the first one)
26 | and then right click on the design time package and call the "Install" menu item in the popup menu.
27 | Alternatively install via Tools/GetIt package manager
28 |
--------------------------------------------------------------------------------
/Source/SerialPorts.pas:
--------------------------------------------------------------------------------
1 | {*****************************************************************************
2 | The CPDrv team (see file NOTICE.txt) licenses this file
3 | to you under the Apache License, Version 2.0 (the
4 | "License"); you may not use this file except in compliance
5 | with the License. A copy of this licence is found in the root directory of
6 | this project in the file LICENCE.txt or alternatively at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing,
11 | software distributed under the License is distributed on an
12 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
13 | KIND, either express or implied. See the License for the
14 | specific language governing permissions and limitations
15 | under the License.
16 | *****************************************************************************}
17 |
18 | // Original author: "Jackson" from German delphipraxis.net
19 | unit SerialPorts;
20 |
21 | interface
22 |
23 | uses
24 | Generics.Collections;
25 |
26 | type
27 | TSerialPort = record
28 | PortNr : Word;
29 | Linked : Boolean;
30 | PortName,
31 | Description,
32 | FriendlyName,
33 | Decive,
34 | KeyDevice,
35 | KeyEnum : String;
36 | end;
37 |
38 | ///
39 | /// List of serial ports found
40 | ///
41 | TSerialPortList = TList;
42 |
43 | SerialPort_Ar = Array of TSerialPort;
44 |
45 | ///
46 | /// Create a list of all serial ports found in the system
47 | ///
48 | function GetComPorts:TSerialPortList;
49 |
50 | implementation
51 |
52 | uses
53 | WinAPI.Windows, System.SysUtils, System.Classes, System.Win.Registry;
54 |
55 | const Key_Devices = '\SYSTEM\CurrentControlSet\Control\DeviceClasses\{86e0d1e0-8089-11d0-9ce4-08003e301f73}\';
56 | Key_Enum = '\SYSTEM\CurrentControlSet\Enum\';
57 |
58 | //procedure SortComPorts(VAR Daten:SerialPort_Ar);
59 | //var Sort_Max,
60 | // Sort_From,
61 | // Sort_To,
62 | // Sort_Size : LongInt;
63 | // TempData : SerialPort_Rec;
64 | //begin
65 | // if Daten = NIL then
66 | // Exit;
67 | //
68 | // Sort_Max := High(Daten);
69 | // Sort_Size := Sort_Max shr 1; { div 2 }
70 | // while Sort_Size > 0 do
71 | // begin
72 | // for Sort_From := 0 to Sort_Max - Sort_Size do
73 | // begin
74 | // Sort_To := Sort_From;
75 | // while (Sort_To >= 0) AND (Daten[Sort_To].PortNr > Daten[Sort_To + Sort_Size].PortNr) do
76 | // begin // Tauschen
77 | // TempData := Daten[Sort_To];
78 | // Daten[Sort_To] := Daten[Sort_To + Sort_Size];
79 | // Daten[Sort_To + Sort_Size] := TempData;
80 | // Dec(Sort_To,Sort_Size);
81 | // end;
82 | // end;
83 | // Sort_Size := Sort_Size shr 1; { div 2 }
84 | // end;
85 | //end;
86 |
87 | function GetComPorts:TSerialPortList;
88 | var
89 | Reg : TRegistry;
90 | Keys : TStrings;
91 | Count,
92 | Linked : Integer;
93 | Key1,
94 | Key2,
95 | Device,
96 | Description,
97 | FriendlyName,
98 | PortName : string;
99 | SerialPort : TSerialPort;
100 | begin
101 | Result := TSerialPortList.Create;
102 | Reg := TRegistry.Create;
103 | Keys := TStringList.Create;
104 | try
105 | Reg.RootKey := HKEY_LOCAL_MACHINE;
106 | if Reg.OpenKeyReadOnly(Key_Devices) then
107 | begin
108 | Reg.GetKeyNames(Keys);
109 | if Keys.Count > 0 then
110 | begin
111 | for Count := 0 to Keys.Count-1 do
112 | begin
113 | Key1 := Key_Devices+Keys[Count] + '\';
114 | if Reg.OpenKeyReadOnly(Key1) then
115 | begin
116 | Device := Reg.ReadString('DeviceInstance');
117 | Key2 := Key_Enum + Device + '\';
118 | if Reg.OpenKeyReadOnly(Key1 + '#\Control\') then
119 | begin
120 | Linked := Reg.ReadInteger('Linked');
121 | if Reg.OpenKeyReadOnly(Key2) then
122 | begin
123 | if (Reg.ReadString('Class') = 'Ports') AND Reg.KeyExists('Device Parameters') then
124 | begin
125 | FriendlyName := Reg.ReadString('FriendlyName');
126 | Description := Reg.ReadString('DeviceDesc');
127 | if Reg.OpenKeyReadOnly(Key2+'\Device Parameters\') AND Reg.ValueExists('PortName') then
128 | begin
129 | PortName := Reg.ReadString('PortName');
130 | if Pos('COM',PortName) = 1 then
131 | begin
132 |
133 | Delete(Description,1,Pos(';',Description));
134 | SerialPort.PortNr := StrToIntDef(Copy(PortName,4),0);
135 | SerialPort.Linked := Linked > 0;
136 | SerialPort.PortName := PortName;
137 | SerialPort.Description := Description;
138 | SerialPort.FriendlyName := FriendlyName;
139 | SerialPort.Decive := Device;
140 | SerialPort.KeyDevice := Key1;
141 | SerialPort.KeyEnum := Key2;
142 | Result.Add(SerialPort);
143 | end;
144 | end;
145 | end;
146 | end;
147 | end;
148 | end;
149 | end;
150 | end;
151 | end;
152 | finally
153 | Keys.Free;
154 | Reg.CloseKey;
155 | Reg.Free;
156 | // SortComPorts(Result);
157 | end;
158 | end;
159 |
160 | end.
--------------------------------------------------------------------------------