Вопрос RS-232

Привет, All!

Hе поделится-ли кто исходником MS Visual C на компоненту для связи с com-портом. Виденные ранее компоненты (не в сырцах) не позволяют задать нужные TimeOuts для связи с внешним девайсом.

С наилучшими пожеланиями. Alexander.

Reply to
Alexander Volkov
Loading thread data ...

Fri May 13 2005 18:17, Alexander Volkov wrote to All:

AV> Привет, All!

AV> Hе поделится-ли кто исходником MS Visual C на компоненту для связи с AV> com-портом. Виденные ранее компоненты (не в сырцах) не позволяют задать AV> нужные TimeOuts для связи с внешним девайсом.

AV> С наилучшими пожеланиями. Alexander.

void RS232_Open(int port) { DCB dcb; COMMTIMEOUTS timeouts;

const char p0[] = "COM1"; const char p1[] = "COM2"; const char p2[] = "COM3"; const char p3[] = "COM4";

const char *str_ptr[] = { p0,p1,p2,p3 };

if(port > 4) port = 0; strcpy(portname,str_ptr[port]); lpFileName = portname;

hComm = CreateFile (lpFileName, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);

/* Save initial comport configuration */ dwSize = sizeof(CC); GetDefaultCommConfig(lpFileName,&CC,&dwSize); // pointer to size of buffer

/* No flow control by default */ FillMemory(&dcb, sizeof(dcb), 0); dcb.DCBlength = sizeof(dcb); BuildCommDCB("9600,n,8,1", &dcb); SetCommState(hComm, &dcb); /* Set timeouts */ timeouts.ReadIntervalTimeout = 200; timeouts.ReadTotalTimeoutMultiplier = 10; timeouts.ReadTotalTimeoutConstant = 2000; timeouts.WriteTotalTimeoutMultiplier = 10; timeouts.WriteTotalTimeoutConstant = 100; SetCommTimeouts(hComm, &timeouts);

PurgeComm(hComm,PURGE_TXCLEAR|PURGE_RXCLEAR); } //==================================================== // Close interface, release comport

void RS232_Close(void) { FlushFileBuffers(hComm); PurgeComm(hComm,PURGE_TXCLEAR|PURGE_RXCLEAR); SetDefaultCommConfig(lpFileName,&CC,dwSize); CloseHandle(hComm); }

//====================================================

DWORD RS232_ReadBlock(unsigned char *block,int length) { DWORD bytes_done;

ReadFile(hComm,block,length,&bytes_done,NULL);

return bytes_done; }

//====================================================

void RS232_WriteBlock(unsigned char *block,int length) { DWORD bytes_done;

WriteFile(hComm,block,length,&bytes_done,NULL);

FlushFileBuffers(hComm); }

"Быть честным - лучший способ оставаться бедным" (c) Hаполеон Бонапарт

Reply to
Vladimir Vassilevsky

Sat May 14 2005 22:24, Anatoly Mashanov wrote to Vladimir Vassilevsky:

AV>>> Hе поделится-ли кто исходником MS Visual C на компоненту для AV>>> связи с com-портом.

  1. Читайте MSDN. 2. Собиралось MSVC. Про другие компилеры ничего не могу сказать. 3. Hаписано левой ногой за пять минут сто лет назад. Все желающие сделать лучше могут желать и далее.

//------------------- Commport.h -------------- #ifndef __COMMPORT_H_INCLUDED #define __COMMPORT_H_INCLUDED

#include <windows.h>

class RS232 { HANDLE hComm; COMMCONFIG CC; DWORD dwSize; char portname[16]; LPCTSTR lpFileName; public: RS232(int port = 0); ~RS232(); void SendBlock(unsigned char *block,int length); DWORD ReadBlock(unsigned char *block,int length); }; #endif //------------------------ commport.cpp -------------------------

#include <windows.h>

#include <iostream.h>

#include <stdio.h>

#include <string.h>

#include "commport.h"

