LINUX.ORG.RU

Ищу древний паскалевский компилятор.


0

2

Дали программу на паскале, написанную где в 85 годах. При попытке скомпилировать ее все компиляторы, что я опробовал ругаются на функции REF и LOOPHOLE как на неизвестные. Каким компилятором можно это чудо скомпилировать?

Спасибо.

Подозреваю, что только TURBO.
Можно попробовать взять его либы и подключить к современному компилятору.

Dispetcher14 ★★★★★
()

Дали программу на паскале

Просто один файл или каталог с проектом? В последнем случае какие файлы есть? Расширение у исходника PRS?

ziemin ★★
()

Давайте сюда, попробуем разобраться.

AlexCones ★★★
()
Последнее исправление: AlexCones (всего исправлений: 1)

Вот из описания Pascal-2 V2.0/RSX:

«Ref» Function

The «ref» function, with a variable argument of type T, produces a pointer to that variable with result type ↑T (pointer to T). Note: the «dispose» routine cannot always detect attempts to dispose of a pointer generated with this function, and you should not try to do so.

«Loophole» Function

The «loophole» function provides a controlled escape from Pascal type rules. The first parameter is a type identifier specifying the result type of the function. The second parameter is an expression of a «compatible» type.

В вашем исходнике эти функции используются с таким смыслом? А то может у вас действительно не Pascal.

mky ★★★★★
()
Ответ на: комментарий от fritew5

Вот за ссылку огромное спасибо,кажется что это то что нужно.
mky, да это именно эти функции, спасибо.

Glaciuse
() автор топика
Ответ на: комментарий от Glaciuse

Исходник идет одним файлом без чего либо, вот он, собственно:

CONST SIZEZAP=122;
TYPE MAS=INTEGER;
     ZAPTYPE=RECORD
           CTLB1:MAS;
           CTLB2:MAS;
           CTLB3:ARRAY[1..4] OF CHAR;
           CTLB4:ARRAY[1..6] OF CHAR;
           CTLB5:ARRAY[1..6] OF CHAR;
           CTLB6:REAL;
           CTLB7:REAL;
           CTLB8:REAL;
           CTLB9:ARRAY[1..16] OF CHAR;
           CTLB10:REAL;
           CTLB11:MAS;
           CTLB12:REAL;
           CTLB13:REAL;
           CTLB14:MAS;
           CTLB15:REAL;
           CTLB16:REAL;
           CTLB17:MAS;
           CTLB18:REAL;
           CTLB19:REAL;
           CTLB20:MAS;
           CTLB21:REAL;
           CTLB22:REAL;
           CTLB23:MAS;
           CTLB24:REAL;
           CTLB25:MAS;
           CTLB26:ARRAY[1..11] OF INTEGER
         END;
     TXBBB=ARRAY[1..4] OF CHAR;
     ZAP2=RECORD
           A:TXBBB;
           A1:INTEGER;
           BIM:ARRAY[1..5] OF REAL
          END;
     TXMASS=ARRAY[1..50,1..300] OF CHAR;
     TXZAP2=RECORD
          TXCTANLEN,TXKODLEN:INTEGER;
          TXMAS:TXMASS;
          TXKODM:ARRAY[1..300] OF INTEGER;
          TXCTANM:ARRAY[1..50] OF TXBBB
         END;
     ZZZZ=FILE OF ZAP2;
     LLL=FILE OF INTEGER;
VAR W:ZAPTYPE;
    TXLEN,LDB:LLL;
    TTTT:FILE OF CHAR;
    OLD:ARRAY[1..4] OF CHAR;
    METKA:CHAR;
    CAWA,CHET,UU,BXT,LEN2,ZMET,LEN,R,R1,R2,R3,P2,P3,S1,S2,K,S11,S25,K1,P,P1:INTEGER;
    XXX:ZZZZ;
    W2:ZAP2;
    NAME:PACKED ARRAY[1..20] OF CHAR;
    TXW2:TXZAP2;
    ZO,TXNN,TXKK,TXNNN,TXNNNN,TXLL,TXAAA,TXBBBB,TXCCC,TXAA,TXBB,TXCC,TXDD,TXII,TXFF,TXJJ,TXHH,TXLEN1,TXM,TXCIKL,TXCIKL1,TXCIKL2:INTEGER;
    TXES:BOOLEAN;
    ZOO,TXSPI,TXBIM,TXNAM:TEXT;
