Subversion Repositories NedoOS

Rev

Rev 337 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

фы  Їрщыют ё яхЁхьхээ√ьш ьюцэю ёухэхЁшЄ№ include т ърцфюь
эю эрфю чэрЄ№ ьюфхы№ ярь Єш (тфЁєу эрфю ЁрчфхышЄ№ ъюьрэф√ ш фрээ√х!)

add(mul(px,px),add(mul(py,py),mul(pz,pz))) - ├╦▐╩ (яхЁт√щ add яюыєўрхЄ яхЁт√щ ярЁрьхЄЁ єцх чрЄ╕ЁЄ√ь), ш яЁш уыєсшээ√ї т√чютрї Єюцх

ёфхырЄ№ тыюцхээ√х ёъюсъш т фхЇрщэрї, шэрўх эхы№ч  ЄшяшчшЁютрээ√х -(a/b)

#include "name.h"
фюыцхэ т√фртрЄ№:
include "name.dec"
incobj "name.bin","name.rel" шыш яЁюёЄю incobj "name"
¤Єю ьюцхЄ с√Є№ ы■сюх ьхёЄю шёїюфэшър (т ёЄрЁЄрях шэъы■ф√ т ъюэЎх)
ўЄю хёыш чруюыютюўэ√щ Їрщы тъы■ўрхЄ фЁєующ чруюыютюўэ√щ Їрщы? эшўхую ёЄЁр°эюую, ъръ сєфЄю яюфЁ ф?

ъръ шёяюы№чютрЄ№ юфшэ ш ЄюЄ цх чруюыютюўэ√щ Їрщы фы  юс· тыхэшщ ш шёяюы№чютрэш ? т gcc Єръ эхы№ч ?
extern!=export (т ёш эхЄ export)

ъръ яхЁхфртрЄ№ эєьхЁрЎш■ ьюфєыхщ фы  юсЁр∙хэшщ т юс·хъЄэшъх?
ьюцэю ыш юЄэюёшЄхы№э√щ эюьхЁ яхЁхэєьхЁютрЄ№ т уыюсры№э√щ? (юфшэ ш ЄюЄ цх ьюфєы№ ьюцхЄ с√Є№ тъы■ўхэ т Ёрчэ√х!!!)
эюьхЁ ьюцэю эрчэрўрЄ№ яю яюЁ фъє ъюьяшы Ўшш (фрцх хёыш яхЁхъюьяшышЁютрЄ№ эхшчьхэ╕ээ√щ эх эрфю)
эрфю яхЁхъюьяшышЁютрЄ№ эхшчьхэ╕ээ√щ ьюфєы№, хёыш юэ шёяюы№чєхЄ шчьхэ╕ээ√щ ьюфєы№!!! (¤Єю яюЄюьє ўЄю юэ яЁшт ч√трхЄё  ъ ёьх∙хэш ь т фхъырЁрЎш ї шёяюы№чєхьюую ьюфєы )
фрцх хёыш яЁшт ч√трЄ№ё  эх ъ ёьх∙хэш ь, р ъ эюьхЁрь ёшьтюыют, Єю тёЄртър ЇєэъЎшш яюЄЁхсєхЄ яхЁхъюьяшышЁютрЄ№ тёх ьюфєыш, ъюЄюЁ√х шёяюы№чє■Є хую
ьюцэю юЄ яхЁтюую шчьхэшт°хуюё  яхЁхъюьяшышЁютрЄ№ тёх яюёыхфє■∙шх ьюфєыш
х∙╕ эрфю яхЁхъюьяшышЁютрЄ№ тё╕ яЁш шчьхэхэшш ёЄЁєъЄєЁ√ ёт чхщ ьюфєыхщ

хёыш ¤Єю эх ёфхырЄ№, Єю т ышэъхЁх эрфю ЁрсюЄрЄ№ ё ёшьтюы№э√ьш ьхЄърьш, Єю хёЄ№ ышэъхЁ эх ьюцхЄ ёЄрЄ№ ыюрфхЁюь (эєцэр ярь Є№ яюф ьхЄъш)

ъръющ ёшьтюы ёфхырЄ№ фы  фхъырЁрЎшщ Єшяр metka=<symbol><эюьхЁьюфєы >+<ёьх∙хэшх>?
шыш фЁєующ ЇюЁьрЄ фхъырЁрЎшщ?