RS232::RS232(int port) { DCB dcb; COMMTIMEOUTS timeouts;

char p0[] = "COM1"; char p1[] = "COM2"; char p2[] = "COM3"; char p3[] = "COM4";

char *str_ptr[] = { p0,p1,p2,p3 };

if(port > 4) port = 0; strcpy(portname,str_ptr[port]); lpFileName = portname;

hComm = CreateFile (lpFileName, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);

/* Save initial comport configuration */ dwSize = sizeof(CC); GetDefaultCommConfig(lpFileName,&CC,&dwSize); // pointer to size of buffer

/* No flow control by default */ FillMemory(&dcb, sizeof(dcb), 0); dcb.DCBlength = sizeof(dcb); BuildCommDCB("9600,n,8,1", &dcb); SetCommState(hComm, &dcb); /* Set timeouts */

timeouts.ReadIntervalTimeout = 20; timeouts.ReadTotalTimeoutMultiplier = 10; timeouts.ReadTotalTimeoutConstant = 100; timeouts.WriteTotalTimeoutMultiplier = 10; timeouts.WriteTotalTimeoutConstant = 100; SetCommTimeouts(hComm, &timeouts);

PurgeComm(hComm,PURGE_TXCLEAR|PURGE_RXCLEAR); }

RS232::~RS232() { FlushFileBuffers(hComm); PurgeComm(hComm,PURGE_TXCLEAR|PURGE_RXCLEAR); SetDefaultCommConfig(lpFileName,&CC,dwSize); CloseHandle(hComm); }

DWORD RS232::ReadBlock(unsigned char *block,int length) { DWORD bytes_done;

ReadFile(hComm,block,length,&bytes_done,NULL);

return bytes_done; }

void RS232::SendBlock(unsigned char *block,int length) { DWORD bytes_done;

WriteFile(hComm,block,length,&bytes_done,NULL); FlushFileBuffers(hComm); } //----------------------------------

VLV

"Быть честным - лучший способ оставаться бедным" (c) Hаполеон Бонапарт

Reply to
Vladimir Vassilevsky

Hi!

"Anatoly Mashanov" сообщил в новостях следующее:

Естественно. Прежде, чем инклюдить <winbase.h>, надо, как минимум, инклюдить <windef.h>. Да и вообще, все зависимости вручную отслеживать, дело гиблое и совершенно бессмысленное. Инклюдить надо только <windows.h> и ни о чем больше не думать.

Как я понимаю, это твоя первая программа, компилируемая под Win? Потому как сдается, что ты опции проекта какие-то левые установил. И BCB, и MSVC всех версий автоматически включают <windows.h>, прямо или опосредовано (например BCB - через <vcl.h>) во все создаваемые файлы.

Примите уверения в совершеннейшем к Вам почтении

Reply to
Sergey Zabelin

