Кратко о будущих возможностях МАДЛа.
Есть конечно MD02 (который возможно выложу намного позже), в котором реализованы TTextLV,TByteLV,TWordLV,TProcedureLV и т.д. Ну оно для кого-то может оказаться настолько специфическим, что лучше делать это все самому для себя, с самостоятельно придуманными названиями.
Для тех у кого бурная и широкая фантазия и высокий полёт ума, как у меня например...
Предлагаю вспомнить, такое как "Overload;"
И вот если, создать типы вот так вот (как пример):
Quote:
type TByteLV=record LabelLV:TLabelLV; end;
type TWordLV=record LO,HI:TByteLV; end;
type TProcedureLV=record
LabelLV:TLabelLV;{старт процедуры}EndProc:TLabelLV;end;
type TArrayByteLV=....
type TArrayWordLV=....
type TSpriteLV=....
{Регистры} type TrgA=.... type TrgD=... .........
{Регистровые пары}
type TrpBC=............ type TrpSP=............ type TrpPC=...........
type TENDProc=record end;{RET в макросах}
Var A:TrgA;F:TrgF; B:TrgB;C:TrgC; D:TrgD;E:TrgE; H:TrgH;L:TrgL; mHL:TrgmHL;
Var BC:TrpBC; DE:TrpDE; HL:TrpHL; SP:TrpSP; AF:TrpAF; PSW:TrpPSW; PC:TrpSP;
ENDProc:TENDProc;
...............
А далее написать процедуры с одним названием и "Overload;" для обработки разных типов (данных),
- такого можна "нагородить" что вы даже себе не представляете!
Вот сейчас и обзор сделаю...
Например, принимаем "p" за "плюс" (+)
"городим"...
Quote:
procedure p(Var L1:TByteLV; c:Cardinal);Overload;
procedure p(RgB:TRgB; Var L1:TByteLV; c:Cardinal);Overload;
procedure p(RgC:TRgC; Var L1:TByteLV; c:Cardinal);Overload;
procedure p(Var L1:TByteLV; Var L2:TByteLV; c:Cardinal);Overload;
procedure p(Var W1:TwordLV; c:Cardinal);Overload;
и т.д.
И получается - что хочеш, с чем хочешь (точнее с чем не поленишься написать) сплюсует одна единственная процедура с названием "p".
Так можна делать со всем!
Про "минус", "равно" и прочие арифметические и логические писать не буду, - ежу понятно!
Смотрим далее, чего я еще интересного "нагородил" то в MD02 ...
А как вам такое...
Quote:
procedure Ifis(Var b1:TByteLV; c1:Cardinal; Var l:TLabelGLV);Overload;
procedure Ifis(Var b1:TByteLV; c1:Cardinal; ENDProc:TENDProc);Overload;
procedure Ifis(Var b1:TByteLV; Var b2:TByteLV; Var l:TLabelGLV);Overload;
procedure Ifis(Var b1:TByteLV; Var b2:TByteLV; ENDProc:TENDProc);Overload;
procedure Ifis(Var w:TWordLV; c:Cardinal; Var l:TLabelGLV);Overload;
procedure Ifis(Var w:TWordLV; c:Cardinal; ENDProc:TENDProc);Overload;
Одно название у процедуры-макросы, "разруливает" разные типы.
(процедура аналогично ЕСЛИ_РАВНО_ТО)
Ну и понятно так далее IfisNot, IfMore, IfLess, IfMoreOrIs
А как вам вот такое...
Quote:
procedure CaseOf(Var B1:TByteLV; C1:Cardinal;var L1:TLabelGLV;C2:Cardinal;var L2:TLabelGLV;C3:Cardinal;var L3:TLabelGLV;C4:Cardinal;var L4:TLabelGLV;C5:Cardinal;var L5:TLabelGLV;C6:Cardinal;var L6:TLabelGLV;C7:Cardinal;var L7:TLabelGLV;C8:Cardinal;var L8:TLabelGLV;ELSE_:TLabelGLV);Overload;
Конечно это CaseOf явно отличается по эффективности такой же в Дельфи
Просто заменяется "набором" Ifis , но все таки, удобно.
А такое как вам...
Quote:
procedure ProcABC(Proc1:TProcedureLV;gA:Cardinal;var gB:TByteLV;var gC:TByteLV);Overload;
Вызов процедуры передавая в регистры A,B,C параметры (указанные в параметрах процедуре).
PROCs - вызов нескольких процедур подряд (указанные в параметрах процедуре).
А как вам такое...
Quote:
DrawText($FF,5,4,3,'Л А Б И Р И Н Т 2018'+#0);
Макрос все разрулит! И расположит!
ну такое и подобное не удивительно...
Quote:
Var ArrConstDATALEVELS:array[0..1971+61] of Byte=( $00,$01, $39,$A5,$2F,$7B,$......);
...........
VarArrayByte(abLevels{DATA уровни},'abLevels{DATA уровни}',ArrConstDATALEVELS);
VarByte, VarWord и т.д.
Ну и напоследок самое "вкусное" как по мне...
А как вам такое...
Code:
VarSprite(SPRITE241,'SPRITE241',' ','1','2','3',{Человечек}
'2 2'+
' 233332 '+
' 2222 '+
' 322223 '+
' 322223 '+
' 2222 '+
' 2 33 2 '+
'2 2'
);
Параметры в процедуре, которые "пробел", "1","2","3" задают соответственно цвета 0,1,2,3, далее сам спрайт в виде строки String! "Рисуй" себе спрайты на здоровье, как говорится "не отходя от кассы", причем соответствие символ-цвет вибирай сам!
Далее процедура-макрос VarSprite все сделает как надо!
И это все не фантазии мои! Это всё у меня реально работает!
Подготовлю выложу!
Когда нибудь...