arexx/pascal

Все что связано с программированием на Амиге.

Модераторы: striimii, Vinnny

arexx/pascal

Сообщение easy_john 28 сен 2011, 19:58

Пишу тут себе небольшую тулзу для амиги.
наткнулся на то, что в arexx при вызове функции нельзя переменные сделать локальными. т.е. они все глобальные и такие вещи как вызов функции рекурсивно банально не работают.
задумался.
из языков еще знаю паскаль. может уже есть смысл переписать все на паскале? (на каком?)
или можно как-то обойтись возможностями рекса?
PegasosII G4 1.0/1Gb/80Gb/Ati 9200/MorphOS unreg/Debian
a4000/PPC 233mhz/68060 50mhz/128mb/cv ppc/toccata/x-surf/kickflash/indivision/AOS3.9-4.0
a1200/PPC 200mhz/68040 25mhz/256mb/bv ppc/delfina/wifi/indivision sd+ff/AOS 3.9-4.0
a600/68000 7mhz/8mb fast/wifi/AOS 3.0
Аватара пользователя
easy_john
Менеджер
Менеджер
 
Сообщения: 4296
Зарегистрирован: 03 мар 2006, 15:24
Откуда: SPb

Re: arexx/pascal

Сообщение ED 28 сен 2011, 20:56

easy_john писал(а):Пишу тут себе небольшую тулзу для амиги.
наткнулся на то, что в arexx при вызове функции нельзя переменные сделать локальными. т.е. они все глобальные и такие вещи как вызов функции рекурсивно банально не работают.
задумался.
из языков еще знаю паскаль. может уже есть смысл переписать все на паскале? (на каком?)
или можно как-то обойтись возможностями рекса?

Переменные глобальные, это так.
Arexx очень слабенький язык, причем он еще и хорошенько глючит.
У меня написан конвертер 3д-объектов на нем. Я уже жалею, что когда-то использовал arexx, думаю переписать на каком-нибудь другом.
За счет ущербности языка конструкция на нем может получиться громоздкой и нелогичной.
К тому же он очень медленно работает. Для сравнения, что на асме происходит за доли секунды, то на арексе может растянуться на пол-часа (я не преувеличиваю).
По-возможности используй другой, можно бейсик (Amiblitz), можно паскаль.
А что пишем? алгоритм надо видеть, чтобы прикинуть, может и арексом можно обойтись.
Вообще, на арексе ветвления/переходы слабо поддержаны, поэтому о рекурсиях лучше вообще не думать.
О каких-то огромных массивах можно сразу забыть, потому как это очень медленно.
A1200+Apollo 1260@50+64mb, MediatorPCI+Voodoo 3+RTL8139, FastATA 1200 MK-V
A1200+Vampire V2
А500 Plus + GVP Impact SCSI, 2chip, 4fast
Commodore64+1541-2 Oceanic drive
iBook G4, 1.07GHz, 1.25Gb, MorphOS
PowerMac G4 1.25Ghz, 2Gb, Morphos
PowerMac G5 dual, 2GHz, 4Gb, MorphOS
Аватара пользователя
ED
Беспардонный Амигофлуд
Беспардонный Амигофлуд
 
Сообщения: 601
Зарегистрирован: 07 авг 2002, 14:21
Откуда: Минск

Re: arexx/pascal

Сообщение easy_john 28 сен 2011, 21:20

ED писал(а):Переменные глобальные, это так.

это гнусно. не позволяет легко делать рекурсивные вещи вызовом функции самой из себя.

ED писал(а):Arexx очень слабенький язык, причем он еще и хорошенько глючит.

хм.

ED писал(а):За счет ущербности языка конструкция на нем может получиться громоздкой и нелогичной.

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

ED писал(а):К тому же он очень медленно работает. Для сравнения, что на асме происходит за доли секунды, то на арексе может растянуться на пол-часа (я не преувеличиваю).

ну, пока в эмуле это работает с достаточной скоростью.

ED писал(а):По-возможности используй другой, можно бейсик (Amiblitz), можно паскаль.

последний раз бейсик я видел году в 94-ом... и хотя раньше я был спецом по диалектам бейсика, сейчас я на нем писать ничего не готов.
паскаль - годится, его осилю, но какой тогда компилятор брать?
нужен код под 68000 и минимум рама.

ED писал(а):А что пишем? алгоритм надо видеть, чтобы прикинуть, может и арексом можно обойтись.
Вообще, на арексе ветвления/переходы слабо поддержаны, поэтому о рекурсиях лучше вообще не думать.
О каких-то огромных массивах можно сразу забыть, потому как это очень медленно.