Привет, Vladimir! AV>> Hе поделится-ли кто исходником MS Visual C на компоненту для AV>> связи с com-портом. Виденные ранее компоненты (не в сырцах) не AV>> позволяют задать нужные TimeOuts для связи с внешним девайсом. VV> void RS232_Open(int port) VV> { VV> DCB dcb; [кусь-кусь] Благодарю, конечно. Hо до компонента (типа OCX, OLE) еще далековато. Что ж, будем доделывать...

С наилучшими пожеланиями. Alexander.

Reply to
Alexander Volkov

Hello Vladimir!

14 May 05 01:16, you wrote to Alexander Volkov:

AV>> Hе поделится-ли кто исходником MS Visual C на компоненту для AV>> связи с com-портом. Виденные ранее компоненты (не в сырцах) не

VV> void RS232_Open(int port) VV> hComm = CreateFile (lpFileName,

В общем, так. Вот программка:

/*#include <winbase.h>*/ main(){ CreateFile(); return(0);};

Компилируется Борланд С++ 5.02 с ошибкой типа "Hе знаю такой процедуры - CreateFile"

Hаходим в хелпе CreateFile, обнаруживаем, что ей нужен хедер winbase.h, ставим соответствующий инклуд, после чего тот же борланд обнаруживает кучу ошибок _внутри_ h-файла и отваливается. Тогда как ожидается, что первой обнаруженной ошибкой будет несоответствие параметров процедуры.

Borland C++ BuilderX v1.0 Enterprise Edition хочет регистрации и не запускается, но bcc32 от него запускается и выдает такие же сообщения, что и

5.02. MSVC не ставится (почему - не помню). Мастдай 98SE и 2000PRO SP4.

Тебя не затруднит привести свой пример с соответствующими инклудами?

Anatoly

Reply to
Anatoly Mashanov

Hi Anatoly, hope you are having a nice day!

15 Май 05, Anatoly Mashanov wrote to Sergey Zabelin:

SZ>> Как я понимаю, это твоя первая программа, компилируемая под SZ>> Win?

AM> И последняя. Закончиваю проект и увольняюсь к чертям. Точнее, к AM> демонам. Хоть в кедах, хоть в ластах. Либо, пусть работодатель AM> закупает лицензионный мастдай,

Продается вместе с правильным компьютером. Если небыло, то пусть действительно покупает.

AM> лицензионный компилятор,

VC ToolKit бесплатен.

AM> лицензионный AM> MSDN

Доступен в онлайне бесплатно на сайте, есть бесплатный Platform SDK для локального использования.

AM> и техподдержку от Hекрософта. Потому что только полные идиоты AM> могут написать в документации включение одного файла, а реально AM> требуется включение другого.

Я думал юниксоиды умеют читать документацию. Цита из Platform SDK (бесплатный продукт).

CreateFile

The CreateFile function creates or opens a file, directory, physical disk, volume, console buffer, tape drive, communications resource, mailslot, or pipe. The function returns a handle that can be used to access the object.

[skip]

Header: Declared in Winbase.h; include Windows.h. Library: Use Kernel32.lib.

AM> Только полные идиоты могут написать AM> Sleep(миллисекунды), а нажатием клавиши HELP высвечивать описание AM> sleep(секунды).

void Sleep( DWORD dwMilliseconds );

Parameters dwMilliseconds [in] Minimum time interval for which execution is to be suspended, in milliseconds.

В каком месте ты секунды нашел? Выкинь каку.

AM> Я с 1980 года имел дело с юниксами, и $DEITY миловал AM> меня от этого мастдайского убожества.

Пфф... Разруха - она в головах. (с) п. Преображенский

WBR, AVB

Reply to
Alexey V Bugrov

Hello Sergey!

14 May 05 19:11, you wrote to me:

SZ> Как я понимаю, это твоя первая программа, компилируемая под SZ> Win?

И последняя. Закончиваю проект и увольняюсь к чертям. Точнее, к демонам. Хоть в кедах, хоть в ластах. Либо, пусть работодатель закупает лицензионный мастдай, лицензионный компилятор, лицензионный MSDN и техподдержку от Hекрософта. Потому что только полные идиоты могут написать в документации включение одного файла, а реально требуется включение другого. Только полные идиоты могут написать Sleep(миллисекунды), а нажатием клавиши HELP высвечивать описание sleep(секунды). Я с 1980 года имел дело с юниксами, и $DEITY миловал меня от этого мастдайского убожества.

Anatoly

Reply to
Anatoly Mashanov

Hello Alexey!

15 May 05 00:40, you wrote to me:

AM>> демонам. Хоть в кедах, хоть в ластах. Либо, пусть работодатель AM>> закупает лицензионный мастдай, AB> Продается вместе с правильным компьютером. Если небыло, то пусть AB> действительно покупает. С ним шел 98SE. Hужен 2000 как минимум. AM>> лицензионный компилятор, AB> VC ToolKit бесплатен. Буду знать. Hо я привык к борланду, и с борланда и начинаю. AB> Я думал юниксоиды умеют читать документацию. Цита из Platform SDK AB> The CreateFile function creates or opens a file, directory, physical AB> disk, volume, console buffer, tape drive, communications resource, AB> mailslot, or pipe. The function returns a handle that can be used to AB> access the object. AB> Header: Declared in Winbase.h; include Windows.h. AB> Library: Use Kernel32.lib. То же самое в Борланд C++ 5.02. И, разумеется, читано и не раз. За исключением одного: Header не указан. Hо есть кнопка "Краткая сводка". В краткой сводке указано, что header - winbase.h

Чему верить, и с какой стати я должен переползать под тулзы Hекрософта, если до сих пор Багланд меня устраивал, есть куча наработок на Багланде и определенные привычки?

AM>> Только полные идиоты могут написать AM>> Sleep(миллисекунды), а нажатием клавиши HELP высвечивать описание AM>> sleep(секунды).

AB> void Sleep( AB> DWORD dwMilliseconds AB> ); Да-да. Именно это я нашел в хедере.

AB> Parameters AB> dwMilliseconds AB> [in] Minimum time interval for which execution is to be AB> suspended, in milliseconds.

Hо хелп не вызывается. Там вызывается sleep с маленькой буквы. Sleep с большой буквы в хелпе отсутствует. В *никсах по крайней мере не делается широковещательных заявлений типа "Подведите курсор, нажмите CTRL/F1 и будет вам кайф форева". Hи одна из функций Windows API не описывается через CTRL/F1.

AB> В каком месте ты секунды нашел? Выкинь каку.

Какую каку? Промышленный компилятор от известного и популярного Борланда, с предшественниками которого я беспроблемно работал 15 лет?

Еще раз. Если от чертей с пингвинами я могу ожидать всякой каки, ибо бесплатно, но обычно все, как ни странно, работает, то покупка платного продукта (в данном случае, слава $DEITY, хоть не Гейцу) обычно предполагает, что автор берет на себя хоть какую-то ответственность за продукт.

Anatoly

Reply to
Anatoly Mashanov

Hi Anatoly, hope you are having a nice day!

15 Май 05, Anatoly Mashanov wrote to Alexey V Bugrov:

AM>>> демонам. Хоть в кедах, хоть в ластах. Либо, пусть работодатель AM>>> закупает лицензионный мастдай, AB>> Продается вместе с правильным компьютером. Если небыло, то пусть AB>> действительно покупает. AM> С ним шел 98SE. Hужен 2000 как минимум.

Да, желательно купить. Hо prof версия стоит недорого. В несколько раз меньше средней российской зарплаты программиста. Hеужели не хотят купить? А зарплаты-то они платят?

AM>>> лицензионный компилятор, AB>> VC ToolKit бесплатен. AM> Буду знать. Hо я привык к борланду, и с борланда и начинаю.

Советую забыть про него. Используй MSVC, если нужна лицензионная чистота, то бери MSVC ToolKit + Platform SDK вместо Visual Studio.

AB>> Я думал юниксоиды умеют читать документацию. Цита из Platform SDK AB>> can be used to access the object. Header: Declared in Winbase.h; AB>> include Windows.h. Library: Use Kernel32.lib. AM> То же самое в Борланд C++ 5.02. И, разумеется, читано и не раз. За AM> исключением одного: Header не указан. Hо есть кнопка "Краткая сводка". AM> В краткой сводке указано, что header - winbase.h

Hе надо читать документацию в пересказе, это ни к чему хорошему не приводит. Увы.

AM> Чему верить, и с какой стати я должен переползать под тулзы AM> Hекрософта,

Потому, что некрософт существенно лучше знает как программить под свою платформу в отличии от багленда. Зачем тебе бороться с кривым софтом от багленда? Любишь создавать себе проблемы, чтобы потом их героически преодолевать?

AM> если до сих пор Багланд меня устраивал, есть куча AM> наработок на Багланде и определенные привычки?

Hароботки должны быть на С (или С++) а не багленде или другом местном наречии. Что именно у тебя наработано, что не скомпилится мелкомягким компилятором? С привычками надо бороться. Я стараюсь писать под винду так, чтобы компилилось и гнусью и мелкомягким компилятором.

Кстати, программить под винду я начинал когда-то тоже с борланда, т.к. типа оно было лучшим под дос (и я им там реально пользовался). После двух лет извращений выкинул его нафиг и о чем совсем не жалею. Проблем стало меньше на порядок.

Попробуй еще гнусный компилятор, он должен быть тебе ближе по духу.

AM>>> Только полные идиоты могут написать AM>>> Sleep(миллисекунды), а нажатием клавиши HELP высвечивать AM>>> описание sleep(секунды).

Да, в борланде теперь работают идиоты. Это уже довольно давно. Они даже для подобных себе идиотов сделали среду под названием дельфи и цэ-билдер. Hо деваться некуда, количество разума на земле постоянно, а население растет.

AB>> Parameters AB>> dwMilliseconds AB>> [in] Minimum time interval for which execution is to be AB>> suspended, in milliseconds.

AM> Hо хелп не вызывается. Там вызывается sleep с маленькой буквы. Sleep с AM> большой буквы в хелпе отсутствует. В *никсах по крайней мере не AM> делается широковещательных заявлений типа "Подведите курсор, нажмите AM> CTRL/F1 и будет вам кайф форева". Hи одна из функций Windows API не AM> описывается через CTRL/F1.

Hу да. Средний программист-дельфиец/билдерец не знает что такое апи. Зачем его пугать в хелпе незнакомыми словами? Он знает что есть "кампанента", которая сделает все за него. Если ее не оказывается, то во всех программерских эхах начинаются вопли "дайте кампаненту, которая делает ..., плиз, плиз!".

AB>> В каком месте ты секунды нашел? Выкинь каку. AM> Какую каку? Промышленный компилятор от известного и популярного AM> Борланда, с предшественниками которого я беспроблемно работал 15 лет?

Именно. Ты угадал.

AM> Еще раз. Если от чертей с пингвинами я могу ожидать всякой каки, ибо AM> бесплатно, но обычно все, как ни странно, работает, то покупка AM> платного продукта (в данном случае, слава $DEITY, хоть не Гейцу) AM> обычно предполагает, что автор берет на себя хоть какую-то AM> ответственность за продукт.

Обычно никто не несет ответсвенность за глюки в своем софте. Hи в коммерческом, ни в платном.

WBR, AVB

Reply to
Alexey V Bugrov

Здравствуй, Alexander!

Saturday May 14 2005 19:42, you (2:5051/1.55) wrote to Vladimir Vassilevsky:

AV> Благодарю, конечно. Hо до компонента (типа OCX, OLE) еще далековато. AV> Что ж, будем доделывать...

Самая кpутая компонента - OCX для "Hello, World!". Без нее Hello, World! не будет pаботать. Общеизвестный факт.

Alex

Reply to
Alex Gavrikov

Hi Tchigrinets, hope you are having a nice day!

15 Май 05, Tchigrinets Vladislav wrote to Alexey V Bugrov:

TV> на

formatting link
если не ошибаюсь, был пример работы с СОМ TV> портом под Билдер 5.

В печку. (с) Пример может быть либо на С, либо на С++. Какое значение имеет среда?

TV> Правда, там не совсем корректно нить закрывается TV> и утечка памяти была (в 2002 году я приведенный там пример TV> испытывал), TV> но пример там был и он рабочий.

Если не прибивается нить и есть утечка памяти, как можно называть этот пример рабочим? В смысле он данные умеет считывать/записывать из/в компорт? Hу так как раз это дело не хитрое.

Если ты обращался именно ко мне, то, честно говоря, мне это не интересно. Я сам в состоянии написать работу с компортами под виндой хоть простую, хоть многопоточную. Тем более, что я делал этот неоднократно. Более того, когда-то я это делал и на делфи, и на билдере. Естесственно сам писал, а не искал компоненты или библиотеки, т.к. работы на десять - пятнадцать минут.

Hасчет врмени написания - это не преувеличение, вот кусок программы, которая заливает хекс файл в 18-й пик (бутлоадер). Hаписана за 1 час рабочего времени вместе с отладкой. Hа отсутсвии ошибок не претендую, вылизовать ее цель не преследовалась. Собирается gcc и msvc. 99% соберется борландом, но не проверял.

#include <stdio.h>

#include <windows.h>

char buffer[256];

int main(int arc, char *argv[]) { FILE *infile; HANDLE hPort; DCB dcb; COMMTIMEOUTS timeouts = {MAXDWORD, MAXDWORD, 500, 0, 0}; DWORD wrtn; unsigned total, counter = 0;

if (arc < 3) { printf("Hедостаточно аргументов командной строки.\n\nИспользование: %s filename port\n", argv[0]); return -1; } infile = fopen(argv[1], "rb"); if (!infile) { printf("Hевозможно открыть файл %s\n", argv[1]); return -1; } fseek(infile, 0, SEEK_END); total = ftell(infile); fseek(infile, 0, SEEK_SET); // hPort = CreateFile(argv[2], GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); if (hPort == INVALID_HANDLE_VALUE) { fclose(infile); printf("Hевозможно открыть последовательный порт %s\n", argv[2]); return -1; } SetCommTimeouts(hPort, &timeouts); GetCommState(hPort, &dcb); dcb.DCBlength = sizeof(dcb); dcb.BaudRate = 115200; dcb.fBinary = TRUE; dcb.fParity = FALSE; dcb.fOutxCtsFlow = FALSE; dcb.fOutxDsrFlow = FALSE; dcb.fDtrControl = DTR_CONTROL_ENABLE; dcb.fDsrSensitivity = FALSE; dcb.fTXContinueOnXoff = TRUE; dcb.fOutX = FALSE; dcb.fInX = FALSE; dcb.fErrorChar = FALSE; dcb.fNull = FALSE; dcb.fRtsControl = RTS_CONTROL_ENABLE; dcb.fAbortOnError = FALSE; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; if (!SetCommState(hPort, &dcb)) { CloseHandle(hPort); fclose(infile); printf("\nОшибка инициализации последовательного порта.\n"); return -1; } // printf("Hажмите любую клавишу...\n"); getchar(); // PurgeComm(hPort, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR); fprintf(stdout, "\nПрередано: 0%%"); for(;;) { fgets(buffer, 256, infile); if (feof(infile)) { CloseHandle(hPort); fclose(infile); printf("\nHеожиданное окончание файла.\n"); return -1; } counter += strlen(buffer); // WriteFile(hPort, buffer, strlen(buffer), &wrtn, 0); // if (counter == total) { CloseHandle(hPort); fclose(infile); fprintf(stdout, "\b\b\b\b100%%"); fflush(stdout); printf("\nФайл передан.\n"); return 0; } // do { ReadFile(hPort, buffer, 1, &wrtn, 0); if (!wrtn) { CloseHandle(hPort); fclose(infile); printf("\nHет ответа от контроллера.\n"); return 0; } } while(*buffer != 17); // fprintf(stdout, "\b\b\b\b%3d%%", counter * 100 / total); fflush(stdout); } }

WBR, AVB

Reply to
Alexey V Bugrov

Добрый день!

на

formatting link
если не ошибаюсь, был пример работы с СОМ портом под Билдер 5. Правда, там не совсем корректно нить закрывается и утечка памяти была (в 2002 году я приведенный там пример испытывал), но пример там был и он рабочий.

С уважением, Чигринец Владислав.

Reply to
Tchigrinets Vladislav

Hi Kirill, hope you are having a nice day!

16 Май 05, Kirill Frolov wrote to Alexey V Bugrov:

Кто-то из них не понимает соответствующие ANSI/ISO стандарты? В печку. А так еще существует наречие племени мумбу-юмбу, для особо страждущих можно писать на нем.

WBR, AVB

Reply to
Alexey V Bugrov

Здравствуй, Kirill!

Monday May 16 2005 02:10, you (2:5030/827.2) wrote to me:

KF> А в визуальному бейсику, в бейсиках ничего не понимаю, кроме как KF> через эту самую компоненту можно что-то прикрутить?

Пpи чем тут вижуалколбасик? OCX можно и из ассемблеpа юзать... А на счет компонетны "Hello Word!" я пpикололся... Хотя пpи желании можно и её написать.

Alex

Reply to
Alex Gavrikov

Привет, Anatoly !

15 May 05 , 00:53 Anatoly Mashanov писал к Sergey Zabelin:

AM> И последняя. Закончиваю проект и увольняюсь к чертям. Точнее, к AM> демонам. Хоть в кедах, хоть в ластах. Либо, пусть работодатель AM> закупает лицензионный мастдай, лицензионный компилятор, лицензионный AM> MSDN и техподдержку от Hекрософта.

хихикс.. Цитата (по памяти) из МСДH от января 2005: while (GetMessage(&msg,NULL,0,0)!=0 && GetMessage(&msg,NULL,0,0)!=-1) { ... }

Дада. Именно такая проверка, именно два вызова GetMessage и именно пропускание половины сообщений.

. С уважением, Hикита. icq:240059686, lj-user:nicka_startcev ... Выползень роду женского подло нарушил Обряд Чистописания

Reply to
Nickita A Startcev

Привет, Alexey !

16 May 05 , 11:07 Alexey V Bugrov писал к Kirill Frolov:

KF>> Кроме C и C++ ещё бывает Visual-C и Builder-C.

AVB> Кто-то из них не понимает соответствующие ANSI/ISO стандарты? В печку. AVB> А так еще существует наречие племени мумбу-юмбу, для особо страждущих AVB> можно писать на нем.

А перед сертификацией сырцы переводить на Brainfuck, Чтоб сертификаторам жизнь мёдом не казалась?

. С уважением, Hикита. icq:240059686, lj-user:nicka_startcev ... Didn't I meet You in some other halluci-nation?

Reply to
Nickita A Startcev

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.