> Главное, не скупиться на подробные комментарии - их много не бывает.
;) Боюсь, если бы работал настоящим программистом в команде, мне за обилие комментариев в коде уже бы что нибудь высказали. Но я никогда не работал в командах. Сам себе всегда от jun'a до team lead. Посмотри исходники софта для моста, например, особенно ту часть, которая крутиться на контроллере.
> Просто странно, что автор ремастеринга Бейсика, работая в USN, не стал делать 95й версии в виде самодостаточного файла для фирменной OS от USN - the BEST. :)
USN - дистрибьютор. Точнее, они тоже выпускали собственное ПО, но также продавали и чужое.
Кроме того, самодостаточный файл не имеет защиты от копирования, в то время как официальные BM их имеют. ... Что как бы намекает на то, что версия в файле была немного не авторской.
> Может, это и есть версия 95?
нет, 95 - это выпуск 1995 года. А у тебя 94.
Посмотри аттач, там разные сборки в-файле BM за разные годы.
Заодно опишешь, в чём там разница.
> Но что посоветуешь конкретно делать в моем случае
Возьму таймаут, надо вникнуть и подумать.
> А вот O$ как замена CHR$ (4)
"O$=chr$(4)" в начале проги.
> Команда принимается, но вызовы EXECов продолжают спамить пустые строчки с "}" приглашением на каждую строку в исполняемом файле (каждый раз сдвигая весь экран вверх).
Не, MON NOMON влияют на перенаправленные потоки. Ты вызываешь EXEC - перенаправляешь ввод. Но вывод-то не перенаправлен, он по умолчанию идёт на экран, а MON только разрешает дублирование потока, который перенаправлен в файл, на терминал.
С другой стороны : когда ты нажимаешь кнопку, сама процедура ввода символа не выводит этот символ. Его выводит уже процедура ввода строки, что -то вроде:
int enter_string(const char prompt, char *buf) {
putchar(prompt);
...
k = getch();
if (k >= ' ') putchar(k);
buf[xxx] = k;
if (k == '\r') { putchar(k); return 0; };
...
}
По такой логике весь ввод должен всё равно должен бы попадать на вывод.
Я пасс, не знаю, по какой логике этот вывод "]" остаётся, а эхо вводимых символов удаляется.
Думаю, если очень хочется всё порезать, можно попробовать вручную вектор $36 завернуть на команду RTS. Но есть вероятность, что дос (особенно ИКП-шная) попытается его восстановить.
> Если я правильно понял, у автора переделки были исходники Apple Бейсика.
Я тоже так думал, но однажды Игорь обнаружил один баг в функции VAL() и когда я предложил ему списаться с Серковым, оказалось, что у него полных исходников не было. Он просто изучал большие куски кода и в них направленно вносил изменения. (баг был найден в ИКП бейсике, но и в серковском он тоже есть).
У меня сейчас есть исходники бейсиков, в т.ч. вроде бы есть ИКПшные, но это лютый дизасм с метками в стиле "M_D031" и без комментариев. Пользы от них - только попробовать скомпилировать и убедиться, что оно с чем нибудь совпадёт. Но и тут куча работы: версий исходников несколько, сборок того же ИКПшного бейсика тоже с десяток можно насчитать. Что от чего и чем отличается - вопрос для неработающих пенсионеров. Я сейчас в такое дело не полезу. Хотя, конечно, если доводится разбираться с какой-то странностью, копаю её в нескольких разных версиях и результаты записываю.
> Такая патчилка была бы полезной на практике, чтобы для моментов исполнения программы, где ДОС функционал не нужен, временно отключать эту лишнюю "петлю" операций которая ничего кроме замедления не несет.
Проблема в том, что если для Бейсик-60 эта патчилка была бы вполне очевидна : сменил вектор и радуйся, то в ИКП есть механника самовосстановления и при каждом обращении к ДОС она мониторит эти вектора и восстанавливает их. Так что получиться, что патчилка должна учитывать версию пары ос-бейсик (а ничего лучше сигнатурного анализа я так и не придумал для этой цели) и, вероятно, править не только вектора в нулевой странице, но и где-то в теле дос.
Единственный вариант: отрубать сразу и stdin и stdout, чтобы дос не могла всплыть.
Наверное, это было бы наиболее универсально и просто. Если прога внезапно упадёт, то бейсик, возможно, обратиться к дос и она всё восстановит. Но не факт, тоже нужно проверять.
Возможно, если нужен ускоренный вывод на экран в бейсике, имеет смысл копнуть в сторону оператора "&".
И через него сделать fastputs(), может быть даже прямо в экранную память, минуя чеки границ окна, необходимости скроллинга.....
> Кстати, файлы по МастерБейсику под рубрикой "Система расширения возможностей языка программирования "БЕЙСИК" ПЭВМ "АГАТ-9"" не открываются, напр.
Напиши это в раздел "О сайте", Игорь поправит ссылки.
http://forum.agatcomp.ru//viewtopic.php?id=357