1. Pascal / Говнокод #10011

    +129

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    function assemble(var w:word;s:string):boolean;
    .....
     else if length(cmd)=3 then
      begin
       {ТРЕХБУКВЕННЫЕ КОМАНДЫ}
       case cmd[1] of
        'a':case cmd[2] of
             'c':if cmd[3]='i' then
                  begin
                   code:=$ce;
                   typ:=7;
                  end;
             'd':case cmd[3] of
                  'd':begin
                       code:=$80;
                       typ:=4;
                      end;
                  'c':begin
                       code:=$88;
                       typ:=4;
                      end;
                  'i':begin
                       code:=$c6;
                       typ:=7;
                      end;
                 end;
    ..... еще 500 подобных строк ....
    end;

    Прочитал http://govnokod.ru/10002 и вспомнил, как когда-то писал асм\дизасм\эмуль для 8080 на паскале.

    Запостил: bormand, 22 Апреля 2012

    Комментарии (60) RSS

    • да, на паскале тяжело написать конечный автомат
      Ответить
      • Вот тебе смешно, а это на самом деле самый оптимальный токенизатор. Намного оптимальнее, чем if S = 'aaa' then... else if S='bbb' then... итд
        Ответить
        • Но оптимальные токенизаторы лучше генерить тулзами типа flex'а, а не писать руками. Просто тогда я не знал ни С ни флексов, да и кодилось все это в BP под досом.
          Ответить
          • и терпения хватило?
            Ответить
            • Там еще строк 719 строк собственно эмулятора на асме :)

              Сейчас бы не хватило, а тогда терпения было не занимать...
              Ответить
            • Зато терпения не хватило на то, чтобы накопипастить вот такие блоки в каждую ветку вместо typ:=N

              4:begin
                 {АРИФМЕТИКА С ОДНИМ БАЙТОМ}
                 i:=pos(s[1],regb);
                 if i=0 then assemble:=false
                 else
                  begin
                   mem[$e000:w]:=code+(i-1);
                   inc(w);
                  end;
                end;
              Ответить
          • google: tpflex, tpyacc
            Ответить
            • А они работают под борманд паскалем 3.1? Ну хотя, судя по tp, даже в турбопаскале должны.
              Ответить
              • Кто такой BP 3.1? Ты с BC 3.1 часом не путаешь?

                Под маркой Borland Pascal вышел полный комплект Turbo Pascal 7.0, включающий поддержку сразу трёх платформ (DOS, DPMI 16 бит, Windows 3.x). Других BP не было. Был ещё BP 7.01, но это был апдейт, исправляющий некоторые баги.

                Турбо Паскаль до версии 4.0 включительно не поддерживал модули (unit), поддерживал модель памяти tiny и генерировал COM-файлы. На Borland Pascal он был несильно похож. Даже ООП появилось то ли в пятой, то ли в шестой версии.

                А вот у досовской сишки версия 3.1 была распространена.
                Ответить
                • Путаю. 7.0 всё-таки. С ООП и трубовиженом.
                  Ответить
                  • У меня ещё был эксклюзивный BP 8.0 — Delphi 1.0 с пропатченным модулем System, который мог компилировать файлы так же под DOS и DPMI (без формошлёпства, к сожалению или к счастью). Я под него ещё портировал модуль Graph. Если интересно, могу куски из него наложить на ГК.

                    Точнее, это был компилятор с внутренней версией 7.9 — Delphi 1.0 alpha с пиратского диска (у альфы и у 1.0 был разный номер версии в tpu-файлах), но всем пофиг.
                    Ответить
                    • турбовижен под него был или уже VCL ?
                      Ответить
                      • Для Винды уже был VCL и формошлёпка. Для ДОСа только Турбовижен, только хардкор.
                        Ответить
                        • Я кстати вижуал бейсик под дос юзал. Там можно было формы шлепать. Я из-за этого и освоил бейск. Мои лабы были особенно хорошо приняты преподавателями.
                          Ответить
                          • Видел такой, мне понравился. К сожалению, формы работали только в текстовом режиме. Графический режим был без форм.

                            Но в то же время я наткнулся на графические форки Турбовижен для TP, поэтому к Бейсику не вернулся.

                            Кстати, про ДОС. На сайте http://www.softwareuno.com/ можно найти упоминания библиотеки MEWEL, с помощью которой можно было быстро портировать приложения Win 3.x на ДОС. К сожалению, скачать эту библиотеку нигде не смог.
                            Ответить
                • >>до версии 4.0 включительно не поддерживал модули
                  а как же была реализована стандартная библиотека?
                  Ответить
                  • Так же, как в Си. Он генерировал obj-файлы.

                    TPU появились только в пятом Турбо Паскале. Вру, в четвёртом. В TP 4.0 сигнатура была TPU0 — самая первая версия TPU.
                    Ответить
                  • P.S. Добыл TP 3.02. Исправляюсь. У него ни obj, ни lib не было. Библиотека была зашита в компилятор! Только графический модуль был в отдельном файле GRAPH.BIN.

                    Это для TP 4.0 была сторонняя программа TPU2OBJ, которой можно было делать обж-файлы. А в третьем не было никаких OBJ и никаких Unit.
                    Ответить
                    • А препроцессор хоть был? Или функции надо было каждый раз копировать из программы в программу?
                      Ответить
                      • Была директива $I и ещё куча директив, которые сохранились в новых версиях.
                        Ответить
                      • P.S. Ещё немного скандалов, интриг, расследований: http://govnokod.ru/19045
                        Ответить
    • Тяжко без мепов?
      Ответить
      • Думаю, без мепов было нормально. Когда что-то не встречал*, не печалишься об отсутствии этого. Я вообще на паскале без динамической памяти писал, и ничего.
        Только потом динамическая память, сборка мусора, замыкания и изоляция имени испортили меня. Помню, не так давно питон причинил мне боль, не позволив создать анонимную функцию.
        ______________________
        * Хотя, кто знает, может Борманд всё сразу знал.
        Ответить
        • http://www.hearthcards.net/cards/4ef041be.png
          Ответить
        • > Когда что-то не встречал*, не печалишься об отсутствии этого.
          https://wiki.c2.com/?BlubParadox
          Ответить
    • Борманд, а по какому принципу делатели осей выбирают между новым сисколом для новой фичи и, например, девайсом с ioctl?

      Вот например у прыща socket это сискол, а у винды WinSock ходит в устройство типа \Device\AFD и туда срет.
      Что мешало в прыще вместо socketа открывать /dev/tcp, например?
      Не пришлось бы sockfs пилить чтобы уметь read/write.

      Извини, что я wake you up from the fine nap, но ты же понимаешь, что никто мне больше не овтетит?

      куууик
      Ответить
    • А ты тоже из Осетии?
      Ответить
    • https://www.youtube.com/watch?v=CLS2Uxxr8xk
      Ответить

    Добавить комментарий