Subversion Repositories NedoOS

Rev

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

ъръ ЇюЁтрЁфшЄ№ яхЁхьхээ√х: шуэюЁшЁютрЄ№ юфшэръют√х - ёютьхёЄшью ё ╤ш
ъръ ЇюЁтрЁфшЄ№ ъюэёЄрэЄ√??? сЁрЄ№ яюёыхфэ■■ (ьюцэю ш ъръ ьхЄъє, ш ъръ яхЁхьхээє■). эх ёЁрсюЄрхЄ, хёыш рёёхьсышЁєхь яю ўрёЄ ь, ёЁрсюЄрхЄ, хёыш рёёхьсышЁєхь тё╕ т ъєўє
рёёхьсыхЁ фюыцхэ ёъыхшЄ№:
1. ьюфєы№ эх тэ√ї ьрЄхьрЄшўхёъшї ЇєэъЎшщ (ъюьяшы ЄюЁє эх эєцэю, эю ъюфюухэхЁрЄюЁ яюфъыхштрхЄ эєцэ√щ? шыш ёъЁшяЄ ъюьяшы Ўшш ьхэ хЄё  т чртшёшьюёЄш юЄ ЄрЁухЄр?) - яюфъы■ўрЄ№ т ъюэЎх, ўЄюс√ с√ыш Єюы№ъю шёяюы№чєхь√х яЁюЎхфєЁ√
2. чруюыютюўэ√щ Їрщы ╬╤ (ъюьяшы ЄюЁє эх эєцэю, яЁю ¤ЄюЄ Їрщы чэрхЄ Єюы№ъю ёъЁшяЄ ъюьяшы Ўшш яюф фрээ√щ ЄрЁухЄ!!!)
3. ьюфєы№ чряєёър? шыш фтр - эрўрыю ш ъюэхЎ? (ъюьяшы ЄюЁє эх эєцэю, Єю цх!!!)
4. ъюф + ъюф + ъюф...
5. яхЁхьхээ√х + яхЁхьхээ√х + яхЁхьхээ√х...
6. ёЄЁюъш + ёЄЁюъш + ёЄЁюъш...

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




т ъюьяшы ЄюЁх
ўЄюс√ эх с√ыю ъюэЇышъЄр яЁюёЄЁрэёЄт шь╕э ёю ёЄЁєъЄєЁрьш, яшёрЄ№ яЁюёЄЁрэёЄтр шь╕э ўхЁхч '@' тьхёЄю '.'?
шыш эр ърцфюь ёыютх яЁютхЁ Є№, эх ёЄЁєъЄєЁр ыш? ¤Єю ЄюЁьюч











ъюэёЄрэЄ√ шёяюы№чютрЄ№ ё ъръшь-Єю яЁхЇшъёюь, ўЄюс√ юэш яюэшьрышё№ эх ъръ яхЁхьхээ√х, р ъръ ўшёыр (юс· тыхээ√х т√°х ъръ equ)
ъръшх трЁшрэЄ√?
+(const type)ccc
&ccc эх сєфхЄ ЁрсюЄрЄ№, Є.ъ. ¤Єю фр╕Є Єшя єърчрЄхы , эєцхэ ЄрщяърёЄ
-+-ccc
+GETCONST ccc
+GETCONST(ccc)
+ccc (ъръ єчэрЄ№ Єшя? ёхщўрё Єрь boolean) - сЁрЄ№ шч ЄрсышЎ√ яхЁхьхээ√ї? ш фы  boolean Єюцх? хёыш эхЄ т ЄрсышЎх - Єю фюыцхэ с√Є№ enum, р эх boolean?
+_ccc (ёхщўрё byte)
?ъръющ-Єю эют√щ ёшьтюы??? ъръ ёфхырЄ№ ёютьхёЄшьюёЄ№?
яЁю∙х ъюэёЄрэЄє юЄышўрЄ№ юЄ яхЁхьхээющ яю Єшяє т ЄрсышЎх яхЁхьхээ√ї, Єрь цх Єшя√ ЇєэъЎшщ ш яёхтфюшь╕э ярЁрьхЄЁют ЇєэъЎшш

ъръющ яЁхЇшъё ёфхырЄ№ фы  ЁхушёЄЁют√ї яюфёърчюъ ъюьяшы ЄюЁє?
+(regfast1 type)ccc
+REGFAST1 ccc
+REGFAST1(ccc)
ЁхушёЄЁют√х яюфёърчъш т ыхтющ ўрёЄш яЁшётрштрэш  їюЄхыюё№ с√ Єръшх цх, р Єрь ЄрщяърёЄ (ёъюсъш) эхы№ч 
+ Єрь Єюцх эхы№ч !!! Єю хёЄ№ эх юЄышўшЄ№ юЄ юс√ўэющ яхЁхьхээющ!!!
Єюуфр эрфю яюфёърчъє (схч яы■ёр) яшёрЄ№ яхЁхф LET
шыш яюфёърчъє їЁрэшЄ№ т Єшях (ёшы№эю юуЁрэшўхээюх ўшёыю яюфёърчюъ)