алгоритм с рекурсиями неизвестной заранее глубины. думаю не больше 7-10, но без локальных переменных ...
PegasosII G4 1.0/1Gb/80Gb/Ati 9200/MorphOS unreg/Debian
a4000/PPC 233mhz/68060 50mhz/128mb/cv ppc/toccata/x-surf/kickflash/indivision/AOS3.9-4.0
a1200/PPC 200mhz/68040 25mhz/256mb/bv ppc/delfina/wifi/indivision sd+ff/AOS 3.9-4.0
a600/68000 7mhz/8mb fast/wifi/AOS 3.0
Аватара пользователя
easy_john
Менеджер
Менеджер
 
Сообщения: 4296
Зарегистрирован: 03 мар 2006, 15:24
Откуда: SPb

Re: arexx/pascal

Сообщение ED 28 сен 2011, 23:40

easy_john писал(а):это гнусно. не позволяет легко делать рекурсивные вещи вызовом функции самой из себя.

Может тебе еще объекты/классы дать? :)

easy_john писал(а):
ED писал(а):Arexx очень слабенький язык, причем он еще и хорошенько глючит.

хм.

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

Сама логика работы не слишком сложная, но вот некоторые процедуры могут сильно подпортить крови..

Да самая простая процедура стандартно в лоб может быть нереализуема, когда циклы в циклах, переменные не имеют типов это и плюс и минус. Ну хз, я вообще с символьными строками работал по большей части.

нужен код под 68000 и минимум рама...
ну, пока в эмуле это работает с достаточной скоростью.

тогда причем здесь 68000?

паскаль - годится, его осилю, но какой тогда компилятор брать?

не знаю, на паскале на ами никогда не програмил. Имеются какие-то в коллекции компиляторы, посоветовать ничего не могу...

алгоритм с рекурсиями неизвестной заранее глубины. думаю не больше 7-10, но без локальных переменных ...

надо обойтись без рекурсии в классическом ее понимании. или нагородить какую-то сложную конструкцию, но на арексе, все равно во что-то все время будешь упираться.
A1200+Apollo 1260@50+64mb, MediatorPCI+Voodoo 3+RTL8139, FastATA 1200 MK-V
A1200+Vampire V2
А500 Plus + GVP Impact SCSI, 2chip, 4fast
Commodore64+1541-2 Oceanic drive
iBook G4, 1.07GHz, 1.25Gb, MorphOS
PowerMac G4 1.25Ghz, 2Gb, Morphos
PowerMac G5 dual, 2GHz, 4Gb, MorphOS
Аватара пользователя
ED
Беспардонный Амигофлуд
Беспардонный Амигофлуд
 
Сообщения: 601
Зарегистрирован: 07 авг 2002, 14:21
Откуда: Минск

Re: arexx/pascal

Сообщение easy_john 29 сен 2011, 01:03

ED писал(а):Может тебе еще объекты/классы дать? :)

не, спасибо, я объектам не обучен, как с ними работать - не знаю. :)
ED писал(а):Да-да, посидишь денек в арексе, как начнет регулярно ребутиться система.

ну, пока не замечал.
да и вообще странно, куча софта на арекс завязана, чего ему глючить..
ED писал(а):тогда причем здесь 68000?

потому, что хочу, что бы оно работало даже на 600-ке. а отлаживаю я естественно пока на эмуле.
ED писал(а):не знаю, на паскале на ами никогда не програмил. Имеются какие-то в коллекции компиляторы, посоветовать ничего не могу...

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

второй вопрос - надо мне будет потом сделать интерфейс на mui, там древовидные списки т.п. фактически чисто информационный, без каких-то функций. как это и на чем делается?

ED писал(а):надо обойтись без рекурсии в классическом ее понимании. или нагородить какую-тосложную конструкцию, но на арексе, все равно во что-то все время будешь упираться.

пока упростил задачу, посмотрим, может все в рекс впихнется.
PegasosII G4 1.0/1Gb/80Gb/Ati 9200/MorphOS unreg/Debian
a4000/PPC 233mhz/68060 50mhz/128mb/cv ppc/toccata/x-surf/kickflash/indivision/AOS3.9-4.0
a1200/PPC 200mhz/68040 25mhz/256mb/bv ppc/delfina/wifi/indivision sd+ff/AOS 3.9-4.0
a600/68000 7mhz/8mb fast/wifi/AOS 3.0
Аватара пользователя
easy_john
Менеджер
Менеджер
 
Сообщения: 4296
Зарегистрирован: 03 мар 2006, 15:24
Откуда: SPb