рёёхьсыхЁэ√щ Їрщы фюыцхэ чэрЄ№ ётющ эюьхЁ ьюфєы , ўЄюс√ яЁртшы№эю т√уЁєцрЄ№ фхъырЁрЎшш!
эх ёЄЁр°эю, хёыш є рёёхьсыхЁр сєфхЄ ЄюЄ цх ёяшёюъ Їрщыют, ўЄю є ъюьяшы ЄюЁр?
шыш ёяшёюъ Їрщыют ъюьяшы ЄюЁр эш эр ўЄю эх тыш хЄ?




эх ёыхфєхЄ юс·хфшэ Є№ .asm ш .var т юфшэ Їрщы (Є.ъ. шї эрфю ъюьяшышЁютрЄ№ т Ёрчэ√х яЁюёЄЁрэёЄтр)
р шэшЎшрышчшЁютрээ√х яхЁхьхээ√х - х∙╕ юфэю яЁюёЄЁрэёЄтю? ёхщўрё  тэ√ї эхЄ, эю хёЄ№ ъюэёЄрэЄэ√х ьрёёшт√ ш ёЄЁєъЄєЁ√


ьюцэю ёфхырЄ№ єЄшышЄє юўшёЄъш тЁхьхээ√ї Їрщыют - фы  тёхї ЄЁ╕ї юёхщ Ёрчэє■








єёъюЁхэшх ёсюЁъш:
р) єяЁюёЄшЄ№ ъюьяшы ЄюЁ
с1) єёъюЁшЄ№ ЄюъхэшчрЄюЁ
с2) єсЁрЄ№ ЄюъхэшчрЄюЁ
т) ёфхырЄ№ юфэюяЁюїюфэ√щ рёь?
у) єыєў°шЄ№ ъюфюухэхЁрЎш■? эх ЇръЄ, ўЄю ¤Єю єёъюЁшЄ ёсюЁъє
ф) єсЁрЄ№ ёяхЎшЇшўхёъшх яЁюЎхфєЁ√ т ёЄрЁЄря рёьюь (эряЁшьхЁ, rdtword, genautonum)
х) фюсртшЄ№ REGISTER
╕) ЄюъхэшчшЁютрЄ№ эхфюырэу (ъы■ўхт√х ёыютр ш фтющэ√х ёшьтюы√)
ц) ухэхЁшЁютрЄ№ юсц яЁ ью шч эхфюырэур (ё ярЄўрьш)(Єюуфр эхы№ч  рёьютёЄртъш ш рёьюяЁюЎхфєЁ√ - Єюы№ъю рёьюьюфєыш), ёфхырЄ№ ёяхЎшры№э√щ ышэъхЁ шыш ыюрфхЁ







яюёЄЁюхэшх яЁюхъЄр:
т рёёхьсыхЁ яюярфрхЄ сюы№°х Їрщыют, ўхь т ъюьяшы ЄюЁ, Є.ъ. фюсрты ■Єё  х∙╕ ёЄрэфрЁЄэ√х яЁюЎхфєЁ√ єьэюцхэш -фхыхэш  ш Їрщы√ ё яхЁхьхээ√ьш
шыш т рёёхьсыхЁ яюярф╕Є тёхую фтр Їрщыр - ёъыххээ√щ ъюф (ё яЁшъыхштрэшхь ёЄрэфрЁЄэ√ї яЁюЎхфєЁ) ш ёъыххээ√х яхЁхьхээ√х, шыш Єюы№ъю юфшэ ёъыххээ√щ ъюф


хёыш яЁюёЄю тъыхшЄ№ ЄюъхэшчрЄюЁ т ъюьяшы ЄюЁ, Єю юэ сєфхЄ ёыш°ъюь цшЁэ√ь (юёюсхээю яю ьхЄърь)
ьюцэю єсЁрЄ№ шэырщэ рёёхьсыхЁ ш чрёЄрты Є№ шэъы■фшЄ№ ЄюъхэшчшЁютрээ√х рёёхьсыхЁэ√х Їрщы√
Єюуфр ъюьяшы ЄюЁ яЁюёЄю сєфхЄ т√тюфшЄ№ ЄюъхэшчшЁютрээ√щ рёь тьхёЄю ЄхъёЄр

