Г-н Фаршеклоакин (spamsink) wrote,
Г-н Фаршеклоакин
spamsink

Category:

Старинные картинки

Внезапно, в файле-образе диска, который у меня был на протяжении лет 20, нашлась программа на Паскале, датированная 23.05.85 в комментарии, рисующая на графическом дисплее разные картинки (хозяйке на заметку: дампы надо смотреть в виде потока символов во всех теоретически возможных кодировках, а не только в паре самых распространенных).
Ничего похожего на дисплей "Электроника МС 7401" винницкого производства у меня нет, поэтому птичий язык я выкинул, а команды Постскрипта вставил. Некоторые из выдаваемых картинок таким образом удалось воскресить.

Естественно, уже в то время не обошлось без котов.

Длина процедуры - 42 строки.

Также имеются случайным образом генерируемые "цветочки", символически называемые розами; видимо, за розоцветную пятилепестность.


Длина процедуры - 27 строк.

Есть и абстрактный узор (увы, только один).

Длина процедуры - 44 строки.

Название процедуры, генерирующей следующую картинку, (из 4 букв) предлагаю угадать. Не стесняйтесь, угадывайте, слово приличное, из 4 букв как по-русски, так и по-английски.

Длина процедуры - 39 строк.

Приведу в качестве примера самую короткую из процедур, выдранную из исходного текста, с правками для выдачи Постскрипта:

В этом диалекте Паскаля позволялось для краткости записывать begin как _( и end как _).
program rose(output); const tr=true; fl=false;
type int=integer;
procedure РОЗА;(*РОЗЕТКА*)label 12;
var I,(*!*)К,NТ:INТ;
А,В,С,D,DL,F,Н,J,L,М,N,SN,Р,Q,R,S,Т,У,SМ,Z1,Z2:RЕАL;
function ХХ(F:RЕАL):RЕАL;
_(ХХ:=(SIN(N*F)*Р+Н)*СОS(F)+СОS((J*N+А)*F)*М+СОS((Т*N+А)*F)*S+280_);
function УУ(F:RЕАL):RЕАL;
_(УУ:=(SIN(N*F)*Р+Н)*SIN(F)+SIN((J*N+А)*F)*М+SIN((Т*N+А)*F)*S+200_);
_(Q:=АRСSIN(1.0)*4.0;I:=0;
N:=RАNDОМ;
12:А:=1.0;N:=ТRUNС(7.0*RАNDОМ+4.0);
J:=ТRUNС(6.5*RАNDОМ+2.0)*2.0;
Т:=ТRUNС(8.5*RАNDОМ+2.0)*2.0;
SМ:=J+Т;if RАNDОМ>0.5 then J:=-J else Т:=-Т;
Р:=RАNDОМ*40.0;М:=RАNDОМ*32.0-16.0;S:=RАNDОМ*32.0-16.0;
if (АВS(М)+АВS(S))<10 then goto 12;
Н:=50.0-Р-АВS(М)-АВS(S);if Н<0 then _GОТО 12;
D:=Q/(40.0*N*SМ);С:=0.0;L:=0.0;I:=ТRUNС(SМ*40.0);
for К:=0 to I do _(У:=К;F:=У*D;
Z1:=ХХ(F)-280;Z2:=УУ(F)-200;R:=SQRТ(Z1*Z1+Z2*Z2);
if R>С then _(L:=F;С:=R_)_);
for К to 2 do _(В:=L;D:=D*0.1;for I:=-9 to 9 do _(
У:=I;F:=У*D+В;Z1:=ХХ(F)-280;Z2:=УУ(F)-200;R:=SQRТ(Z1*Z1+Z2*Z2);
if R>С then _(L:=F;С:=R_)_)_);
С:=170.0/С;Н:=Н*С;Р:=Р*С;М:=М*С;S:=S*С;
writeln(RОUND(ХХ(0.0)),RОUND(УУ(0.0)), ' moveto');NТ:=ТRUNС(N*250.0);
DL:=Q/NТ;for К:=0 to NТ do _(У:=DL*К;
writeln(RОUND(ХХ(У)),RОUND(УУ(У)), ' lineto');_);
_);(*ЕND РОЗА*)
_(РОЗА; writeln(' stroke showpage') _).

Как нетрудно видеть из кода функций ХХ и УУ и других мест кода, где встречаются константы 280 и 200, размер экрана был 560х400 пикселей.
Tags: retrocomputing
Subscribe

  • Старость не радость

    Утром я где-то в комментах к одному из постов в одной из двух моих френдлент увидел ссылку на свежий рассказ Лео Каганова "Диалоги рептильного…

  • Давно я так не смеялся

    Ролик не очень свежий (февраль 2021), ну извините, если кто уже видел. Хотя, может, и плохо смеялся, потому что могу оказаться не последним.…

  • Просто так, лауреатское

    (По аналогии с известным анекдотом, произносится с характерным акцентом.) — Если бы я был лауреат, я был бы круче, чем лауреат! Я бы ещё…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 31 comments

  • Старость не радость

    Утром я где-то в комментах к одному из постов в одной из двух моих френдлент увидел ссылку на свежий рассказ Лео Каганова "Диалоги рептильного…

  • Давно я так не смеялся

    Ролик не очень свежий (февраль 2021), ну извините, если кто уже видел. Хотя, может, и плохо смеялся, потому что могу оказаться не последним.…

  • Просто так, лауреатское

    (По аналогии с известным анекдотом, произносится с характерным акцентом.) — Если бы я был лауреат, я был бы круче, чем лауреат! Я бы ещё…