Открыть список
Как стать автором
Обновить

Комментарии 109

Хорошие новости. Лет через 30 откроют Windows 8
Они за 40 лет пофиксили все костыли и баги, теперь только стало не стыдно показать.
Астрологи предсказывают год форков доса и ворда.
MS-DOS в 30 строк
MS-DOS, переписанный на JS
MS-DOS на чистом CSS3
Word для Windows на HTML 5 (без тэга <brainfuck> точно не обойтись!)
Нативный DOOM, запущенный на нативной MS-DOS на PEBBLE
Кто сказал Pebble?
НЛО прилетело и опубликовало эту надпись здесь
Форков не будет. Лицензия несвободная.
Скоро портируют на ардуину.
а потом появится PiMS-Dos
блин, я стрелку перепутал(
Вижу в Word некоторое количество *.c файлов. Забавно было-бы натравить на них PVS-Studio. Правда, боюсь возникнут проблемы с Си тех времён. Но самый большой вопрос, как бы получить *.i файлы. Кто ни будь знает, как и чем они собирались?
Тупо переименовал *.c в *.i и натравил PVS-Studio Standalone. И вот прям сразу зависание/падение:
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.
В общем надо будет на досуге повнимательней археологией заняться.
Я все-таки думаю что нулем оно быть может.
Цикл while выполняется, пока выполняется условие. Условие: X >= 0.
Если X это unsigned, то при любом значении X, условие выполняется.
Да. Я дурак, прочитал не так.
del
del
del
Вполне вероятно что оно и не должно было останавливаться. Выход из кода (и возврат обратно) через прерывания какие-нибудь.

А это — просто «процесс» перекладывания из одного буфера в другой.
Я вообще не знаю 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()
или еще что.
скорее всего хотели вызвать исключение при отладке или типа того
А может имелось в виду, что true — это именно 1, а не 2 или там 0xFFFF? Потому что дальше идут какие-то хаки вроде 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 */

И вообще, разработчиками были, видимо, люди очень эмоциональные и ранимые.
НЛО прилетело и опубликовало эту надпись здесь
Полагаю ParaNormal это встроенный стиль абзаца Обычный.
НЛО прилетело и опубликовало эту надпись здесь
Иди отсюда.
НЛО прилетело и опубликовало эту надпись здесь
Благородный дон, не соблаговолите ли Вы покинуть тред?
НЛО прилетело и опубликовало эту надпись здесь
Вы случайно не из питера?
Судя по обращению, из Арканарского королевства.
Это ж хорошо (хотя, я, честно говоря, больше ждал CDC NOS). А Тот Самый Бейсик вместе с эмулятором не собираются открывать? Или они безвозвратно утеряны?
Ответ на этот вопрос зависит от ответа на другой вопрос: собственно, с чего вдруг Microsoft расщедрилась и отдала Computer History Museum исходники для публикации? Последнего никто не знает. Я подозреваю, что все где-то наверняка лежит до сих пор в неизменном виде и покрывается пылью, просто публиковать не хотят. Прямо, конечно, в Microsoft ничего не говорят, но ребята из Computer History Museum продолжают «отжимать» у компаний разные исходники — вполне возможно, что все еще будет.
просто публиковать не хотят
— Почему? Коммерческого интереса оно уже давно не представляет. Манхэттенский Проект — и то рассекретили быстрее.
Публикация кода несёт юридические риски. Например, если выяснится, что код откуда-нибудь цельно тянут. Или как-то еще нарушает патенты или лицензии.
НЛО прилетело и опубликовало эту надпись здесь
Какие риски у публикации наколеночной поделки трех школьников?
А возможно такое, что какие-то части кода до сих пор используются в их продуктах? Конечно маловероятно что в 2010 или более поздних вордах мы увидим куски первых — но все же… А это уже потенциальные косяки безопасности
А может все еще проще — открытые коды показывают все «грязное белье» программистов. Одно дело кричать, что мелкософт глючит, другое показать им сотни ляпов, костылей и недочетов кода в их же исходниках. Это может быть сильным ударом по репутации и «профессионализму их профессионалов», хоть и прошлого.
Это никак не повлияло бы на их сегодняшнюю репутацию.

Во первых тех программистов, что писали этот древний код, многих уже нет в компании, во вторых даже те, кто осталось — прошли через 30 лет опыта, что очень сильно меняет программиста.
Ну и на последок — некорректно судить о качестве кода 30 летней давности используя современные метрики. 30 лет назад индустрия только еще зарождалась. Это сейчас у нас есть разные парадигмы, паттерны, общепринятые методики, итп. Тогда многого из этого еще не было и каждый велосипедил как умел.

Да, вы правы. 30 лет в этой индустрии — это не просто «прошлое», это «средние века» по нашему. А тогда и женщин не стеснялись на кострах жечь…
Зачем? Чисто на поржать? Так не смешно уже. Лучше бы код вынь-98 и шестого осла открыли. Вот там жертв было бы больше. На порядки.
На самом деле (с) Вордом для DOS в нашей стране достаточно активно пользовались. Я, правда, про первую версию не в курсе, а вот кажется пятая была очень даже популярна, особенно когда появились первые лазерные принтеры — это смотрелось чудом — полиграфия лучше книжной. А вот как раз ВордПёрфектом пользовались только представительства зарубежных компаний. Я однажды видел этот продукт и был удивлен, что он завоевал популярность — чистый экран 80х25, на нем курсор и все действия через клавиатурные шорткаты. На мой тогдашний взгляд это даже хуже Лексикона было. Эх… Еще и ChiWriter… Где мои 17 лет?
ChiWriter, OMG, как обухом внезапно!11…
WordPerfect умел такую вещь, как поддержка шаблонов с полями, заполняемыми вызывающей WP программой. Причем, умел это чуть ли не с конца 80-х. А еще — WP был мультиплатформенным, что в конце 80-х — начале 90-х было очень и очень актуально.
Я сам в начале 00-х в одной маленькой московской фирме с богатой историей, тянущейся из СССР, имел дело с системой формирования и печати документов и счетов, построенной на IBM RS/6000 в качестве сервера БД (которая там была вовсе даже нереляционная), терминальной сети, построенной на COM-портах и на соответствующих концентраторах Digi, и WordPerfect на компьютерах пользователей. Оно работало, и работало быстро и надёжно. Но поддерживать это было крайне тяжело, а потому мы это всё заменили в итоге на MS SQL Server + Ethernet + MS Word, а терминальная часть интерфейса была реализована на win32.
Вы просто смотрите на всё историю без понимания контекста. Вначале были TeX и roff/nroff, где форматирование задавалось путём указания конманд. WordPerfect явился тогда, когда к этой деятельности подключились люди, которым было сложно увидеть за мешаниной всех этих команд будущий документ: с одной стороны он показывает «чистый» текст документа, а с другой стороны режим reveal codes давал возможность работать с текстом так, как люди за десятилетия привыкли — в текстовом виде и с полным контролем над результатом.

Word (и Лексикон с ChiWriter'ом) — это уже следующий этап в движении от «тупой» к «ещё тупее»: тут уже ни о каких reveal codes никто в принципе не думал, это для людей, которые выравнивают текст с помощью «самой большой кнопки», а на следующую страницу переходят с помощью «большой кнопки со стрелочкой». Там ещё есть кой-какие возможности для людей, которые хотят контролировать результат, но они уже — не главное, главное — чтобы человек находящийся где-то между «идиот» и «безнадёжный кретин» хоть что-то смог бы изобразить.
О, да :) Я в ChiWriter училась печатать. Тренировалась на диссертации отца — перепечатывала с черновиков, с формулами и всеми делами.
Весёлые были времена :)
Ждём пулл-реквестов )
Так и до Win 8 недалеко :)
Хочу исходники Слово и Дело. Скомпилировать без счётчика запусков — осуществить детскую мечту.
У кого-то чёрный пояс по хитрозакрученным условиям:
				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:)