reader сєфхЄ юс∙шщ є ъюьяшы ЄюЁр ш ЄюъхэшчрЄюЁр (ш яюффхЁцштрхЄ ъюььхэЄ√)
Єюуфр reader фюыцхэ яшёрЄ№ ъюььхэЄ т эхЄюъхэшчшЁютрээ√щ рёёхьсыхЁэ√щ ЄхъёЄ ш т ЄюъхэшчшЁютрээ√щ юфшэръютю
шыш эхЄюъхэшчшЁютрээ√щ рёёхьсыхЁэ√щ ЄхъёЄ эх ёє∙хёЄтєхЄ
Єюуфр ъюььхэЄрЁшш/ю°шсъш Єюцх фюыцэ√ юс ¤Єюь чэрЄ№! ЄюъхэшчшЁютрЄ№ ъюььхэЄрЁшш/ю°шсъш эр єЁютэх emitter?
(ъюьяшы ЄюЁ ьюцхЄ эх т√тюфшЄ№ ю°шсъш т ferr, р т√тюфшЄ№ яЁ ью т рёь)








ЄшяэюёЄ№ ьюцэю єсЁрЄ№ т _istype (юсэєы Є№ яЁш ёЄрЁЄх ш яюёых ЄрщяърёЄр)

Ёрэ№°х эх с√ыю чрЁхчхЁтшЁютрээ√ї ёыют
ёхщўрё чрЁхчхЁтшЁютрэ√ ёыютр:
- default (ьюцэю ЁрчЁхчхЁтшЁютрЄ№, эю Єюуфр 1. эхы№ч  яюыєўшЄ№ єърчрЄхы№ эр ьхЄъє (т gcc юёюср  ъюьрэфр &&labelname?), [2. яюы№чютрЄхы№ёъшх ьхЄъш яхЁхёхъєЄё  ё ртЄюьхЄърьш (эю ьюцэю фюсртшЄ№ эх юфэє Єюўъє, р фтх)])
- TRUE, FALSE (хёыш сєфхЄ include, Єю ьюцэю юяЁхфхышЄ№, эю ёрь Єшя BOOL ыєў°х эх юяЁхфхы Є№ - юэ эєцхэ т if, while, repeat)
- шьхэр срчют√ї Єшяют - р юэш эх ёююЄтхЄёЄтє■Є чрЁхчхЁтшЁютрээ√ь ёш°э√ь шьхэрь!
(рёёхьсыхЁэ√х ъюьрэф√ тЁюфх ъръ эх чрЁхчхЁтшЁютрэ√, Є.ъ. шь  ьхЄъш яЁютхЁ хЄё  т эрўрых ёЄЁюъш)


ўЄюс√ чряюыэшЄ№ ъюэёЄрэЄэє■ ёЄЁєъЄєЁє, эрфю уфх-Єю тч Є№ ёяшёюъ яюыхщ
шыш ърцфюх яюых сєфхЄ т√фхы Є№ё  яю ЁрчьхЁє эряшёрээюую Єрь чэрўхэш  (ўЁхтрЄю срурьш)
чрЄю ьюцэю юс·хфшэшЄ№ ё ьрёёштюь
эю ёхщўрё эхы№ч  юяЁхфхышЄ№ °шЁшэє Єшяр яю tword - юэр юяЁхфхы хЄё  яю Єшяє ьрёёштр


todo:
т ёЄЁєъЄєЁх яюых Єшяр ьрёёшт
яхЁхфхырЄ№ &arr[] т &(arr[]) фы  єяЁю∙хэш ?


;фы  Єръюую (call...=...define) эх їтрЄрхЄ фтєї яЁюїюфют, ш ю°шсър эх яш°хЄё 
closewrite=fclosewrite
closewrite.A.=fclosewrite.A.
        EXPORT closewrite
        EXPORT closewrite.A.
...
EXPORT PROC fclosewrite(PBYTE file)
{
  fclose(file);
}


т рёьх фюсртшЄ№ LIMIT addr, яЁш фюёЄшцхэшш ¤Єюую рфЁхёр т√тюфшЄ№ ю°шсъє limit

todo яЁютхЁшЄ№ чэръютюх ёЁртэхэшх

todo яЁютхЁшЄ№ т ЄюъхэшчрЄюЁх, ёЄртшЄё  ыш LF яхЁхф ю°шсъющ т эрўрых ёЄЁюъш (яЁш юЄырфъх Thumb т√ыхчыю)

т ╤ш яюьхўр■Єё  эх int, р uint (1U)

