[NIXP] Microsoft опубликовала код MS-DOS и Word for Windows для студентов и исследователей

Обсуждение новостей, соответствующих тематике форума

Модератор: Модераторы разделов

Аватара пользователя
Dmitry Shurupov
Сообщения: 336
Статус: Open Source geek
ОС: Ubuntu Linux

[NIXP] Microsoft опубликовала код MS-DOS и Word for Windows для студентов и исследователей

Сообщение Dmitry Shurupov »

Музей компьютерной истории (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
По-моему, это еще один повод перейти на Убунту.
Спасибо сказали:
Аватара пользователя
Aviator
Сообщения: 65
ОС: Debian GNU/Linux amd64

Re: [NIXP] Microsoft опубликовала код MS-DOS и Word for Windows для студентов и исследователей

Сообщение Aviator »

Правильно, на этих примерах надо учить тому, как не надо писать программы.
С уважением, Сергей.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [NIXP] Microsoft опубликовала код MS-DOS и Word for Windows для студентов и исследователей

Сообщение drBatty »

Aviator писал(а):
29.03.2014 15:37
Правильно, на этих примерах надо учить тому, как не надо писать программы.

там очень хороший код. Единственная беда -- он безумно устарел.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21245
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [NIXP] Microsoft опубликовала код MS-DOS и Word for Windows для студентов и исследователей

Сообщение Bizdelnick »

drBatty писал(а):
30.03.2014 08:35
там очень хороший код

Почти случайно выбранный кусок:

Код: Выделить всё

/* ****
*
    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;
}

Раминь.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [NIXP] Microsoft опубликовала код MS-DOS и Word for Windows для студентов и исследователей

Сообщение drBatty »

Bizdelnick писал(а):
30.03.2014 10:54
Почти случайно выбранный кусок:

что не так? Упоротые имена -- это всё гайдлайны. Goto это из-за никаких компиляторов тех лет, оптимизация такая. Сейчас это конечно не нужно, а тогда приходилось именно так писать, учитывая жутко медленную скорость.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
moonglow
Сообщения: 90
ОС: CentOS

Re: [NIXP] Microsoft опубликовала код MS-DOS и Word for Windows для студентов и исследователей

Сообщение moonglow »

drBatty писал(а):
30.03.2014 14:21
Bizdelnick писал(а):
30.03.2014 10:54
Почти случайно выбранный кусок:

что не так? Упоротые имена -- это всё гайдлайны. Goto это из-за никаких компиляторов тех лет, оптимизация такая. Сейчас это конечно не нужно, а тогда приходилось именно так писать, учитывая жутко медленную скорость.

выходит, в школе я писал почти идеальный код xDD конца 80х годов
это все вкусы юниксов(unix flavours) виноваты
какой интересный опыт

кстати, недавно интересовался историей токарно-винторезных станков,
оказывается, все школьники после уроков труда могут легко освоиться на фабрике Форда начала 20 века
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [NIXP] Microsoft опубликовала код MS-DOS и Word for Windows для студентов и исследователей

Сообщение drBatty »

moonglow писал(а):
31.03.2014 20:03
выходит, в школе я писал почти идеальный код xDD конца 80х годов

не, ну код просто старый. Раньше так писали, сейчас только старпёрыолдовые мены так пишут. Но назвать этот код "плохим" у меня язык не поворачивается. Хотелось бы услышать, чем он плох?

http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
moonglow
Сообщения: 90
ОС: CentOS

Re: [NIXP] Microsoft опубликовала код MS-DOS и Word for Windows для студентов и исследователей

Сообщение moonglow »

drBatty писал(а):
31.03.2014 22:30
moonglow писал(а):
31.03.2014 20:03
выходит, в школе я писал почти идеальный код xDD конца 80х годов

не, ну код просто старый. Раньше так писали, сейчас только старпёрыолдовые мены так пишут. Но назвать этот код "плохим" у меня язык не поворачивается. Хотелось бы услышать, чем он плох?

чем больше программа, тем факториал(выше) сложность отладки и фиксов, что приводит к костылям, утечкам памяти и необходимости перезапускать программу

это подход, в котором могут программировать только просветленные дзен-буддисты и по$%исты, т.к. он является противоположностью моим предпочтениям, таким как:
- возможность делать рефакторинг всего проекта после каждой решенной задачи и по желанию левой пятки
- возможность никогда не писать один и тот же фрагмент кода дважды

это называется iterative development

а для enterprise, rad, он везде rad, на работе тоже rad, т.к. красивый software design, увы, нужен только hobbyists && software artists
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [NIXP] Microsoft опубликовала код MS-DOS и Word for Windows для студентов и исследователей

Сообщение drBatty »

moonglow
просстое конечно лучше сложного, согласен. Но в восьмидесятые нельзя было писать иначе. Нет, высокоуровневые ЯП были, например 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). Потому писать такое -- тупость. А в восьмидесятых -- необходимость.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
moonglow
Сообщения: 90
ОС: CentOS

Re: [NIXP] Microsoft опубликовала код MS-DOS и Word for Windows для студентов и исследователей

Сообщение moonglow »

спасибо за интро :)
Спасибо сказали: