Комментарии 109
Хорошие новости. Лет через 30 откроют Windows 8
Астрологи предсказывают год форков доса и ворда.
Скоро портируют на ардуину.
Вижу в Word некоторое количество *.c файлов. Забавно было-бы натравить на них PVS-Studio. Правда, боюсь возникнут проблемы с Си тех времён. Но самый большой вопрос, как бы получить *.i файлы. Кто ни будь знает, как и чем они собирались?
Тупо переименовал *.c в *.i и натравил PVS-Studio Standalone. И вот прям сразу зависание/падение:
while (--cch >= 0) — никогда не остановится. Переменная типа unsigned всегда >= 0.
В общем надо будет на досуге повнимательней археологией заняться.
void GetNameElk(elk, stOut) ELK elk; unsigned char *stOut; { unsigned char *stElk = &rgchElkNames[mpelkichName[elk]]; unsigned cch = stElk[0] + 1; while (--cch >= 0) *stOut++ = *stElk++; }
while (--cch >= 0) — никогда не остановится. Переменная типа unsigned всегда >= 0.
В общем надо будет на досуге повнимательней археологией заняться.
Я все-таки думаю что нулем оно быть может.
Вполне вероятно что оно и не должно было останавливаться. Выход из кода (и возврат обратно) через прерывания какие-нибудь.
А это — просто «процесс» перекладывания из одного буфера в другой.
А это — просто «процесс» перекладывания из одного буфера в другой.
Я вообще не знаю C и есть вероятность что могу ошибаться, но разве значение переменной
cch
не уменьшается с каждой итерацией? Ведь там указано --cch >= 0
, а не просто cch >= 0
.Уменьшается. Но переменная объявлена как unsigned, и меньше нуля она стать не может.
Спасибо за объяснение. Почему-то не сразу понял что Andrey2008 имел ввиду.
Возможно, что выражение "--cch" имело тип int. И тогда сравнивался бы -1, а в cch лежало бы 255.
Натравливать PVS-Studio на сорцы первого доса…
Ну это как профессору МГУ проверять правописание первоклашки и придираться.
Во-первых профессор когда-то сам был первоклассником и тоже писал «карова».
Во-вторых, аппаратный уровень того времени не позволял сделать качественный статический анализатор (сколько тогда оперативки было?).
В-третьих, для того чтобы запустить анализатор — нужна была сама операционная система и компилятор чтобы этот анализатор создать.
Надо же было с чего-то начать? Вот и начали с операционки, потом перешли к компилятору, потом пришло время анализатора.
Если есть хоть какая-то операционка, хоть какой-то компилятор, хоть какой-то дебаггер — то следующий «виток технологий» уже проще.
Ну это как профессору МГУ проверять правописание первоклашки и придираться.
Во-первых профессор когда-то сам был первоклассником и тоже писал «карова».
Во-вторых, аппаратный уровень того времени не позволял сделать качественный статический анализатор (сколько тогда оперативки было?).
В-третьих, для того чтобы запустить анализатор — нужна была сама операционная система и компилятор чтобы этот анализатор создать.
Надо же было с чего-то начать? Вот и начали с операционки, потом перешли к компилятору, потом пришло время анализатора.
Если есть хоть какая-то операционка, хоть какой-то компилятор, хоть какой-то дебаггер — то следующий «виток технологий» уже проще.
Я не думаю, что всё так плохо. Мне кается, что там очень всё даже хорошо. Да, инструменты были проще и слабее. Но и программы были намного короче. Тогда было намного легче и реальней сделать обзор кода. Вполне было реально взять и почитать код всего проекта.
А проверить захотелось исключительно из любопытства.
А проверить захотелось исключительно из любопытства.
Ну, не надо про аппаратный уровень. Дебаггеры на мейнфреймах были уже в шестидесятых — кто мешал написать на тех же мейнфреймах эмулятор с отладчиком?
Видимо, вы забыли, что DOS был написан по сути дела программистом-одиночкой (вики говорит о Тиме Патерсоне и компании " Seattle Computer Products"), да и Майкрософт тех времён состоял чуть ли не из одного Гейтса. Мейнфреймы 60-ых — это вообще песня. Там тоже до мегабайтов и гигабайтов оперативки было далеко. Не говоря уже о стоимости доступа. Стоимость разработки полноценного эмулятора и отладчика для первой операционки нового компьютера на порядки превышала возможные проблемы. Помните — не надо заниматься преждевременной оптимизацией. Особенно, если может не взлететь.
PVS-Studio не делает ничего, что не мог бы сделать человек. По сути осуществляет ревьюирование кода без риска «замыленного глаза»
Сурово, однако, раньше жилось:
Могло быть не так?
Assert((1 > 0) == 1);
Могло быть не так?
Может какие-то макросы?
#define 1 rand()
или еще что.
#define 1 rand()
или еще что.
скорее всего хотели вызвать исключение при отладке или типа того
А может имелось в виду, что true — это именно 1, а не 2 или там 0xFFFF? Потому что дальше идут какие-то хаки вроде
Стандарта на язык не было, так что компиляторы, возможно, имели право представлять логическую истину как попало при преобразовании в int. Понятия не имею, как там с этим дело было, но в таком ключе эта проверка хоть немного логична.
error_message_array[some_value > some_limit]
.Стандарта на язык не было, так что компиляторы, возможно, имели право представлять логическую истину как попало при преобразовании в int. Понятия не имею, как там с этим дело было, но в таком ключе эта проверка хоть немного логична.
Хотя нет, The C Programming Language, 2.6 Relational and Logical Operators:
By definition, the numeric value of a relational or logical expression is 1 if the relation is true, and 0 if the relation is false.Так что если считать K&R стандартом, то по идее такого быть не должно. Но опять же, стандартом она была лишь де-факто, так что вполне вероятно, что этот ассерт — проверка на адекватность компилятора.
Как вариант — проверка на отсутствие #define true false-подобных макросов.
Я где-то читал, про разработку какого-то продукта в MS при помощи альфаверсии компилятора — может чтобы выгребать какие-то альфаглюки?
Как вариант могло быть -1. Не помню было ли в каком-нибудь Си такое, но во многих языках такое было.
Спасибо! Как раз искал что почитать.
P.S. Тем временем, пользователи на HackerNews уже делают первые открытия в исходном коде Word, проверяя годами ходившие предания:
grep -ri fuck .
Спустя 30 лет справедливость таки восстановлена: мощи доса отданы на растерзание GNU/grep
Исходники dos 6 доступны давным давно, правда не очень лицензионные. И там встречается, например:
* Function will add the szSetupPath to the users path statement in the
* autoexec.bat file. The szSetupPath will be the first location in the
* path statement. The path can be in about a million fucked up forms
* depending on the level of stupidity in the user
Актуально.
Бросил все дела, сижу, читаю комментарии к коду ворда. Открываю случайный исходник и начинаю листать. Можно фильмы снимать по этому. Хоть комедии, хоть трагедии.
И вообще, разработчиками были, видимо, люди очень эмоциональные и ранимые.
/* Special handling for ParaNormal [...]
/* just in case… */
/* windows bug work around */
И вообще, разработчиками были, видимо, люди очень эмоциональные и ранимые.
НЛО прилетело и опубликовало эту надпись здесь
Это ж хорошо (хотя, я, честно говоря, больше ждал CDC NOS). А Тот Самый Бейсик вместе с эмулятором не собираются открывать? Или они безвозвратно утеряны?
Ответ на этот вопрос зависит от ответа на другой вопрос: собственно, с чего вдруг Microsoft расщедрилась и отдала Computer History Museum исходники для публикации? Последнего никто не знает. Я подозреваю, что все где-то наверняка лежит до сих пор в неизменном виде и покрывается пылью, просто публиковать не хотят. Прямо, конечно, в Microsoft ничего не говорят, но ребята из Computer History Museum продолжают «отжимать» у компаний разные исходники — вполне возможно, что все еще будет.
просто публиковать не хотят
— Почему? Коммерческого интереса оно уже давно не представляет. Манхэттенский Проект — и то рассекретили быстрее.
— Почему? Коммерческого интереса оно уже давно не представляет. Манхэттенский Проект — и то рассекретили быстрее.
Публикация кода несёт юридические риски. Например, если выяснится, что код откуда-нибудь цельно тянут. Или как-то еще нарушает патенты или лицензии.
А возможно такое, что какие-то части кода до сих пор используются в их продуктах? Конечно маловероятно что в 2010 или более поздних вордах мы увидим куски первых — но все же… А это уже потенциальные косяки безопасности
А может все еще проще — открытые коды показывают все «грязное белье» программистов. Одно дело кричать, что мелкософт глючит, другое показать им сотни ляпов, костылей и недочетов кода в их же исходниках. Это может быть сильным ударом по репутации и «профессионализму их профессионалов», хоть и прошлого.
Это никак не повлияло бы на их сегодняшнюю репутацию.
Во первых тех программистов, что писали этот древний код, многих уже нет в компании, во вторых даже те, кто осталось — прошли через 30 лет опыта, что очень сильно меняет программиста.
Ну и на последок — некорректно судить о качестве кода 30 летней давности используя современные метрики. 30 лет назад индустрия только еще зарождалась. Это сейчас у нас есть разные парадигмы, паттерны, общепринятые методики, итп. Тогда многого из этого еще не было и каждый велосипедил как умел.
Во первых тех программистов, что писали этот древний код, многих уже нет в компании, во вторых даже те, кто осталось — прошли через 30 лет опыта, что очень сильно меняет программиста.
Ну и на последок — некорректно судить о качестве кода 30 летней давности используя современные метрики. 30 лет назад индустрия только еще зарождалась. Это сейчас у нас есть разные парадигмы, паттерны, общепринятые методики, итп. Тогда многого из этого еще не было и каждый велосипедил как умел.
Зачем? Чисто на поржать? Так не смешно уже. Лучше бы код вынь-98 и шестого осла открыли. Вот там жертв было бы больше. На порядки.
На самом деле (с) Вордом для DOS в нашей стране достаточно активно пользовались. Я, правда, про первую версию не в курсе, а вот кажется пятая была очень даже популярна, особенно когда появились первые лазерные принтеры — это смотрелось чудом — полиграфия лучше книжной. А вот как раз ВордПёрфектом пользовались только представительства зарубежных компаний. Я однажды видел этот продукт и был удивлен, что он завоевал популярность — чистый экран 80х25, на нем курсор и все действия через клавиатурные шорткаты. На мой тогдашний взгляд это даже хуже Лексикона было. Эх… Еще и ChiWriter… Где мои 17 лет?
ChiWriter, OMG, как обухом внезапно!11…
НЛО прилетело и опубликовало эту надпись здесь
Вы просто смотрите на всё историю без понимания контекста. Вначале были TeX и roff/nroff, где форматирование задавалось путём указания конманд. WordPerfect явился тогда, когда к этой деятельности подключились люди, которым было сложно увидеть за мешаниной всех этих команд будущий документ: с одной стороны он показывает «чистый» текст документа, а с другой стороны режим reveal codes давал возможность работать с текстом так, как люди за десятилетия привыкли — в текстовом виде и с полным контролем над результатом.
Word (и Лексикон с ChiWriter'ом) — это уже следующий этап в движении от «тупой» к «ещё тупее»: тут уже ни о каких reveal codes никто в принципе не думал, это для людей, которые выравнивают текст с помощью «самой большой кнопки», а на следующую страницу переходят с помощью «большой кнопки со стрелочкой». Там ещё есть кой-какие возможности для людей, которые хотят контролировать результат, но они уже — не главное, главное — чтобы человек находящийся где-то между «идиот» и «безнадёжный кретин» хоть что-то смог бы изобразить.
Word (и Лексикон с ChiWriter'ом) — это уже следующий этап в движении от «тупой» к «ещё тупее»: тут уже ни о каких reveal codes никто в принципе не думал, это для людей, которые выравнивают текст с помощью «самой большой кнопки», а на следующую страницу переходят с помощью «большой кнопки со стрелочкой». Там ещё есть кой-какие возможности для людей, которые хотят контролировать результат, но они уже — не главное, главное — чтобы человек находящийся где-то между «идиот» и «безнадёжный кретин» хоть что-то смог бы изобразить.
О, да :) Я в ChiWriter училась печатать. Тренировалась на диссертации отца — перепечатывала с черновиков, с формулами и всеми делами.
Весёлые были времена :)
Весёлые были времена :)
Вдруг кому удобней будет, залил на гитхаб github.com/zxcabs/MSDOS_MSWORD
Хочу исходники Слово и Дело. Скомпилировать без счётчика запусков — осуществить детскую мечту.
У кого-то чёрный пояс по хитрозакрученным условиям:
И коричневый пояс по пустым циклам:
Где-то четверть кода написана на ассемблере, остальное — чистый си, в общем даже достаточно аккуратный си. Ждём поста про то как PVS-Studio чихвостит Microsoft:)
if ((fCloseDoc = (doc = DocFromSt(stFileName)) ==
docNil) && (doc = DocOpenStDof(stFileName,
dofNoWindow, NULL)) == docNil)
И коричневый пояс по пустым циклам:
for (ifoo = 1; ifoo < ifooMac; ifoo++);
{
if (*pvoteFoo == 0)
goto LRet;
if (*pvoteFoo > voteMaj)
{
fooMaj = *pfoo;
voteMaj = *pvoteFoo;
}
*pfoo++;
*pvoteFoo++;
}
Где-то четверть кода написана на ассемблере, остальное — чистый си, в общем даже достаточно аккуратный си. Ждём поста про то как PVS-Studio чихвостит Microsoft:)
Они уже это сделали в комментариях выше habrahabr.ru/post/217081/#comment_7436169
Эксгумация…
Сейчас хабровчане в коде первого DOS-а точно найдут «Главный вопрос о жизни вселенной и всего такого.» ©
Ответ на него точно есть.
MSCODE.ASM:
DOSSYM.ASM:
SYSCALL.ASM:
MSDOS.ASM:
MSCODE.ASM:
short_addr $LSEEK ; 66 42
short_addr $GET_DATE ; 42 2A
DOSSYM.ASM:
GET_DATE EQU 42 ; 42 2A
LSEEK EQU 66 ; 66 42
SYSCALL.ASM:
SUBTTL DATE AND TIME - SYSTEM CALLS 42,43,44,45; S/G DATE,TIME
procedure $GET_DATE,NEAR ;System call 42
MSDOS.ASM:
GETDATE: ;Function call 42
НЛО прилетело и опубликовало эту надпись здесь
Сложно удержаться и не выложить тут вот это:
DOS
…
И представил я:
Город наводнился вдруг разумными людьми:
Вышли все под DOS,
А проклятый WINDOWS — удаляли, черт возьми.
Позабыв про WORD,
MS EXCEL, COREL DRAW и прочий геморрой,
Люди ставят DOS,
Словно в Рай заходят в DOS,
Нормальный, чистый DOS…
(С) Леонид Каганов
С нетерпением жду Excel исходников. Очень уж хочется на них взглянуть.
DOS
…
И представил я:
Город наводнился вдруг разумными людьми:
Вышли все под DOS,
А проклятый WINDOWS — удаляли, черт возьми.
Позабыв про WORD,
MS EXCEL, COREL DRAW и прочий геморрой,
Люди ставят DOS,
Словно в Рай заходят в DOS,
Нормальный, чистый DOS…
(С) Леонид Каганов
С нетерпением жду Excel исходников. Очень уж хочется на них взглянуть.
А я жду исходников Microsoft Visual Studio или хотя-бы компилятора msvc.
>DOS
На случай если кто не знаком с этим произведением (или просто давно не слышал) — наслаждайтесь «клипом» :)
На случай если кто не знаком с этим произведением (или просто давно не слышал) — наслаждайтесь «клипом» :)
Препарация динозавров.
Палеонтологи есть?
Палеонтологи есть?
Печально, что нет исходников ассемблера.
Я, конечно, не сильно знаком с ASM, но чтобы кто мне объяснит логику данного выражения?
FOURYEARS = 3*365 + 366
FOURYEARS = 3*365 + 366
Даже начинаю жалеть, что толком не застал компьютеры тех времен :)
ооо, наконец-то! Поле для нового BolgenOS
Может музей кода создать?
А это он и есть.
Не совсем. Нужны не только исторические экспонаты, но и разделы «Абстракционизм», «Супрематизм», «Эпоха возрождения» и т. д.
Так, для справки — количество строк кода (с комментариями, пустыми строками).
Для MS-DOS:
Для Word:
Есть где-нибудь информация о прибыли от этих продуктов? А то можно посчитать, сколько стоит одна строка кода в Microsoft =)
Для MS-DOS:
[yse@yse msdos]$ cat `find ./ -iname "*.c" -or -iname "*.asm"` | wc -l
65266
Для Word:
[yse@yse Word 1.1a CHM Distribution]$ cat `find ./ -iname "*.c" -or -iname "*.asm"` | wc -l
423318
Есть где-нибудь информация о прибыли от этих продуктов? А то можно посчитать, сколько стоит одна строка кода в Microsoft =)
А вот и результаты раскопок: Занимательная археология. Или PVS-Studio проверяет Microsoft Word 1.1a.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Microsoft открывает исходный код первых версий MS-DOS и Word