т ╤ш яюьхўрхЄё  эх export, р ыюъры№эюёЄ№ (const - фы  ЇєэъЎшщ, яю ъЁрщэхщ ьхЁх)

єърчрЄхыш FAR, NEAR, HUGE - уфх тч Є№ юсЁрчЎ√ шёїюфэшъют т Єръюь ёЄшых?
т C++ юёюс√щ єърчрЄхы№ эр ЇєэъЎш■-ўыхэ ъырёёр, їЁрэшЄ Єръцх this

т ╤ш limits.h ёюфхЁцшЄ INT_MAX, CHAR_BIT шЄя


a >> n, a << n, p + n (т ╤ш) - эх рыухсЁршўхёъшх юяхЁрЎшш, Є.ъ. шї юяхЁрэф√ Ёрчэюую Єшяр
-a (т NedoLang), p - p (т ╤ш), ёЁртэхэш  - эх рыухсЁршўхёъшх юяхЁрЎшш, Є.ъ. шї Ёхчєы№ЄрЄ фЁєуюую Єшяр


15 nesting levels for #included files limit
#include nesting
Commentary
This limit makes no distinction between system headers and developer-written header files. However, an
implementation is required to support its own system headers whose contents are defined by the standard. If
a particular implementation chooses to use nested #includes, then it is responsible for ensuring that these
do not prevent a translator from meeting its obligations with regard to this limit.
Use of nested #includes requires that the source file containing each of the #include directive be kept
open, while the included file is processed. Supporting 15 nesting levels invariably requires keeping at least
17 (the top-level source file and the file holding the generated code also need to be counted) files open
simultaneously. Using the fsetpos library function to record the current file position, at the point the fsetpos
function
#include occurs, and closing the current file before opening the nested include is possible; however, your
author has never heard of an implementation that uses it.
...
C90
8 nesting levels for #included files
cbook1_0b

C90
257 case labels for a switch statement (excluding those for any nested switch statements)
The intent here was to support switch statements that included 256 unsigned character values plus EOF 1737 switch
statement
(usually implemented as -1).
cbook1_0b


сру:
////////////
CONST PBYTE tasks;

PROC importtasks(PBYTE tasks)
{
}

PROC main()
{
  importtasks(tasks);
}
///////////
nolbl main.tasks
эрфю ЄрсышЎє рфЁхёют ъюЁюЄъшї ыюъры№э√ї ьхЄюъ


TODO т рёьх ыюъры№э√х ьхЄъш яЁюЎхфєЁ .label (ъюьяшы Єё  ъръ title.label)
эютр  ьхЄър чруюыютър юяЁхфхы хЄё  т ъюьрэфх PROC
(ьюцэю яю єьюыўрэш■, эю ¤Єю чрьхфышЄ)

TODO CY тьхёЄю C

TODO яЁютхЁшЄ№ DB "string",'c',0x00


фы  ╬╬╧ эєцэю (фрцх схч is-a, Єюы№ъю ё has-a):

- ъръ єчэрЄ№ ЁрчьхЁ юс·хъЄр, фрцх хёыш юэ Єюўэю шьххЄ эєцэ√щ шэЄхЁЇхщё?
???
юЄфхы№э√щ шэЄхЁЇхщё size шыш фрцх copyable? шыш фрцх listable?
шыш тёх юс·хъЄ√ ёяшёър юфэюую ЁрчьхЁр (ёюфхЁцрЄ Єюы№ъю шэЄхЁЇхщё√), р юёюср  ўрёЄ№ ърцфюую ъырёёр сєфхЄ т юЄфхы№эюь сыюъх ярь Єш? (р ъръ Єюуфр ъыюэшЁютрЄ№ юс·хъЄ√? ўхЁхч шэЄхЁЇхщё copyable?)

- ъръ юсЁрЄшЄ№ё  ъ эєцэюьє шэЄхЁЇхщёє, хёыш юэ т юс·хъЄх ьюцхЄ ЁрёяюырурЄ№ё  т Ёрчэ√ї ьхёЄрї? (р юэ ьюцхЄ - шэЄхЁЇхщёют ьюцхЄ с√Є№ Ёрчэюх ўшёыю). шч ёяшёър ь√ яюыєўрхь ъръющ-Єю ёЇхЁшўхёъшщ юс·хъЄ, т ъюЄюЁюь эрфю Єюы№ъю эрщЄш шэЄхЁЇхщё√, р шэЄхЁЇхщё√ єцх эрёЄЁюхэ√ т ¤Єюь ¤ъчхьяы Ёх эр эєцэє■ ЁхрышчрЎш■ (ъюэёЄЁєъЄюЁюь). ъръ эрщЄш т юс·хъЄх эєцэ√х шэЄхЁЇхщё√ яю шьхэш?
яєёЄ№ фрцх эхы№ч  сєфхЄ фюсрты Є№ шэЄхЁЇхщё√ т юс·хъЄ√ юфэюую ёяшёър - є тёхї юс·хъЄют ёяшёър сєфхЄ юфшэ ёяшёюъ шэЄхЁЇхщёют. Єюуфр эрфю, ўЄюс√ тёх шэЄхЁЇхщё√ (шыш ёё√ыъш эр эшї) с√ыш тъы■ўхэ√ т эрўрыю ёЄЁєъЄєЁ√.
ъръ ¤Єю ъюэЄЁюышЁютрЄ№  ч√ъюь? ьюцэю ёфхырЄ№ юфшэ шэЄхЁЇхщё "Ёрёяшэютър", тъы■ўр■∙шщ тёх эєцэ√х шэЄхЁЇхщё√? Єшяр
obj1->visualobject->viewable->View(obj1->visualobject->viewable)
шыш
(VisualObject)obj1->viewable->View(obj1) - ъръ ¤Єю эр ═хфюырэух???
шыш
CALL (VisualObject)obj1->viewable->view(obj1) - Єръ эхы№ч  тхЁэєЄ№ чэрўхэшх!
шыш
result = Viewable_View(obj1->visualobject->viewable) //Viewable - яЁюёЄЁрэёЄтю шь╕э
ъръ ъюЁюўх???
р ъЁюьх ¤Єюую т obj1 сєфхЄ Єюы№ъю obj1->data ё яЁюшчтюы№э√ь ёЄЁєъЄєЁэ√ь Єшяюь, ўЄюс√ эх ёўшЄрЄ№ ЁрчьхЁ?
ъръ ъюэЄЁюышЁютрЄ№, ўЄю ь√ эрёЄЁюшыш тёх шэЄхЁЇхщё√ эр эєцэє■ ЁхрышчрЎш■ т ъюэёЄЁєъЄюЁх? (хёыш юэш яю єърчрЄхы■, Єю фы  ¤Єюую эрфю х∙╕ шї ёючфрЄ№! шыш эх ёючфртрЄ№, хёыш ъюэёЄЁєъЄюЁ ё ярЁрьхЄЁюь-юс·хъЄюь) (╤++ эх ъюэЄЁюышЁєхЄ, эю тЁюфх ьюцхЄ ёрь т√чтрЄ№ тёх фхёЄЁєъЄюЁ√, ъ Єюьє цх ёрь эрчэрўрхЄ тшЁЄєры№э√х ЇєэъЎшш)

- ъръ т√чтрЄ№ ъюэёЄЁєъЄюЁ ш фхёЄЁєъЄюЁ? шї єърчрЄхыш Єюцх фюыцэ√ с√Є№ т ЇшъёшЁютрээюь ьхёЄх ёЄЁєъЄєЁ√, эю эх ьюуєЄ с√Є№ т obj1->data, Є.ъ. data ёючфр╕Єё  т ъюэёЄЁєъЄюЁх. юэш эх ьюуєЄ с√Є№ ш т obj1->visualobject яю Єющ цх яЁшўшэх. эю ьюуєЄ с√Є№ т obj1.visualobject (хёыш тыюцхээ√х ёЄЁєъЄєЁ√), эю Єюуфр тёх visualobject сєфєЄ юфшэръют√х, ўЄю ь√ эх їюЄшь
т√ч√трЄ№ ъюэёЄЁєъЄюЁ ъръ яЁюёЄє■ ЇєэъЎш■, р эх ъръ ьхЄюф ъырёёр?

- ъръ яхЁхфрЄ№ ярЁрьхЄЁ√ т ъюэёЄЁєъЄюЁ, хёыш юэ яю єърчрЄхы■?
т√ч√трЄ№ ъюэёЄЁєъЄюЁ ъръ яЁюёЄє■ ЇєэъЎш■, р эх ъръ ьхЄюф ъырёёр?
Єшяр
typedef <ЇєэъЎш , тючтЁр∙р■∙р  object*> Func;

