├── .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.pas4D:\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. --------------------------------------------------------------------------------