Pull to refresh

Comments 109

Хорошие новости. Лет через 30 откроют Windows 8
Они за 40 лет пофиксили все костыли и баги, теперь только стало не стыдно показать.
Астрологи предсказывают год форков доса и ворда.
MS-DOS в 30 строк
MS-DOS, переписанный на JS
MS-DOS на чистом CSS3
Word для Windows на HTML 5 (без тэга <brainfuck> точно не обойтись!)
Нативный DOOM, запущенный на нативной MS-DOS на PEBBLE
UFO just landed and posted this here
Форков не будет. Лицензия несвободная.
Скоро портируют на ардуину.
блин, я стрелку перепутал(
Вижу в 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, условие выполняется.
Да. Я дурак, прочитал не так.
Вполне вероятно что оно и не должно было останавливаться. Выход из кода (и возврат обратно) через прерывания какие-нибудь.

А это — просто «процесс» перекладывания из одного буфера в другой.
Я вообще не знаю 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);

Могло быть не так?
скорее всего хотели вызвать исключение при отладке или типа того
А может имелось в виду, что 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 */

И вообще, разработчиками были, видимо, люди очень эмоциональные и ранимые.
UFO just landed and posted this here
Полагаю ParaNormal это встроенный стиль абзаца Обычный.
UFO just landed and posted this here
UFO just landed and posted this here
Благородный дон, не соблаговолите ли Вы покинуть тред?
UFO just landed and posted this here
Вы случайно не из питера?
Судя по обращению, из Арканарского королевства.
Это ж хорошо (хотя, я, честно говоря, больше ждал CDC NOS). А Тот Самый Бейсик вместе с эмулятором не собираются открывать? Или они безвозвратно утеряны?
Ответ на этот вопрос зависит от ответа на другой вопрос: собственно, с чего вдруг Microsoft расщедрилась и отдала Computer History Museum исходники для публикации? Последнего никто не знает. Я подозреваю, что все где-то наверняка лежит до сих пор в неизменном виде и покрывается пылью, просто публиковать не хотят. Прямо, конечно, в Microsoft ничего не говорят, но ребята из Computer History Museum продолжают «отжимать» у компаний разные исходники — вполне возможно, что все еще будет.
просто публиковать не хотят
— Почему? Коммерческого интереса оно уже давно не представляет. Манхэттенский Проект — и то рассекретили быстрее.
Публикация кода несёт юридические риски. Например, если выяснится, что код откуда-нибудь цельно тянут. Или как-то еще нарушает патенты или лицензии.
UFO just landed and posted this here
Какие риски у публикации наколеночной поделки трех школьников?
А возможно такое, что какие-то части кода до сих пор используются в их продуктах? Конечно маловероятно что в 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 училась печатать. Тренировалась на диссертации отца — перепечатывала с черновиков, с формулами и всеми делами.
Весёлые были времена :)
Ждём пулл-реквестов )
Хочу исходники Слово и Дело. Скомпилировать без счётчика запусков — осуществить детскую мечту.
У кого-то чёрный пояс по хитрозакрученным условиям:
				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
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
Когда то и Билли вела дорога приключений, а потом ему прострелили колено…
Сложно удержаться и не выложить тут вот это:

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 =)
Ассемблерской строке цена иная, нежели сишной.
Как за стихи и за прозу.
В ассемблере чем меньше строк, тем выше цена. :)
Only those users with full accounts are able to leave comments. Log in, please.