STRUCT IVisualObject{
  IViewable* viewable; //Єрь Proc View
  ICopyable* copyable; //Єрь size ш Func Copy
  IListable* listable; //Єрь Func Prev ш Func Next???
};

STRUCT VisualObject{ //юсЁрчхЎ яюфъырёёр visualobject, шёяюы№чєхь√щ фы  їЁрэхэш  т ёяшёърї ш Є.я.
  IVisualObject* visualobject;
};

STRUCT Button{
  IVisualObject* visualobject;
  ... //data for Button
};
VAR [STRUCT] Button* btOK = CreateButton(10,10,100,100,"OK",&OnClickOK);
//ьюцэю Єшя VisualObject* тьхёЄю Button*
...
destroyButton(btOK);
эрфю т√ч√трЄ№ шч ъюэёЄЁєъЄюЁр юс·хъЄр ъюэёЄЁєъЄюЁ "Ёрёяшэютъш" ё эєцэ√ьш ярЁрьхЄЁрьш - Єръ ьюцэю яЁютхЁшЄ№, ўЄю эх яЁюяєёЄшыш эш юфэющ шэшЎшрышчрЎшш шэЄхЁЇхщёют (їюЄ  яюър ═хфюырэу эх яЁютхЁ хЄ ўшёыю ярЁрьхЄЁют). Єшяр Єръ:

FUNC Button* createButton(...) //ьюцэю Єшя VisualObject* тьхёЄю Button*
{
VAR [STRUCT] Button* obj;
  obj = newStruct(+sizeof(Button));
  //obj->size = +sizeof(Button);
  obj->VisualObject = createVisualObject(..., obj/**фы  copyable*/, +sizeof(Button)/**фы  copyable*/, &ButtonView/**фы  viewable*/);
  obj->... = ... //data for Button
RETURN obj;
}

- ъръ яхЁхфртрЄ№ ярЁрьхЄЁ√ т тшЁЄєры№э√х ьхЄюф√?
т ═хфюырэух эхЄ яхЁхфрўш яю ёЄхъє
ўшЄрЄ№ шч шьхэютрээ√ї ярЁрьхЄЁют яЁююсЁрчр тшЁЄєры№эющ ЇєэъЎшш? юэш эхфюёЄєяэ√ шч  ч√ър! р ъръ шї яхЁхфрЄ№ т яЁююсЁрч, яЁш ¤Єюь т√чтрЄ№ тшЁЄєры№эє■ ЇєэъЎш■? ёрь яЁююсЁрч сєфхЄ т√ч√трЄ№?

╩ыюэшЁютрэшх тшчєры№эюую юс·хъЄр (т Єюь ўшёых ъыюэшЁютрэшх фрээ√ї яю єърчрЄхы ь??? т Qt Єръ эхы№ч  Ёрфш ЁхЇыхъёшш ш шхЁрЁїшш ¤ъчхьяы Ёют):
obj2 = obj1->visualobject->copyable->Copy(obj1)???
obj фюыцхэ с√Є№ яЁштхф╕э ъ Єшяє VisualObject*!!! ёЁрчє тё╕ їЁрэшЄ№ ъръ VisualObject*, р эх Button*?


FUNC UINT Viewable_View(Viewable* viewable, UINT par1)
{
  _par1 = par1;
  CALL viewable->View(); //ўшЄрхЄ _par1, тючтЁр∙рхЄ _res
RETURN _res;
}
ъръ с√ ёфхырЄ№ т ═хфюырэух, ўЄюс√ т√ч√трЄ№ ЇєэъЎш■ ё Ёхчєы№ЄрЄюь яю єърчрЄхы■?
т ёш°эшъх рф: ((<Єшя>(*)(void))(pfunc))()
+call(pfunc) эхы№ч , хёыш тючтЁр∙рхь єърчрЄхы№

ъръ т ёш°эшъх юяЁхфхышЄ№ Єшя PROC? (¤Єю ъюуфр єсхЁ╕ь ёыютю PROC т яЁюЎхфєЁрї)

шчсртшЄ№ё  ёЁрчє юЄ чт╕чфюўхъ т Єшярї чр ёў╕Є фюяюыэшЄхы№эюую typedef?

