Музей компьютерной истории (Computer History Museum) сообщает, что корпорация Microsoft дала добро на публикацию оригинального исходного кода своих ранних разработок: операционной системы MS-DOS (версии 1.1 от 1982 года и 2.0 от 1983) и текстового процессора Word for Windows (версия 1.1a от 1990 года).
Публикация кода сделана музеем с целью «помочь будущим поколениям технологов лучше понять корни персональной вычислительной техники». Исходники MS-DOS 1.1 (1982 год), занимающие менее 300 Кб, предназначались для запуска на компьютерах с оперативной памятью в 12 Кб (первый IBM PC был представлен широкой публике в 1981 году). Первая версия Word for Windows для DOS, предназначенная на использование с мышкой, появилась в 1983 году, однако популярность это приложение обрело только с релизом 1989 года.
Исходники MS-DOS (основной код на Assembler) и Word for Windows (основной код на C) распространяются на условиях лицензии Microsoft Research License, которая разрешает их самостоятельное использование, копирование и модификацию в некоммерческих и исследовательских целях, но запрещает какое-либо дальнейшее распространение исходного или модифицированного кода.
оригинал на www.nixp.ru
[NIXP] Microsoft опубликовала код MS-DOS и Word for Windows для студентов и исследователей
Модератор: Модераторы разделов
-
- Сообщения: 336
- Статус: Open Source geek
- ОС: Ubuntu Linux
[NIXP] Microsoft опубликовала код MS-DOS и Word for Windows для студентов и исследователей
По-моему, это еще один повод перейти на Убунту.
-
- Сообщения: 65
- ОС: Debian GNU/Linux amd64
Re: [NIXP] Microsoft опубликовала код MS-DOS и Word for Windows для студентов и исследователей
Правильно, на этих примерах надо учить тому, как не надо писать программы.
С уважением, Сергей.
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: [NIXP] Microsoft опубликовала код MS-DOS и Word for Windows для студентов и исследователей
там очень хороший код. Единственная беда -- он безумно устарел.
-
- Модератор
- Сообщения: 21245
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: [NIXP] Microsoft опубликовала код MS-DOS и Word for Windows для студентов и исследователей
Почти случайно выбранный кусок:
Код: Выделить всё
/* ****
*
Function: CmdSpelling
* Author:
* Copyright: Microsoft 1986
* Date: 8/31/87
*
* Description: Menu level command function for "Spelling" dialog
*
** ***/
/* %%Function:CmdSpelling %%Owner:bryanl */
CMD CmdSpelling(pcmb)
CMB * pcmb;
{
int cmd = cmdOK;
CHAR szFileT [ichMaxFile];
CHAR dlt[sizeof(dltSpeller)];
struct SPV spv;
struct SPL spl;
struct SCD scd;
vpspv = &spv;
vpspl = &spl;
if (!FInitSpell())
{
LError:
cmd = cmdError;
goto LRet;
}
/* try the current dict */
if (!FScanForPlgc( &lgcCur ))
{
/* no luck, scan to see what else is out there */
lgcCur.wLgc = wLgcNil;
if (!FScanForPlgc( &lgcCur ))
{
ErrorEid(eidSpellNoDict, "");
goto LError;
}
}
if (!FSpellDllLoad( lgcCur ))
goto LError;
vpscd = &scd;
if (!FInitVpscd())
goto LError;
if (pcmb->fDefaults)
{ /* called in both EL and user-command case */
CABSPELLER *pcabspeller;
CchCopySz( (vrf.udcDefault == udcUpdate || hszUserDict == hNil) ?
spv.szUpdateDict : *hszUserDict, szFileT );
FSetCabSz(pcmb->hcab, szFileT, Iag(CABSPELLER, hszSplADictBox));
if (FPickOneWord(fFalse))
FSetCabSz(pcmb->hcab, vpscd->szTestWord, Iag(CABSPELLER, hszSplWord));
pcabspeller = (CABSPELLER *) *pcmb->hcab;
pcabspeller->sab = 0;
pcabspeller->fSplAutoSugg = vpref.fSplAutoSugg;
pcabspeller->fSplIgnoreCaps = vrf.fSplIgnoreCaps;
/* fMemFail will be true if FSetCabSz fails */
if (vmerr.fMemFail)
{
cmd = cmdNoMemory;
goto LDiscardAndRet;
}
}
if (!pcmb->fDialog && pcmb->fAction && pcmb->tmc == tmcSplRemove)
{
/* special case for macro delete word from dict */
int ilb, isz;
int spc;
CABSPELLER *pcab;
#ifdef BRYANL
CommSz( SzShared( "Macro delete case reached\r\n"));
#endif
Assert( fElActive ); /* only time this should happen */
cmd = cmdError;
/* set up user dictionary */
/* verify update dictionary (STDUSER.DIC) */
if (!FUpdateDictOK())
goto LDiscardAndRet;
GetCabSz( pcmb->hcab, szFileT, ichMaxFile, Iag(CABSPELLER,hszSplADictBox));
if (!FSetUserDict( szFileT, fFalse ))
goto LDiscardAndRet;
if (!FNeNcSz(szFileT, vpspv->szUpdateDict))
/* have specified user dict on previous spell run, but have restored
STDUSER.DIC as the default */
vrf.udcDefault = udcUpdate;
/* change to alternate speller DLL/Main dictionary if specified */
/* call list box fill proc to fill in structures for
main dictionary so IlbLngFromSz will work */
for ( isz = 0 ;
WDDLBoxSpellMDict( tmmText, szFileT, isz, 0, 0, 0 );
isz++ )
;
GetCabSz( pcmb->hcab, szFileT, ichMaxFile, Iag(CABSPELLER,hszSplMDictBox));
ilb = IlbLngFromSz( szFileT );
if (!FSetMainDict(ilb))
goto LDiscardAndRet;
if (!FTellDllAboutDicts())
goto LDiscardAndRet;
GetCabSz( pcmb->hcab, vpscd->szTestWord, cbWordMax + 2, Iag(CABSPELLER,hszSplWord) );
if (!FValidateWord())
goto LDiscardAndRet;
/* look it up to see where to delete it from, then delete if possible */
switch (spc = SpcCheckWord())
{
int udc;
default:
case spcNotFound: /* can't delete it if it's not there */
case spcMainDict: /* can't delete from main dictionary */
goto LDiscardAndRet;
case spcUserDict:
udc = udcUser;
goto LTryRemove;
case spcUpdateDict:
udc = udcUpdate;
LTryRemove:
if (vpspv->mpudcfRO [udc])
goto LDiscardAndRet;
if (!FMyDeleteWordFromDictAux(udc, vpspl->ghdWord.ghsz))
goto LDiscardAndRet;
break;
}
cmd = cmdOK;
goto LDiscardAndRet;
}
if (pcmb->fDialog || pcmb->fAction)
{
BltDlt(dltSpeller, dlt);
if (TmcOurDoDlg(dlt, pcmb) != tmcError)
{
if (spv.fStartScan)
FScanDoc();
}
else
cmd = cmdError;
}
LDiscardAndRet:
DiscardSpeller();
LRet:
/* increase the swap area size */
GrowSwapArea();
if (cmd == cmdOK)
return cmdOK;
if (fElActive)
RtError( rerrIllegalFunctionCall ); /* does not return */
return cmd;
}
Раминь.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: [NIXP] Microsoft опубликовала код MS-DOS и Word for Windows для студентов и исследователей
что не так? Упоротые имена -- это всё гайдлайны. Goto это из-за никаких компиляторов тех лет, оптимизация такая. Сейчас это конечно не нужно, а тогда приходилось именно так писать, учитывая жутко медленную скорость.
-
- Сообщения: 90
- ОС: CentOS
Re: [NIXP] Microsoft опубликовала код MS-DOS и Word for Windows для студентов и исследователей
выходит, в школе я писал почти идеальный код xDD конца 80х годов
это все вкусы юниксов(unix flavours) виноваты
какой интересный опыт
кстати, недавно интересовался историей токарно-винторезных станков,
оказывается, все школьники после уроков труда могут легко освоиться на фабрике Форда начала 20 века
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: [NIXP] Microsoft опубликовала код MS-DOS и Word for Windows для студентов и исследователей
не, ну код просто старый. Раньше так писали, сейчас только старпёрыолдовые мены так пишут. Но назвать этот код "плохим" у меня язык не поворачивается. Хотелось бы услышать, чем он плох?
-
- Сообщения: 90
- ОС: CentOS
Re: [NIXP] Microsoft опубликовала код MS-DOS и Word for Windows для студентов и исследователей
чем больше программа, тем факториал(выше) сложность отладки и фиксов, что приводит к костылям, утечкам памяти и необходимости перезапускать программу
это подход, в котором могут программировать только просветленные дзен-буддисты и по$%исты, т.к. он является противоположностью моим предпочтениям, таким как:
- возможность делать рефакторинг всего проекта после каждой решенной задачи и по желанию левой пятки
- возможность никогда не писать один и тот же фрагмент кода дважды
это называется iterative development
а для enterprise, rad, он везде rad, на работе тоже rad, т.к. красивый software design, увы, нужен только hobbyists && software artists
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: [NIXP] Microsoft опубликовала код MS-DOS и Word for Windows для студентов и исследователей
moonglow
просстое конечно лучше сложного, согласен. Но в восьмидесятые нельзя было писать иначе. Нет, высокоуровневые ЯП были, например BASIC, но код на них работал как УГ.
1. что-то серьёзное тупо не влезло-бы в компьютер на высокоурвневом ЯП. Только детские поделки. Программист был вынужден собирать серьёзные программы кусками, из нескольких функций. Подходы "одна функция == один файл" и подход "одна программа == один файл" были одинаково невозможны.
2. на высокоурвневом ЯП программы люто тормозили. Фактически работали только детские поделки.
3. сишка была совсем другой. Если сегодня кодер пишет x/2, т.к. ему нужно половину x, то тогда кодеру приходилось писать x>>1. А вместо x/3 кодер писал x*0x5555. Иначе компилятор так и делил-бы на 3, что в 10+ раз медленнее. Отсутствие goto в нужном месте тоже каралось тормозами. В итоге примитивная qsort занимала полсотни строк. Сейчас тоже самое займёт десяток строк.
4. процессоры сами по себе умели выполнять только примитивные операции. Ну например китайский код
выполнялся втрое быстрее тог же в цикле. Сегодня сам цикл будет выполнятся параллельно, не занимая времени (начиная с iPentium). Потому писать такое -- тупость. А в восьмидесятых -- необходимость.
просстое конечно лучше сложного, согласен. Но в восьмидесятые нельзя было писать иначе. Нет, высокоуровневые ЯП были, например BASIC, но код на них работал как УГ.
1. что-то серьёзное тупо не влезло-бы в компьютер на высокоурвневом ЯП. Только детские поделки. Программист был вынужден собирать серьёзные программы кусками, из нескольких функций. Подходы "одна функция == один файл" и подход "одна программа == один файл" были одинаково невозможны.
2. на высокоурвневом ЯП программы люто тормозили. Фактически работали только детские поделки.
3. сишка была совсем другой. Если сегодня кодер пишет x/2, т.к. ему нужно половину x, то тогда кодеру приходилось писать x>>1. А вместо x/3 кодер писал x*0x5555. Иначе компилятор так и делил-бы на 3, что в 10+ раз медленнее. Отсутствие goto в нужном месте тоже каралось тормозами. В итоге примитивная qsort занимала полсотни строк. Сейчас тоже самое займёт десяток строк.
4. процессоры сами по себе умели выполнять только примитивные операции. Ну например китайский код
Код: Выделить всё
x[0]=y[0];
x[1]=y[1];
x[2]=y[2];
x[3]=y[3];
x[4]=y[4];
x[5]=y[5];
x[6]=y[6];
выполнялся втрое быстрее тог же в цикле. Сегодня сам цикл будет выполнятся параллельно, не занимая времени (начиная с iPentium). Потому писать такое -- тупость. А в восьмидесятых -- необходимость.
-
- Сообщения: 90
- ОС: CentOS