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?