ъръ шчсртшЄ№ё  юЄ тёЄртъш ->visualobject?
ьюцэю эрёыхфютрЄ№ ёЄЁєъЄєЁє юЄ "Ёрёяшэютъш" IVisualObject (фы  ¤Єюую эрфю сєфхЄ ёъюяшЁютрЄ№ тёх яюы  IVisualObject т эр°є ёЄЁєъЄєЁє), Єюуфр "Ёрёяшэютър" сєфхЄ ыхцрЄ№ т эрўрых
ьюцэю Єєяю:
STRUCT VisualObject{ //юсЁрчхЎ яюфъырёёр visualobject, шёяюы№чєхь√щ фы  їЁрэхэш  т ёяшёърї ш Є.я.
#include "visualobject.h" //эрўшэър ёЄЁєъЄєЁ√ "Ёрёяшэютъш" схч юс╕ЁЄъш
};
STRUCT Button{
#include "visualobject.h" //эрўшэър ёЄЁєъЄєЁ√ "Ёрёяшэютъш" схч юс╕ЁЄъш
  ... //data for Button
};
Єюы№ъю ═хфюырэу эх єьххЄ шэъы■ф√ тэєЄЁш ёЄЁєъЄєЁ√!!!
ш эх єьххЄ ьръЁюё√ фхЇрщэрьш!!!
???
шёяюы№чєхь тхчфх яЁюЎхфєЁ√ VisualObject_...(object), уфх юс·хъЄ шьххЄ Єшя "юсЁрчЎр эрёыхфэшър шэЄхЁЇхщёр", Єюуфр ь√ эх єтшфшь Єръшї тёЄртюъ ->visualobject эшуфх эш т ЁхрышчрЎшш Button, эш т шёяюы№чютрэшш

яЁюсыхьр ё Ёрёяшэютъющ:
є ърцфюую тшчєры№эюую ъюьяюэхэЄр ётю  Ёрёяшэютър!
шыш ьюцэю фюсртшЄ№ ьхЄюф√ ш фрээ√х тэх Ёрёяшэютъш? яю Ёрёяшэютъх юсЁр∙рхЄё  юё№, р яю юЄфхы№э√ь ьхЄюфрь - ЇюЁьр


STRUCT Button{
  IVisualObject* visualobject;
  //data for visible
  BOOL visible;
  UINT left;
  UINT top;
  UINT width;
  UINT height;
  //data for listable
  List* head;
  Button* prev; //TODO ъръ listable сєфхЄ т эшї шёърЄ№ ётюш яюы  ш ётющ шэЄхЁЇхщё?
  Button* next;
  //data for Button
  PBYTE onclick; //todo PROC
  PCHAR text; //todo STRING
};

PROC VisualObject_View([STRUCT] VisualObject* object) //¤ЄюЄ ярЁрьхЄЁ - эх шэЄхЁЇхщё, р юсЁрчхЎ яюфъырёёр
{
  _this = object;
  CALL object->visualobject->viewable->view;
}

FUNC [STRUCT] VisualObject* VisualObject_Copy([STRUCT] VisualObject* object) //¤ЄюЄ ярЁрьхЄЁ - эх шэЄхЁЇхщё, р юсЁрчхЎ яюфъырёёр
{
  _this = object;
  CALL object->visualobject->copyable->copy;
}

PROC Button_View()
{
  ... _this->left, _this->top, _this->width, _this->height ...
  ... _this->text
}

FUNC [STRUCT] VisualObject* Button_Copy()
{ //ъэюяър эшўхую эх ёючфр╕Є, яю¤Єюьє ъюяшЁєхЄё  ыхуъю
//TODO тъышэшЄ№ё  т Ўхяюўъє prev,next
RETURN ([STRUCT] VisualObject*)getmem_copy(+sizeof(Button), _this);
}