Эксгумация…
Сейчас хабровчане в коде первого DOS-а точно найдут «Главный вопрос о жизни вселенной и всего такого.» ©
Ответ на него точно есть.

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
Вот это точно ОНО! GETDATE: ;Function call 42
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Когда то и Билли вела дорога приключений, а потом ему прострелили колено…
Сложно удержаться и не выложить тут вот это:

DOS

И представил я:
Город наводнился вдруг разумными людьми:
Вышли все под DOS,
А проклятый WINDOWS — удаляли, черт возьми.
Позабыв про WORD,
MS EXCEL, COREL DRAW и прочий геморрой,
Люди ставят DOS,
Словно в Рай заходят в DOS,
Нормальный, чистый DOS…

(С) Леонид Каганов

С нетерпением жду Excel исходников. Очень уж хочется на них взглянуть.
А я жду исходников Microsoft Visual Studio или хотя-бы компилятора msvc.
>DOS

На случай если кто не знаком с этим произведением (или просто давно не слышал) — наслаждайтесь «клипом» :)

Нужны годы, чтобы эта песня прекратила всплывать в сознании и мешать думать о чем-то еще. И достаточно одного прослушивания, чтобы свести эти годы на нет.

Кстати, с ней же всплывает в памяти и «Ставил Windows программист».
Препарация динозавров.
Палеонтологи есть?
Палеонтологи есть?

Думаю все, кто отписался в этой теме, уже провели раскопки.
Тут и палеонтологи есть, и патологоанатомы, и даже несколько некрофилов затесалось… :)
Печально, что нет исходников ассемблера.
Извиняюсь, не заметил.
Я, конечно, не сильно знаком с ASM, но чтобы кто мне объяснит логику данного выражения?

FOURYEARS = 3*365 + 366
#define FOURYEARS 1461.
(Три обычных и один високосный год).
Да это же юлианский календарь!
Разница между юлианским и григорианским календарем между 1901 и 2100 годами постоянна.
Даже начинаю жалеть, что толком не застал компьютеры тех времен :)
ооо, наконец-то! Поле для нового BolgenOS
Может музей кода создать?
А это он и есть.
Не совсем. Нужны не только исторические экспонаты, но и разделы «Абстракционизм», «Супрематизм», «Эпоха возрождения» и т. д.
Извините, не понял вашего тонкого юмора.
Бывает.
Думаю, самыми большими разделами будут «Экспрессионизм», «Сюрреализм» и «Культура народов Юго-Восточной Азии»…
Русские народные :)
Так, для справки — количество строк кода (с комментариями, пустыми строками).
Для 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 =)
Ассемблерской строке цена иная, нежели сишной.
Как за стихи и за прозу.
В ассемблере чем меньше строк, тем выше цена. :)
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.