Re: arexx/pascal

Сообщение ED 29 сен 2011, 12:51

easy_john писал(а):
ED писал(а):Да-да, посидишь денек в арексе, как начнет регулярно ребутиться система.

ну, пока не замечал.
да и вообще странно, куча софта на арекс завязана, чего ему глючить..

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

второй вопрос - надо мне будет потом сделать интерфейс на mui, там древовидные списки т.п. фактически чисто информационный, без каких-то функций. как это и на чем делается?

Не знаю, с гуёй на ами никогда не работал. Была какая-то библиотека rxmui, я не сталкивался

пока упростил задачу, посмотрим, может все в рекс впихнется.

впихнется, конечно. Все можно написать, вопрос только какой ценой.
A1200+Apollo 1260@50+64mb, MediatorPCI+Voodoo 3+RTL8139, FastATA 1200 MK-V
A1200+Vampire V2
А500 Plus + GVP Impact SCSI, 2chip, 4fast
Commodore64+1541-2 Oceanic drive
iBook G4, 1.07GHz, 1.25Gb, MorphOS
PowerMac G4 1.25Ghz, 2Gb, Morphos
PowerMac G5 dual, 2GHz, 4Gb, MorphOS
Аватара пользователя
ED
Беспардонный Амигофлуд
Беспардонный Амигофлуд
 
Сообщения: 601
Зарегистрирован: 07 авг 2002, 14:21
Откуда: Минск

Re: arexx/pascal

Сообщение easy_john 29 сен 2011, 19:22

Я лох, у рекса есть локальные переменные. только это надо принудительно объявить.
Цитата из книги Михайлова:

PROCEDURE [EXPOSE <переменная> [<переменная>] [...]]
Эта инструкция создает новую символьную таблицу для встроенной функции. В символьную таблицу входят имена переменных, доступных из этой функции. Без использования инструкции PROCEDURE все переменные вызывающей функцию программы доступны из нее без каких-либо ограничений, т.е. ничто не мешает менять их из тела функции. Пример:

Код: Выделить всё
х = 1
сall func
say x  ==>  2
exit
func:
  x = 2
return

Ситуация меняется при использовании инструкции PROCEDURE, локализирующей переменные, действия с которыми происходят в теле функции:
Код: Выделить всё
х = 1
call func
say x  ==>  1
exit
func: PROCEDURE
  x = 2
return


Как я умудрился это упустить?
PegasosII G4 1.0/1Gb/80Gb/Ati 9200/MorphOS unreg/Debian
a4000/PPC 233mhz/68060 50mhz/128mb/cv ppc/toccata/x-surf/kickflash/indivision/AOS3.9-4.0
a1200/PPC 200mhz/68040 25mhz/256mb/bv ppc/delfina/wifi/indivision sd+ff/AOS 3.9-4.0
a600/68000 7mhz/8mb fast/wifi/AOS 3.0
Аватара пользователя
easy_john
Менеджер
Менеджер
 
Сообщения: 4296
Зарегистрирован: 03 мар 2006, 15:24
Откуда: SPb

Re: arexx/pascal

Сообщение ED 30 сен 2011, 00:08

easy_john писал(а):Как я умудрился это упустить?

Называется, читайте мануал.
Помнится я в институте на программухе тоже косячил. Delphi/pascal в тексте программы надо было возвести x в квадарат. Ну я и пишу x*x. Меня препод дергает, не правильно, перечеркивает мою прогу, говорит надо использовать функцию sqr(x).
Или я писал программу имитацию железнодорожных касс(в рамках институтской программы, конечно). Время считал - переводил минуты в часы и т.п. На меня препод визжал что дурной, причем фразами "что я, хочу экономику всю развалить?". А оказывается есть встроенная функция date.
Внимательно читайте мануалы!
A1200+Apollo 1260@50+64mb, MediatorPCI+Voodoo 3+RTL8139, FastATA 1200 MK-V
A1200+Vampire V2
А500 Plus + GVP Impact SCSI, 2chip, 4fast
Commodore64+1541-2 Oceanic drive
iBook G4, 1.07GHz, 1.25Gb, MorphOS
PowerMac G4 1.25Ghz, 2Gb, Morphos
PowerMac G5 dual, 2GHz, 4Gb, MorphOS
Аватара пользователя
ED
Беспардонный Амигофлуд
Беспардонный Амигофлуд
 
Сообщения: 601
Зарегистрирован: 07 авг 2002, 14:21
Откуда: Минск

Re: arexx/pascal