//ёЄрЄшўхёъюх ёючфрэшх
//TODO эєцэ√ ыш ...able? юэш ёрьш яю ёхсх эшўхую эх фхыр■Є ш эх чр∙ш∙р■Є
//viewable ш clickable  тэю юЄэюё Єё  ъ visualobject
//listable ьюцэю т√фхышЄ№, хёыш Єрь сєфєЄ ёьх∙хэш  фю prev,next, р ЇєэъЎшш GetPrev, GetNext, GetHead, GetSize, IsEmpty, Add, Remove тёхуфр юфшэръют√х
//copyable юярёэю, яюЄюьє ўЄю ёхьрэЄшър эх ёэр (ъюяшЁютрЄ№ ыш тыюцхээ√х юс·хъЄ√?). ўЄюс√ ъырёЄ№ т ъюэЄхщэхЁ, фюёЄрЄюўэю эрёыхфютрЄ№ шэЄхЁЇхщё listable ш Є.я. ьюцэю фрцх эхъюы№ъю Ёрч, хёыш фрээ√х яЁю°шЄ√ ьэюушьш ёё√ыърьш
CONST [STRUCT] IViewable buttoniviewable{
  &Button_View
};
CONST [STRUCT] ICopyable buttoncopyable{
  &Button_Copy //фюыцэр чэрЄ№ +sizeof(Button) ш ўЄю ыш°эхую ёючфртрЄ№ (р эрфю ыш ъюуфр-эшсєф№ ёючфртрЄ№ ыш°эхх?)
};
CONST [STRUCT] IListable buttonlistable{
  &Button_Prev, //фюыцэр чэрЄ№, уфх ыхцшЄ prev (ЄєЄ эхы№ч , Ёрчтх ўЄю ёьх∙хэшх - Є.ъ. фы  тёхї ъэюяюъ) //эю ёьх∙хэшх эхы№ч  яюыєўшЄ№ т ъюэёЄрэЄэюх т√Ёрцхэшх???
  &Button_Next //фюыцэр чэрЄ№, уфх ыхцшЄ next (ЄєЄ эхы№ч , Ёрчтх ўЄю ёьх∙хэшх - Є.ъ. фы  тёхї ъэюяюъ) //эю ёьх∙хэшх эхы№ч  яюыєўшЄ№ т ъюэёЄрэЄэюх т√Ёрцхэшх???
};
CONST [STRUCT] IClickable buttonclickable{
  &Button_Click
};
CONST [STRUCT] IVisualObject buttonvisualobject{
  &buttonviewable, //Єрь Proc View
  &buttoncopyable, //Єрь Func Copy (юэр чэрхЄ +sizeof(Button)) //р эєцэр ыш?
  &buttonlistable, //Єрь Func Prev ш Func Next //шыш ёьх∙хэш  фю head,prev,next???
  &buttonclickable
};
CONST [STRUCT] Button btOK{
  &buttonvisualobject, //эхы№ч  Ёрёяшэютъє ъэюяъш (юэр юфшэръютр  фы  тёхї ъэюяюъ) тъы■ўрЄ№ т ёрьє юс∙є■ ёЄЁєъЄєЁє
  &onClickOK, //onclick
  &listhead, //head (Єрь size, ёё√ыър эр Ёхры№э√щ head ш ёё√ыър эр ЁюфшЄхы  яЁюшчтюы№эюую Єшяр?)
  &btOK, //prev
  &btOK, //next
  10, //left
  10, //top
  100, //width
  100, //height
  "OK" //text
};

//фшэрьшўхёъюх ёючфрэшх
VAR [STRUCT] VisualObject* btOK = Button_Create(10,10,100,100,"OK",&vbutton,&onClickOK);
//TODO тЁєўэє■ яЁшт чрЄ№ prev, next, Є.ъ. эхы№ч  яЁшт чрЄ№ шї тёх фЁєу ъ фЁєує т ъюэёЄЁєъЄюЁх (next єърч√трхЄ эр сєфє∙шщ юс·хъЄ!)
...
//VisualObject_View(btOK->ivisualobject, btOK); //тю тёхї эєцэ√ї шэЄхЁЇхщёрї єцх ёЄю Є єърчрЄхыш эр ЁхрышчрЎшш, р т эшї эєцэ√ єърчрЄхыш эр яюы  Button!
//CALL btOK->visualobject->viewable->view(btOK); //эх эрфю чэрЄ№, ўЄю ¤Єю ъэюяър, ¤Єю яЁюёЄю юсЁрчхЎ яюфъырёёр visualobject
VisualObject_View(btOK);
...
//CALL btOK->visualobject->clickable->click(btOK);
VisualObject_Click(btOK);
...
Button_Destroy(btOK);


ьюцэю яхЁхфртрЄ№ ярЁрьхЄЁ√ ўхЁхч срщЄ√ яхЁхф чруюыютърьш ЇєэъЎшщ
(эхЁхъєЁёштэю, эхЁххэЄхЁрсхы№эю, эх фы  ╧╟╙, эхёютьхёЄшью ё iofast ш фЁ.)