{ Copyright (C) 2026 - Uladzimir Karpenka, EW8BAK This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. } program winprobe; { Прогон WINDOWS-ветки SerialPort.pas на Linux. ★Компиляции мало. Соседняя проверка (-Cn) ловит синтаксис и разрешение имён, но не поведение, а под Windows у обёртки своя логика: перевод нулевого хендла RTL в SER_INVALID_HANDLE и свой ответ SerValid (ядро Windows нулевой хендл не выдаёт никогда, значит ноль там негоден — в отличие от Unix, где это законный дескриптор при закрытом стандартном вводе). Всё это чистая логика поверх заглушки модуля Serial, поэтому её можно и нужно прогнать здесь. } {$MODE Delphi} uses SysUtils, SerialPort; var Passed, Failed: Integer; procedure Check(const Name: string; Cond: Boolean; const Extra: string = ''); begin if Cond then begin Inc(Passed); WriteLn(' ok ', Name); end else begin Inc(Failed); if Extra <> '' then WriteLn(' FAIL ', Name, ' ', Extra) else WriteLn(' FAIL ', Name); end; end; begin Passed := 0; Failed := 0; WriteLn(' -- прогон WINDOWS-ветки SerialPort на заглушке'); // Заглушка Serial.SerOpen всегда отдаёт ноль — то есть «не открылось» по // соглашению RTL под Windows. Обёртка обязана перевести это в свой признак. Check('★отказ RTL (ноль) переводится в SER_INVALID_HANDLE', SerOpen('COM1') = SER_INVALID_HANDLE, IntToStr(SerOpen('COM1'))); Check('★нулевой хендл под Windows негоден', not SerValid(0)); Check('SER_INVALID_HANDLE негоден', not SerValid(SER_INVALID_HANDLE)); Check('обычный хендл годен', SerValid(5)); Check('COM1 остаётся коротким', SerWinDeviceName('COM1') = 'COM1'); Check('COM10 получает префикс', SerWinDeviceName('COM10') = '\\.\COM10'); WriteLn(Format(' -- ветка windows: %d проверок, провалено %d', [Passed + Failed, Failed])); if Failed > 0 then Halt(1); end.