ўр∙х тёхую ЁхушёЄЁ√ эєцэ√ т inc, dec, peek, poke, яхЁхфрўх ярЁрьхЄЁют

Єшя√:
byte
char (letter? sym?)
flag (bool?)
int (s16? singed?)
uint (u16? unsigned?)
INT (s32? long???)
UINT (u32? ulong???)

#const ш #eval эрфю яЁхяЁюЎхёёюЁюь
#include Єюцх
#if (Єюы№ъю яю ъюэёЄрэЄэюьє Їырує) Єюцх
define(<command>[<text>]) фюыцхэ ухэхЁшЁютрЄ№ юяЁхфхыхэш , ъюЄюЁ√х яюфёЄрты ■Єё  т ЄхъёЄ ё яюью∙№■ яЁхЇшъёр эр єЁютэх readcommand (ўЄюс√ эх шёърЄ№ ёютярфхэш  эр ърцфюь ёыютх)
т юЄышўшх юЄ ёш°эюую яЁхяЁюЎхёёюЁр, эрфю ёфхырЄ№ яЁхяЁюЎхёёюЁ эх яюёЄЁюўэ√щ, р ЄхЁяшь√щ ъ яхЁхтюфрь ёЄЁюъш (эряЁшьхЁ, тёх ярЁрьхЄЁ√ т ёъюсърї)
Єръ ьюцэю тъы■ўшЄ№ яЁхяЁюЎхёёюЁ т юёэютэющ Ўшъы ярЁёхЁр
include?("filename.ned")
const?(a=[const])
ifconst?(a)command~command


хёыш ъюьяшы ЄюЁ яш°хь эр хую цх  ч√ъх:
ъръ ЁхрышчютрЄ№ ¤ЇЇхъЄштэ√щ яюфёюё шч єърчрЄхы  ш т√яы╕т√трэшх т єърчрЄхы№? рёьютёЄртърьш?
шыш ЁхчхЁтшЁютрЄ№ ЁхушёЄЁ√ яюф cin ш cout эр єЁютэх  ч√ър? эряЁшьхЁ, hl', de'
ўЄюс√ ЁрсюЄрЄ№ ё сюы№°шь ўшёыюь Їрщыют, яхЁхфртрЄ№ Їрщы√ т яЁюЎхфєЁ√ ъръ яюЄюъш?
эрь эєцэю тїюф, т√їюф, яюЄюъ ю°шсюъ, ыюу? - фюёЄєяэ√х тхчфх?

т ЄєЁсюярёърых ЁрчсюЁ ъы■ўхт√ї ёыют шф╕Є Єръ:

GetTYPE:
        call    GetSimpTYPE     ; Test simple type
        ret     z
        call    FindStr         ; Skip PACKED
        dw      $PACKED
        call    ..ARRAY         ; Check ARRAY
        ret     z
        call    ..RECORD        ; Check RECORD
        ret     z
        call    ..SET           ; Check SET
        ret     z
        call    ..PTR           ; Check ^
        ret     z
        call    ..FILE          ; Check FILE
        ret     z
        call    ..STRING        ; Check STRING
        ret     z
        call    ..SCALARE       ; Test SCALARE ()
        ret     z
        call    ..RANGE         ; Test RANGE ..
        ret     z
        call    ERROR           ; Type declaration expected
        db      _TypeExp 