Сообщение aGGreSSor 26 фев 2015, 01:35

easy_john писал(а):из языков еще знаю паскаль. может уже есть смысл переписать все на паскале? (на каком?)
Если сишник с асмом всё ещё не осилены, HiSpeedPascal only. Я на нём лабораторные по стартовым комплексам делал для универа. Он в значительной части совместим с TurboPascal, т.е. можно было с некоторыми оговорками писать так чтобы потом записать на дискету 3,5" через CrossDOS и в универе показать. Математика нормальная, простая графика возможна. Ещё я на нём плазму писал на спор за полчаса. Настолько же тормозную насколько тормозят паскалевские массивы. Теперь когда Амига кое-как работает, могу найти и выложить). Вообще, если Amiga only и just for fun, то AmigaE вне конкуренции. PowerD и пр. клоны imho ерунда. Для примера: EvenMore на AmigaE. И второй инструмент AMOS. Для примера: Worms для A600 и Dizzy. С AMOS у меня вообще трагедия была. Написалась большая забитая олдскульными эффектами игра в 2000-м где-то и погибла на рухнувшей PFS-партиции. Выкладывайте в паблик любую ерунду в бетах с сорцами, как вывод. Где-то ещё игра у меня на asm болталась типа Twiins, слабо помню.. Надо сеть заставить работать и вывалить часть винчестера в аминет, а то EasyLink не торт. Остапа понесло, короче.. :bash: Вот три полезных инструмента на классике (помимо vbcc и Devpac): AmigaE, AMOS и HiSpeedPascal :mrgreen:
Jedem das Seine

A1230@50MHz/32M/80G, Mediator PCI (S3 ViRGE/DX 4M, RTL8139), GBS-8200;
A2000@7,14MHz without all ;)
Аватара пользователя
aGGreSSor
Надоедливый Амигодух
Надоедливый Амигодух
 
Сообщения: 365
Зарегистрирован: 10 фев 2004, 12:41
Откуда: Saint-Petersburg, Russia

Re: arexx/pascal

Сообщение aGGreSSor 26 фев 2015, 01:55

Нашлось. Оттакая фигня малята! :lol: flame.pas

Код: Выделить всё
{ Flame.pas ; HiSpeedPascal Amiga/TP 7.0 compatibly (c) aGGreSSor, 30-Jun-00 }

program Flame;
  uses Crt,Graph;
   var GrDriver,GrMode,x,y,n,m,i,r: integer;
         A: real;
         CTab: array [0..10,0..50] of integer;
         
procedure Clear_Tab;
  begin
   FOR x:=0 TO 50 DO
    FOR y:=0 TO 10 DO
     CTab [x,y]:=0;
    end;
   
procedure RND_Tab;
  begin
   y:=10; Randomize;
    FOR n:=0 TO 50 DO
     begin
      r:=Random(5);
      CTab[n,y]:=r;
     end;
  end;
 
procedure Calc_Tab;
  begin
   FOR y:=1 TO 9 DO
    begin
     FOR x:=1 TO 49 DO
      begin
       A:=Int((CTab[x+1,y+1]+CTab[x-1,y+1])/2);
       CTab[x,y]:=Trunc(A);
     end;
    end;
  end;
 
procedure Print_Tab;
  begin
   FOR y:=1 TO 9 DO
    FOR x:=1 TO 49 DO
      putpixel (x+135,y+160,CTab[x,y]);
  end;
 
  { flame/plasma process.. }
  begin
   GrDriver:=CGA; GrMode:=CGAc0;    {CGA, 320x200, 4 colors}
   InitGraph (GrDriver,GrMode,' '); {0-black, 1-blue, 2-red, 3-magenta}
    Clear_Tab; m:=0;
   REPEAT
    RND_Tab;
    Calc_Tab;
    Print_Tab;
   UNTIL m=250;
m:=0;
   REPEAT
  FOR x:=0 TO 50 DO
   begin
    CTab[x,10]:=0;
   end;
  Calc_Tab;
  Print_Tab;
m:=m+1;
  UNTIL m=30;
 
{ delay (1000); }

  CloseGraph
    end.
Jedem das Seine

A1230@50MHz/32M/80G, Mediator PCI (S3 ViRGE/DX 4M, RTL8139), GBS-8200;
A2000@7,14MHz without all ;)
Аватара пользователя
aGGreSSor
Надоедливый Амигодух
Надоедливый Амигодух
 
Сообщения: 365
Зарегистрирован: 10 фев 2004, 12:41
Откуда: Saint-Petersburg, Russia


Вернуться в Программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

cron