PROCEDURE READB;
 TYPE SSYLKA=^ZAPTYPE;
 VAR CIKL:INTEGER;
     MCHAR:ARRAY[1..SIZEZAP] OF CHAR;
     PZAP:SSYLKA;
  BEGIN
    FOR CIKL:=1 TO SIZEZAP DO READ(TTTT,MCHAR[CIKL]);
    PZAP:=LOOPHOLE(SSYLKA,REF(MCHAR[1]));
    W:=PZAP^;
    K1:=K1+1
  END;
PROCEDURE RRR(B:MAS;VAR C:INTEGER);
TYPE UNSIGNED=0..65535;
VAR UN,K1,K2:UNSIGNED;
BEGIN
 UN:=LOOPHOLE(UNSIGNED,B);
 K1:=UN MOD 256;
 K2:=UN DIV 256;
 UN:=K1*256+K2;
 C:=LOOPHOLE(INTEGER,UN)
END;
PROCEDURE SAPIS;
          VAR P2:INTEGER;
          BEGIN
             RRR(W.CTLB25,S25);
             RESET(ZOO,'ZOOPL.DEL');
             ZMET:=0; 
             REPEAT
               READLN(ZOO,ZO);
               IF ZO=S25 THEN ZMET:=1;
             UNTIL EOF(ZOO);
             CLOSE(ZOO);
             IF ZMET=0 THEN
             BEGIN
              IF (ABS(W.CTLB15+W.CTLB18+W.CTLB21+W.CTLB24-W.CTLB12)>0.001)AND(W.CTLB12<>32767) THEN W.CTLB12:=W.CTLB15+W.CTLB18+W.CTLB21+W.CTLB24;
             FOR P2:=1 TO 4 DO W2.A[P2]:=W.CTLB3[P2];
             W2.A1:=S25;
             W2.BIM[1]:=W.CTLB12;
             W2.BIM[2]:=W.CTLB15;
             W2.BIM[3]:=W.CTLB18;
             W2.BIM[4]:=W.CTLB21;
             W2.BIM[5]:=W.CTLB24;
             WRITE(XXX,W2);
             LEN2:=LEN2+1;
           END;
          END;

Ну и так далее...

Glaciuse
() автор топика
Ответ на: комментарий от Glaciuse

Либо бери более древний, либо ищи либы, возможно они специфичны.

Dispetcher14 ★★★★★
()
Ответ на: комментарий от Glaciuse

Попробую без матерных слов. Ну нихрена же себе! Ёптыть, для чего такой record сделан? Страшно даже представить.

Особенно мне понравилось это - «IF (ABS(W.CTLB15+W.CTLB18+W.CTLB21+W.CTLB24-W.CTLB12)>0.001)AND(W.CTLB12<>32767) THEN W.CTLB12:=W.CTLB15+W.CTLB18+W.CTLB21+W.CTLB24;»

Охренеть можно... ))

cadaber ★★
()
Последнее исправление: cadaber (всего исправлений: 2)
Ответ на: комментарий от Glaciuse
TYPE SSYLKA=^ZAPTYPE;
 VAR CIKL:INTEGER;

Детектирую русских разработчиков 80х годов. У нас до сих пор в таком духе некоторые преподаватели пишут.

AlexCones ★★★
()
Ответ на: комментарий от q11q11

Да у них просто клавиатура поломалась

anonymous
()
Ответ на: комментарий от q11q11

Это поди ещё в KOI-7 на СМ-ЭВМ начинали разрабатывать, и, возможно, часть кода когда-то была FORTRAN'ом.

mky ★★★★★
()
Ответ на: комментарий от AlexCones