...     
..ARRAY:
        call    FindStr         ; Check ARRAY
        dw      $ARRAY
        ret     nz              ; .. nope
        call    MustOpen        ; Verify [ 
...
Єю хёЄ№ шф╕Є яЁ ьр  яЁютхЁър тёхї ёЄЁюъ, яЁшў╕ь эр уыєсюъюь єЁютэх т√чютр ш ё т√їюфрьш шч ёхЁхфшэ√





<var>[<expr>]
  ъюьяшышЁютрЄ№ т яюёыхфютрЄхы№эюёЄ№:
   cemitpushnum; //тьхёЄю pushvar
read_compile_expression; //эр т√їюфх шч expression єцх яЁюўшЄрэр ')', эю ёыхфє■∙шщ ёшьтюы шыш ъюьрэфр эх яЁюўшЄрэ√
readcommand; //ўЄюс√ шьхЄ№ symbol эр т√їюфх value
cemitarrayshift(typesize); //!!! ъюьяшы ЄюЁ эх чэрхЄ ЁрчьхЁ Єшяр, хую ьюцхЄ яЁюўшЄрЄ№ commands шч asm
cemitadd;
   cemitpeek;

тёх ЁрчьхЁ√ ьрёёштр юъЁєуы Є№ фю 2^n?
ь√ эх ьюцхь ¤Єю фхырЄ№ схч т√ўшёыхэш  ъюэёЄрэЄ!

ё фтєьхЁэ√ь ьрёёштюь:
<var>[<expr>][<expr>]
ъюьяшышЁютрЄ№ т яюёыхфютрЄхы№эюёЄ№:
   cemitpushnum; //тьхёЄю pushvar
read_compile_expression; //эр т√їюфх шч expression єцх яЁюўшЄрэр ')', эю ёыхфє■∙шщ ёшьтюы шыш ъюьрэфр эх яЁюўшЄрэ√
readcommand; //ўЄюс√ шьхЄ№ symbol эр т√їюфх value
cemitarrayshift(typesize); //!!! ъюьяшы ЄюЁ эх чэрхЄ ЁрчьхЁ Єшяр, хую ьюцхЄ яЁюўшЄрЄ№ commands шч asm
cemitadd;
 readcommand; //skip '('
 read_compile_expression; //эр т√їюфх шч expression єцх яЁюўшЄрэр ')', эю ёыхфє■∙шщ ёшьтюы шыш ъюьрэфр эх яЁюўшЄрэ√
 readcommand; //ўЄюс√ шьхЄ№ symbol эр т√їюфх value
 cemitarrayshift(typesize+arraysize); //!!! ъюьяшы ЄюЁ эх чэрхЄ ЁрчьхЁ Єшяр, хую ьюцхЄ яЁюўшЄрЄ№ commands шч asm
 cemitadd;
   cemitpeek;

шыш:
   cemitpushnum; //тьхёЄю pushvar
read_compile_expression; //эр т√їюфх шч expression єцх яЁюўшЄрэр ')', эю ёыхфє■∙шщ ёшьтюы шыш ъюьрэфр эх яЁюўшЄрэ√
readcommand; //ўЄюс√ шьхЄ№ symbol эр т√їюфх value
 readcommand; //skip '('
 read_compile_expression; //эр т√їюфх шч expression єцх яЁюўшЄрэр ')', эю ёыхфє■∙шщ ёшьтюы шыш ъюьрэфр эх яЁюўшЄрэ√
 readcommand; //ўЄюс√ шьхЄ№ symbol эр т√їюфх value
 cemitarrayshift(arraysize); //!!! ъюьяшы ЄюЁ яюър эх чэрхЄ ЁрчьхЁ ьрёёштр!!! (юэ яхЁхфр╕Єё  ъръ ёЄЁюъютр  ъюэёЄрэЄр [const])
 cemitadd;
cemitarrayshift(typesize); //!!! ъюьяшы ЄюЁ эх чэрхЄ ЁрчьхЁ Єшяр, хую ьюцхЄ яЁюўшЄрЄ№ commands шч asm
cemitadd;
   cemitpeek;


ёфхырЄ№ [const] ъръ Ёрёў╕Є ъюэёЄрэЄ√ шч ўшёхы ш ъюэёЄрэЄ?
юЄфхы№эющ уЁєяяющ expression шыш яюяЁюсютрЄ№ чрёєэєЄ№ т Єющ цх? (т ърцфющ юяхЁрЎшш тхЄър яю ёяхЎЄшяє, р т value ўшЄрЄ№ ўшёыр т фЁєуюь Ёхцшьх, ўЄюс√ с√ы ёяхЎЄшя ш чэрўхэшх)
ёхщўрё уЁєяяр expression тючтЁр∙рхЄ Єшя, р эрфю тючтЁр∙рЄ№ чэрўхэшх! ъръюую Єшяр? эрфю ш Єю, ш фЁєуюх, Є.х. чряшё№!!!
р т рёёхьсыхЁх эрфю, ўЄюс√ expression ьюу ухэхЁшЄ№ post label?





 ьюуєЄ яюЄЁхсютрЄ№ё  ш fixed point Єшя√ ё юёюсющ юяхЁрЎшхщ єьэюцхэш  (ёыюцхэшх ш ёЁртэхэшх Єръшх цх)

яЁхЇшъё√ ьюуєЄ ёютярфрЄ№ ё юяхЁрЎш ьш ш шэЇшъёрьш
яюёЄЇшъё√ эх ьюуєЄ, Є.ъ. юэш т яючшЎшш юяхЁрЎшш
+ яЁхЇшъё(int), юяхЁрЎш 
- яЁхЇшъё(int), юяхЁрЎш 
* яЁхЇшъё(peek), юяхЁрЎш 
/ юяхЁрЎш 
~ яЁхЇшъё(inv)
! яЁхЇшъё(invbool)
& яЁхЇшъё(addr), юяхЁрЎш (and)
| юяхЁрЎш (or)
^ юяхЁрЎш (xor) - ьюцэю inv ё■фр ъръ яЁхЇшъё
= юяхЁрЎш (eq)
! юяхЁрЎш (noteq)
< яЁхЇшъё(shl), юяхЁрЎш (less)
> яЁхЇшъё(shr), юяхЁрЎш (more)
. яЁхЇшъё(єЁютхэ№ т√°х), шэЇшъё(float, record)
% яЁхЇшъё?, юяхЁрЎш ?
( яЁхЇшъё(expr)
[ яЁхЇшъё(const), яюёЄЇшъё(peekarray) - ьюцэю peek ё■фр ъръ яЁхЇшъё [addr]? Ёхфъю эрфю, ьюцэю ЄрщяърёЄшЄ№ єърчрЄхы№ шч ўшёыр: *(byte*)addr
@ яЁхЇшъё?, юяхЁрЎш ?
? яЁхЇшъё?



when defining a function, parameter order is: inputs, then outputs (Google cpp style guide)
яю тхэухЁёъющ эюЄрЎшш яхЁт√х сєът√ ЇєэъЎшш фюыцэ√ ёююЄтхЄёЄтютрЄ№ Єшяє Ёхчєы№ЄрЄр



var, .var, var.var - эхы№ч  юЄфхы Є№ яю isalphanumeric(nextsymbol) юЄ type func, хёыш эхЄ Єюўъш ё чря Єющ!!!
type(var) - яю nextsymbol=='('
[+type func(...)]
type func(...), хёыш юс чрЄхы№эр  ';' (яЁш ¤Єюь эхы№ч  type .func(...))

шыш Єръ:
value.value.value
value.value.value[expr]
+(type)value.value.value - ёфхырЄ№ ъръ с√ыю, схч pretype
+(type)value.value.value[expr] - ёфхырЄ№ ъръ с√ыю, схч pretype (є [] яЁшюЁшЄхЄ эрф ЄшяшчрЎшхщ ш тёхьш яЁхЇшъёрьш)
func.func.func(par,par,par) юЄфхыхэю єцх тэєЄЁш concat_compile_var() (т√чют ЇєэъЎшш Єрь ш юяючэр╕Єё  шьхээю яю ёъюсъх ёяЁртр)
!!!эю ъръ єчэрЄ№ яЁю ёъюсъє, хёыш х∙╕ эх яЁюўшЄрэ яюыэюёЄ№■ шфхэЄшЇшърЄюЁ ёю тёхьш Єюўърьш??? Ёх°хэю Ёрчсштъющ эр ўрёЄш compile_variable
+(type)func.func.func(par,par,par)

фы  ¤Єюую эрфю їЁрэшЄ№ Єшя ЇєэъЎшш ш тёхї ярЁрьхЄЁют (ъръ яхЁхьхээ√ї, ъюЄюЁ√х эх эрфю ухэхЁшЁютрЄ№ т сыюъ яхЁхьхээ√ї)
яЁш ¤Єюь тёх шёяюы№чєхь√х ЇєэъЎшш эрфю юяЁхфхышЄ№ т√°х!!!
forward ёхщўрё яЁюяєёърхЄ, р фюыцхэ ёючфртрЄ№ яхЁхьхээ√х! Єюуфр т юяЁхфхыхэшш ЇєэъЎшш эрфю яЁютхЁ Є№ яхЁхьхээ√х яхЁхф ёючфрэшхь!
ёыютю forward эхы№ч  яЁюяєёърЄ№, Є.ъ. cemitfunc(); эрфю т√чтрЄ№/эх т√чтрЄ№ яхЁхф ўЄхэшхь ярЁрьхЄЁют (Є.ъ. юэш фюыцэ√ ёюїЁрэ Є№ё  т ёЄхъ фы  ЁхъєЁёшш).

эхы№ч  эрўшэрЄ№ ъюьрэфє ёю ёъюсъш, Є.ъ. ёъюсър яЁшъыхшЄё  ъ яЁю°ыюьє т√Ёрцхэш■ (яЁхтЁрЄшЄ яюёыхфэ■■ яхЁхьхээє■ т ЇєэъЎш■) - шыш яЁютхЁшЄ№ яЁюсхы ьхцфє эшьш?

poke яю * схч let эхєфюсэю - ьюцхЄ с√Є№ тюёяЁшэ Єю ъръ яЁюфюыцхэшх яЁю°ыюую т√Ёрцхэш !!!
є эрё +(type)pointer=... - Єюцх ьюцхЄ с√Є№ тюёяЁшэ Єю ъръ яЁюфюыцхэшх яЁю°ыюую т√Ёрцхэш !!!
фрцх хёыш єсЁрЄ№ + т эрўрых!!! (ьюцхЄ яюэ Є№ ъръ т√чют ЇєэъЎшш т√°х)
ёфхырЄ№ poke(type)pointer=...?
шыш ЁрчЁх°шЄ№ яшёрЄ№ т єърчрЄхы№ схч ЄрщяърёЄр?

++var ш --var Єюцх ёъыхштр■Єё  ё яЁхф√фє∙хщ ёЄЁюъющ
ёфхырЄ№ inc var, dec var

ьюцэю ёфхырЄ№ т√чют схч call, хёыш яЁютхЁ Є№ ёъюсъє ( яюёых ъюьрэф√ - эю Єюуфр эхы№ч  шьхэр ё Єюўъющ
ш яЁшётрштрэшх (эх ьрёёштют) схч let, хёыш яЁютхЁ Є№ = яюёых ъюьрэф√ - эю Єюуфр эхы№ч  шьхэр ё Єюўъющ
яЁшётрштрэшх ьрёёштют схч let, хёыш яЁютхЁ Є№ [ яюёых ъюьрэф√ - эю Єюуфр эхы№ч  шьхэр ё Єюўъющ

яюфЎхяы Є№ Єюўъш єцх эр єЁютэх reads (ъЁюьх эрўры№э√ї)?

ёхщўрё яЁш юс· тыхэшш ЇєэъЎшш ё Єюўъющ тыюцхээюёЄ№ эх сєфхЄ ёююЄтхЄёЄтютрЄ№ ўшёыє Єюўхъ!!!
эєцэю ыш юс· ты Є№ ЇєэъЎшш ё Єюўъющ? тЁюфх эхЄ
ёфхырЄ№ чр∙шЄє юЄ ¤Єюую?

яю шфхх яЁртюьхЁэ√ Єюы№ъю Єръшх юсЁр∙хэш  ё Єюўърьш:
_proc()
_module.proc()
submodule.proc() (Ёрэ№°х с√ыю .submodule.proc())
_var
_module.var
[submodule.var (Ёрэ№°х с√ыю .submodule.var()) - яыюїющ ёЄшы№]
.thismodulevar - ъръ ёфхырЄ№ ёютьхёЄшью ё ╤ш? ёфхырЄ№ _var єЁютэхь т√°х, р __var уыюсры№э√ь? [шыш тёх уыюсры№э√х яхЁхьхээ√х ьюфєы  ёфхырЄ№ уыюсры№э√ьш (яыюїющ ёЄшы№)? шыш ЁрсюЄрЄ№ ё эшь ўхЁхч _mymodule.var (р юЄъєфр ь√ чэрхь тыюцхээюёЄ№)?]



endif фы  єёыютшщ схч else ышътшфшЁєхЄ ю°шсъє if()if(){}else{}
хёыш хёЄ№ endif, Єю ю°шсъш if();{} эх ьюцхЄ с√Є№, Єръ ўЄю ьюцэю єсЁрЄ№ then
эю loop яЁюёЄю Єръ эх єсЁрЄ№
ьюцэю ёфхырЄ№ юс чрЄхы№эє■ ЇшуєЁэє■ ёъюсъє яюёых if() (Єюуфр сєфхЄ эхєфюсэю if()if()) ш while(), эю эх яюёых else

endif ёфхырЄ№ тю тёхї if?
ьюцэю тьхёЄю endif шёяюы№чютрЄ№ ';' (яЁютхЁъющ эр ёыхфє■∙шщ ёшьтюы, ўЄюс√ эх яюэрфюсшыюё№ ьэюую °Єєъ? эю ьюцэю ыш Єюуфр ёфхырЄ№ match_if? Єюуфр юэ эх фюыцхэ ё·хфрЄ№ ';', эю ьюцхЄ хую юёЄрты Є№ т _textword):
ю°шсър if();{} шёъы■ўрхЄё 
ю°шсър if()if(){}else{} шёъы■ўрхЄё 
чряЁх∙хэю if()bla; else bla; эрфю if(){}else bla;
if()if(){};else{}; ярЁёшЄё  Єръ:
if()
  if() {
  }
  ;
else {
}
;

рэрыюушўэю хёыш while(){}; Єю шёъы■ўрхЄё  ю°шсър while();{}
эю while т юфэє ёЄЁюўъє эх яш°єЄ, Єръ ўЄю ьюцэю єсЁрЄ№ ;





ъръ ёфхырЄ№ тыюцхээ√х ёЄЁєъЄєЁ√? фюыцэ√ с√Є№ яюы  Єшяр struct1->struct2.field1
???


ЁрсюЄє ёю ёЄЁєъЄєЁрьш эрфю яЁ ью чруэрЄ№ т ix(юфэр),iy(тЄюЁр ), эєцэ√ ъюьрэф√ Єшяр WITH фы  ёючфрэш  Єръшї ъюэЄхъёЄют (шыш Єшя INDEXREGISTER)
яЁю∙х тёхую ёЄЁєъЄєЁє юЁурэшчютрЄ№ ўхЁхч ёыюцхэшх ('.' сєфхЄ юяхЁрЎшхщ)
'.' т ёЄЁєъЄєЁрї фр╕Є ъюэЇышъЄ ё ёшёЄхьющ ьюфєыхщ!!!
яюы  ёЄЁєъЄєЁ√ ьюуєЄ с√Є№ ш ёыхтр, ш ёяЁртр юЄ = - ╙╫╥┼═╬
Ўхы√х ёЄЁєъЄєЁ√ яЁшётрштрЄ№ эх эрфю, эю эр эшї ьюцэю фртрЄ№ єърчрЄхы№

ъръ їЁрэшЄ№ фрээ√х ю ёЄЁєъЄєЁх?
ьюцэю фы  ърцфюую яюы  ёЄЁєъЄєЁ√ їЁрэшЄ№ structname.fieldname ё Єшяюь [ш ёьх∙хэшхь (ьюцэю яхЁхыюцшЄ№ эр рёь)]
р фы  ёрьющ ёЄЁєъЄєЁ√ їЁрэшЄ№ ЁрчьхЁ т срщЄрї фы  +SIZEOF(structname) - Єръ цх ёфхырЄ№ +SIZEOF(arrayname) (фы  ьрёёштр эрфю єьхЄ№ т√ўшёы Є№ ЁрчьхЁ шч ёЄЁюъш [])
эєцхэ Єшя _T_STRUCT (эхэръырф√трхь√щ)

ёЄрЄшўхёър  ёЄЁєъЄєЁр:
хёыш юсЁр∙хэшх ъ яхЁхьхээющ ё Єюўъющ, Єю эрфю єьхЄ№ яюыєўшЄ№ шч чряшёш structinstancename.fieldname ёЄЁюъє structname.fieldname, ўЄюс√ яюыєўшЄ№ Єшя [ш ёьх∙хэшх]
яЁш ¤Єюь эрфю ёуэхЁшЁютрЄ№ structname+structname.fieldname

фшэрьшўхёър  ёЄЁєъЄєЁр:
хёыш юсЁр∙хэшх ъ яхЁхьхээющ ё ->, Єю эрфю єьхЄ№ яюыєўшЄ№ шч чряшёш structinstancename->fieldname ёЄЁюъє structname.fieldname, ўЄюс√ яюыєўшЄ№ Єшя [ш ёьх∙хэшх]
яЁш ¤Єюь эрфю ёухэхЁшЁютрЄ№ pushnum(structname.fieldname), add(), peek() (т сєфє∙хь (ix+...))



ъръ т√уЁєцрЄ№ ёЄЁюъш ёюЁЎр т рёь? Єюы№ъю ўхЁхч сєЇхЁшчрЎш■ ёЄЁюъ т ыхъёхЁх? эрёъюы№ъю сюы№°ющ яЁюшуЁ√° ш ьюцэю ыш ёфхырЄ№ т√шуЁ√°?
1. STRMAX эх яЁшф╕Єё  яЁютхЁ Є№ эр ърцфюь ёшьтюых? Єюы№ъю хёыш фышэр ёЄЁюъш юуЁрэшўхэр
2. ьюцэю tword ёюсЁрЄ№ ўхЁхч strcopy (эхт√уюфэю фы  1-2 ёшьтюыют)
3. эх яЁютхЁ Є№ 0x0d (хую эх сєфхЄ т ёЄЁюъх)
эю ъръ ЁрчЁ√т ёЄЁюъш (шч-чр яхЁхяюыэхэш  сєЇхЁр) юЄышўшЄ№ юЄ яхЁхтюфр ёЄЁюъш??? хёыш ЁрчЁх°хэр ы■ср  фышэр ёЄЁюъш, Єю яЁшф╕Єё  яЁютхЁ Є№ STRMAX яЁш ЁрсюЄх ё tword!!!


    loop1: //цф╕ь эхЎшЇЁюсєътє (EOF эх ЎшЇЁюсєътр)
      _tword[_lentword] = _cnext;
      INC _lentword;
      _cnext = +(CHAR)readfin();
    IF (_isalphanum[+(BYTE)_cnext]) goto loop1;
    IF (_cnext == '\0') {
      readfinstr(_tstr);
      goto loop1;
    };
    goto loopgo;
    loop2: //цф╕ь эхфшхЁхчшё шыш EOF
      _cnext = +(CHAR)readfin();
    loopgo:
      IF (+(BYTE)_cnext < +(BYTE)'!') { //єёъюЁхэшх т√їюфр
        INC _spcsize; //spaces after tword
        IF (_cnext == '\n') {
          INC _curline;
          _spcsize = 0;
          INC _waseols;
        };
        IF (!_waseof) goto loop2;
      };



яхЁхфхырЄ№ т√Ёрцхэшх эр match (ё ўЄхэшхь ёыхфє■∙хую)

getnothing яюёЄрЁрЄ№ё  єсЁрЄ№ тхчфх, ъЁюьх jp ш яєёЄюую call (яхЁхэхёЄш т commands)

яЁштхёЄш шёїюфэшъ ъ 80 ёшьтюырь (ыєў°х 64)

яхЁхтхёЄш ъюььхэЄрЁшш эр рэуы (Ёєё)?

єёыютэю ъюьяшышЁютрЄ№ т сшсышюЄхъх Єх ЇєэъЎшш, ъюЄюЁ√х шёяюы№чютрышё№







ттхёЄш тёЄЁюхээ√х Єшя√ INT PFUNC, PBYTE PFUNC ш Є.я., PPROC, ўЄюс√ яхЁхфртрЄ№ юсЁрсюЄўшъш (Єюы№ъю схч ярЁрьхЄЁют)
эю ъръ ёфхырЄ№ ёютьхёЄшью ё ╤ш?
CONST PBYTE PFUNC funcarray[3]={f1,f2,f3} эх ёъюьяшышЁєхЄё  эр ╤ш
CONST PFUNC_PBYTE funcarray[3]={f1,f2,f3} ёъюьяшышЁєхЄё 
т√чют: varfunc(), Є.х. эрфю юяЁхфхышЄ№, ъръюую Єшяр ьхЄър - Ёхры№эр  ЇєэъЎш  (Єюуфр call N) шыш єърчрЄхы№ эр ЇєэъЎш■ (Єюуфр call jphl), фЁєуюх - ю°шсър
T_PFUNC_PBYTE == T_PFUNC|T_POINTER|T_BYTE
T_FUNC_PBYTE == T_FUNC|T_POINTER|T_BYTE шыш яЁюёЄю T_POINTER|T_BYTE ё 0 ¤ыхьхэЄют?

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




     ╧ЁшьхЁ:
         char Arr[2][2] = {'J', 'a', 'n', 'B'},
              * Ptr;
         main ()
         {
           typedef char *ChrPtr;
           Ptr = cast(Chrtr)(Arr+1)+1;
           printf ("%c%c", **Arr, *Ptr);
         }
  ╩юэтхЁёш  ьюцхЄ с√Є№  тэющ ш эх тэющ. ▀тэр  ъюэтхЁёш   ты хЄё 
т√Ёрцхэшхь ё яЁхф°хёЄтє■∙шь ъы■ўхт√ь ёыютюь cast (Єюы№ъю т Hisoft).
┬ ╧ЁшьхЁх яЁшьхэхэ юяхЁрЄюЁ ъюэтхЁёшш ъ т√Ёрцхэш■ (Arr + 1). ╧Ёш ¤Єюь
т√Ёрцхэшх (Arr + 1), яЁхфёЄрты ■∙хх фрээюх Єшяр (char(*)[2]),
яЁхюсЁрчєхЄё  т т√Ёрцхэшх, яЁхфёЄрты ■∙хх фрээюх Єшяр (char *), Є.х. т
т√Ёрцхэшх Єръюую цх Єшяр, ъръ ш Ptr.
     ┼ёыш фрээ√х Єшяр (char) яЁшётрштр■Єё  яхЁхьхээющ Єшяр (int)
шыш (unsigned), Єю яЁш ¤Єюь ёрь√щ ёЄрЁ°шщ  срщЄ ¤Єющ яхЁхьхээющ
чряюыэшЄё  эєы ьш. ╚, эрюсюЁюЄ, хёыш фрээ√х Єшяр (int) шыш (unsigned)
сєфєЄ яЁшётюхэ√  яхЁхьхээющ Єшя (char), Єю яхЁхьхээющ яЁшётюшЄё 
ьырф°шщ срщЄ фрээюую. └ хёыш фрээюх Єшяр (int) яЁшётюшЄ№ яхЁхьхээющ
Єшяр (unsigned) ш эрюсюЁюЄ, Єю ьюцэю яюЄхЁ Є№ фрээ√х.
     ═х тэр  ъюэтхЁёш  ьюцхЄ т√яюыэ Є№ё  ш яЁш т√яюыэхэшш
рЁшЇьхЄшўхёъшї юяхЁрЎшщ:
- хёыш эхъюЄюЁ√щ рЁуєьхэЄ шьххЄ Єшя (char), Єю юэ сєфхЄ яЁхюсЁрчютрэ ъ
Єшяє (int);
- хёыш Єюы№ъю юфшэ рЁуєьхэЄ 2ї-рЁуєьхэЄэющ юяхЁрЎшш шьххЄ Єшя
(unsigned), Єю тЄюЁющ сєфхЄ яЁхюсЁрчютрэ ъ ¤Єюьє цх Єшяє;
- т фЁєушї ёыєўр ї юср рЁуєьхэЄр фюыцэ√ с√Є№ Єшяр (int), Єръшь цх
сєфхЄ ш Ёхчєы№ЄрЄ.



   -1╘єэъЎшш ё яхЁхьхээ√ь ўшёыюь рЁуєьхэЄют-0
     ╘єэъЎш■ ё яхЁхьхээ√ь ўшёыюь рЁуєьхэЄют ьюцэю юс· тшЄ№ яхЁхф
яхЁт√ь т√чютюь ¤Єющ ЇєэъЎшш, р т чруюыютъх юяЁхфхыхэш ,
эхяюёЁхфёЄтхээю яюёых ёъюсъш, чрь√ър■∙хщ ёяшёюъ ярЁрьхЄЁют, фюыцэю
ёЄю Є№ ёыютю auto. ┼ёыш ¤Єш єёыютш  ёюсы■фхэ√, Єю ърцф√щ т√чют ЇєэъЎшш
сєфхЄ эх тэю фюяюыэхэ рЁуєьхэЄюь Єшяр (int), єърч√тр■∙шь, ёъюы№ъю срщЄ
чрэ ыш тёх рЁуєьхэЄ√ ЇєэъЎшш, тъы■ўр  ш эют√щ рЁуєьхэЄ. ╤ыхфєхЄ
юЄьхЄшЄ№, ўЄю рЁуєьхэЄ√ т√ўшёы ■Єё  т яюЁ фъх шї т√ёЄєяыхэш  т т√чютх
ш чряшё√тр■Єё  т ярь Є№ т яюЁ фъх єс√трэш  рфЁхёют. ┬ ўрёЄэюёЄш,
Ёхчєы№ЄрЄюь ЇєэъЎшш max  ты хЄё  ьръёшьєь яхЁхфрээ√ї хщ рЁуєьхэЄют
Єшяр (int):
         int
         max (Count) auto
            int Count;
         {
           int argc, *argv, max;
           argc = (Count >> 1)-1;
           argv =  Count + argc;
           max = -32768;
           while (argc--)
                if (*argv-- > max)
                max = argv[1];
           return max;
         }
     -1UWAGA-0: ▌Єюую эхЄ т срчютюь  ч√ъх.

         int
         strcmp (Src, Trg)
           char *Src, *Trg;
         {
           while (*Src == *Trg++)
              if (!*Src++) return 0;
           return *Src > Trg[-1] ? 1: -1;
         }

 

 
far pointer'√ 4(3)-срщЄэ√х
ЁрчрфЁхёрЎш  ъюьяшышЁєхЄё  Єръ:
хёыш яЁю°ыр  ЁрчрфЁхёрЎш  (peek) far pointer'р с√ыр ё Єхь цх шьхэхь far pointer'р, Єю ёЄЁрэшЎє эх тъы■ўрхь, шэрўх тъы■ўрхь
фрыхх ўшЄрхь ъръ юс√ўэю яю ьырф°хщ ўрёЄш
(т эхфюрёьх эхЄ ёыєўрхт юфэютЁхьхээюую шёяюы№чютрэш  фтєї far pointer'ют)
т ъюэЎх яЁюЎхфєЁ√ ёсЁрё√трхь
т ъюэЎх Ўшъыр ёсЁрё√трЄ№ - ЄюЁьюч, эю Єюуфр эрфю урЁрэЄшЁютрЄ№, ўЄю far pointer ўшЄрыш фю Ўшъыр!

эхы№ч  ърёЄшЄ№ шч near т far ш эрюсюЁюЄ

яЁш ёыюцхэшш-т√ўшЄрэшш far pointer'ют яюыєўрхЄё  far size_t (шэрўх яЁш°ыюё№ с√ ухэхЁшЄ№ ю°шсъє, хёыш юэш т Ёрчэ√ї ёЄЁрэшЎрї)
яю ЁрчьхЁэюёЄш pointer == size_t, Є.ъ. юср яюърч√тр■Є ЁрёёЄю эшх т срщЄрї юЄ ъръющ-Єю Єюўъш

ъръющ ёшэЄръёшё? ёыютю шыш яЁюёЄю х∙╕ ъєўр эрчтрэшщ Єшяют?

р ъръ far call'√? юэш эєцэ√ ўр∙х?


яЁшьхЁ шч юЁшушэры№эюую Bourne Shell'р):
#define BEGIN   {
#define END     }
#define SWITCH  switch(
#define IN      ){
#define ENDSW   }
#define FOR     for(
#define WHILE   while(
#define DO      ){
#define OD      ;}
#define REP     do{
#define PER     }while(
#define DONE    );
#define LOOP    for(;;){
#define POOL    }




яюфїюф√ ъ яюёЄЁюхэш■ ярЁёхЁр:
1. readword + compile_value
2. read_compile_value
3. match_value (яЁш єфрўх фхырхЄ readword)


ъръ т√ч√трЄ№ ЇєэъЎш■ ё Ёхчєы№ЄрЄюь яю єърчрЄхы■? (Єюы№ъю схч ярЁрьхЄЁют! Є.ъ. ь√ яхЁхфр╕ь шї ъръ яхЁхьхээ√х) (эрфю чэрЄ№ Єшя ЇєэъЎшш!  тэю яшёрЄ№ Єшя ЇєэъЎшш яЁш Єръюь т√чютх)
+CALL (funcname)? эх ёЁрсюЄрхЄ, Є.ъ. ёш°эшъ фюыцхэ чэрЄ№ Єшя ЇєэъЎшш
Ёрчтх ўЄю +CALLINT (funcname) ш Є.я., эю Єръ эхы№ч  шёяюы№чютрЄ№ яЁюшчтюфэ√х Єшя√
¤Єю тё╕ Ёртэю ўЄю ёфхырЄ№ +PEEKINT (poi) ш Є.я.

ьюцэю яюыєўшЄ№ єърчрЄхы№ эр ьхЄъє - эю ъръ фхырЄ№ goto яю єърчрЄхы■? т ёЄрэфрЁЄэюь ╤ш ¤Єюую эхЄ, Єюы№ъю т gcc



єърчрЄхы№ эр єърчрЄхы№ ьюцэю ёфхырЄ№, хёыш фюсртыхэшх єърчрЄхы  - ¤Єю яЁшсртыхэшх 15, р эх 16

шэырщэ userg, nouserg? фы  ¤Єюую эрфю used ёфхырЄ№ ьрёёштюь - ъръ єёъюЁшЄ№ findrfree?