Как будто в начале 90-ых не было русского препроцессора к клипперу, «азм веди глаголь»

fritew5
()
Ответ на: комментарий от Glaciuse

Ааа, сделайте меня развидеть это!
Фортран головного мозга - очень, очень плохо! Слабо представляется, как раньше жили люди.

actics
()
Ответ на: комментарий от AlexCones

А некоторые даже ведут холивары по поводу того нужно ли называть переменные своими именами, или сканает a b c x y z i j ...

actics
()
Ответ на: комментарий от actics

Просто сегодня такой код выглядит... Как сказать... Понятным только для того, кто его писал и, может быть, пары его коллег. Я про Zapis, ssylka, cikl, etc. Попробуте показать такой код кому-то, кроме русских и тот, кто его будет читать наделает гору кирпичей.

AlexCones ★★★
()
Ответ на: комментарий от AlexCones

За такой код нужно руки отрывать, потом пришывать и заного отрывать. Чтоб эффект был. Причем такие встречаются далеко за пределами школ.
Приятель работает в стартапе, дак у них там «ведущему» разработчику за 30, и при этом код у него выглядит именно так. (а теперь угадай, слышал ли он слово архитектура :D)

actics
()
Ответ на: комментарий от actics

а теперь угадай, слышал ли он слово архитектура :D)

*Голосом 60-тилетнего старца*: «Понапридумывали всяких сложностей, чай на программирование времени совсем не остается. Всякие там абстракции да классы только придумывают. Вот в наше время...»

AlexCones ★★★
()
Ответ на: комментарий от AlexCones

Не ну это не тот случай. там терминальная стания обезьяны.
По моему, очень давно (60 лет это РМС, так что надо было тебе больше брать) программирование, ну как минимум прикладное было только для решения различных математических задач, программы были на бумажках и перфокартах, и были они совсем маленькими. (когда компьютеры были большими, а программы маленькими, да :D ) Тогда на читабельность и прочее было наплевать. Но вот когда появиляются первые программы за 2-3к строк, вот там уже невольно задумаешься.

actics
()
Ответ на: комментарий от q11q11

а собсно что за паскаль в котором ВСЁ нужно капсом писать???

Раньше все программы писали капсом - и на бейсике, и на паскале, и на ассемблере. Читать же так проще. Не знаю, почему сейчас перешли на мелкие буквы.

Nxx ★★★★★
()

Судя по содержанию, это исходники последней 1С, да?

cdshines ★★★★★
()
Ответ на: комментарий от ziemin
  • изменять в цикле глобальные переменные это зло;
  • присваивать переменной указатель без проверки это нехорошо;
  • глобальные переменные-файлы это лютое зло;
  • ну и наконец, x mod 256 может вернуть неожиданный результат;
  • ...
ziemin ★★
()
Ответ на: комментарий от actics

Отличный код. Прошло 30 лет,а людям он интересен. И похоже правильно работал, если правки понадобились только сейчас.

ilovewindows ★★★★★
()
Ответ на: комментарий от ilovewindows

Я говорил про тех индивидов, кто сейчас пишет в подобном стиле. Ты не прочел комменты прежде чем писать ;)

actics
()
Ответ на: комментарий от Glaciuse

Я так понимаю, REF надо заменить на адресный оператор, LOOPHOLE - на приведение типов - и будет щастья.

Например, вместо:
PZAP:=LOOPHOLE(SSYLKA,REF(MCHAR[1]))
Пишем так:
PZAP:=SSYLKA(@MCHAR[1])

или
PZAP:=SSYLKA(ADDR(MCHAR[1]))

Тогда вполне FreePascal подойдет.

PVOzerski ★★★
()
Последнее исправление: PVOzerski (всего исправлений: 1)
Ответ на: комментарий от actics

Фишка в том, что тогда писали расчетные программы для себя и читабельность кода вне самого кодера никого не волновала.

fritew5
()
Ответ на: комментарий от actics

Кстати, это практика 70-середины 80-ых, когда РМС уже вроде ваял свой емакс :)

fritew5
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.