FORTH: рд╕реЗрд▓реНрдл рдбрд┐рдлрд╛рдЗрдирд┐рдВрдЧ рд╢рдмреНрдж

рдХрд┐рд▓реЗ рдХреА рднрд╛рд╖рд╛ рдореЗрдВ рдХреБрдЫ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реЛрдиреЗ рджреЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: x, y, z, x ', y', z ', x' ', y' ', z' ', s, m and so ...

рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╣рд░ рдмрд╛рд░ рд╢рдмреНрдж VARIABLE рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдпрд╣ рдмреЛрдЭрд┐рд▓, рдиреАрд░рд╕ рдФрд░ рдмрджрд╕реВрд░рдд рд╣реИред рдХреНрдпрд╛ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдордЬреЗрджрд╛рд░ рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

рд╕рдВрдХреЗрдд рджреЗрдВ рдХрд┐ рдЖрдЧреЗ рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЙрдирдХреЗ рдирд╛рдо рд▓рд┐рдЦреЗ рдЬрд╛рдПрдВрдЧреЗред

рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

 рдЪрд░:
   xyzx 'y' z '
   x '' y '' z ''
   рдПрд╕.рдПрдо.
 ; VARIABLES






рдПрд╕рдкреА-рдлреЛрд░реНрде рдореЗрдВ рд▓рд╛рдЧреВ рдлреЛрд░реНрдЯ рднрд╛рд╖рд╛ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ, рдЕрдЧрд░ рдпрд╣ рд╕рдВрджрд░реНрдн рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдПрдХ рд╢рдмреНрдж рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реА рд╕рдВрджрд░реНрдн рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ NOTFOUND рд╢рдмреНрдж рдЦреЛрдЬрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╡рд╣ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред NOTFOUND рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рдкрддрд╛ рдФрд░ рдХрд╛рдЙрдВрдЯрд░ рд╣реИрдВред рддреЛ, рдЖрдкрдХреЛ NOTFOUND рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╡рд╣реА рдХрд░реЗ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред



рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП?

рдЗрд╕ рд╢рдмреНрдж рдХреЛ рди рд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВред рдореБрдЭреЗ рдкрд░рд┐рднрд╛рд╖рд╛ рдпрд╛рдж рд╣реИ

  : рд╡рд╛рд░реНрд▓реЗ рд╕реГрдЬрди 0 ;;


рд▓реЗрдХрд┐рди рд╢рдмреНрдж рдХреНрд░рд┐рдПрдЯ рд╕реНрд╡рдпрдВ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдЕрдЧрд▓реЗ рд╢рдмреНрдж рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рд╕реЗ рдПрдХ рдПрдбреНрд░реЗрд╕ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдФрд░ рд╕реНрдЯреИрдХ рдкрд░ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рд╢рдмреНрдж рдмрдирд╛ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рд╕реНрдЯреИрдХ рд╕реЗ рдкрддрд╛ рдФрд░ рд▓рд╛рдЗрди рдХрд╛рдЙрдВрдЯрд░ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрдирд╛рддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣, NOTFOUND рдХреА рддрд░рд╣, рдорд╛рдирдХ ANSI-94 рд╢рдмреНрдж рд╕реЗрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рддрд░рд╣ рд╕реЗ

 : NOTFOUND (рдЕрддрд┐рд░рд┐рдХреНрдд рдпреВ -) рдирд┐рд░реНрдорд┐рдд 0,; 


рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдЖрдзрд╛рд░ рдлреЛрд░рдо рдХреА рд╕реВрдЪреА рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЦреЛ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕ рдирдП NOTFOUND рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрджрд░реНрдн рдореЗрдВ рдЫрд┐рдкрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЪрд▓реЛ рдЪрд░ рд╢рдмреНрджрдХреЛрд╢ рдорд┐рд▓рддрд╛ рд╣реИред

 VOCABULARY рдЪрд░ 


рдФрд░ рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд░реЗрдВред

 рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЪрд░


рд╡рд╣рд╛рдВ NOTFOUND рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд░рдЦреЗрдВ



рд╡рд░реНрддрдорд╛рди рд╕рдВрджрд░реНрдн рд╡рд╛рдкрд╕ рдХрд░реЗрдВ

 рдкреВрд░реНрд╡рд╡рд░реНрддреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ




рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╢рдмреНрдж VARIABLES: рд╕рдВрджрд░реНрдн рдХреЛ рдЪрд░ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХ NOTFOUND рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рддрд╛ рд╣реИ

 : рд╕рдВрд╕реНрдХрд░рдг: ALSO рдЪрд░;


рд╕рдорд╛рдкрди рд╢рдмреНрдж; VARIABLES рдПрдХ рд╕рдВрджрд░реНрдн рд▓реМрдЯрд╛рдПрдЧрд╛ред рдпрд╣ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЪрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред



рд╡рд╣ рд╣реИ, рдХреБрд▓:

 VOCABULARY рдЪрд░ 
 рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЪрд░

 : NOTFOUND (рдЕрддрд┐рд░рд┐рдХреНрдд рдпреВ -) рдирд┐рд░реНрдорд┐рдд 0,; 
 :; рд╡рд░рд┐рдпрд╡реЗрдЬрд╝ рдкреНрд░реАрд╡рд┐рдпрд╕; 

 рдкреВрд░реНрд╡рд╡рд░реНрддреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ

 : рд╕рдВрд╕реНрдХрд░рдг: ALSO рдЪрд░;


рдЗрд╕рд▓рд┐рдП, рдХреЗрд╡рд▓ рдЪрд╛рд░ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ, рд╣рдордиреЗ рдПрд╕рдкреА-рдлреЛрд░реНрде рджреБрднрд╛рд╖рд┐рдпрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдФрд░ рдЪрд░ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ред

рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ VALUE рдЪрд░, рд╕реНрдерд┐рд░рд╛рдВрдХ рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рд╖реНрдкрд╛рджрди рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рд╢рдмреНрдж рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реЗ рд╢рдмреНрдж рдЬреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╢рдмреНрджреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЬреЛрдбрд╝реЗ рд░рдЦрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИред рдПрдХ рдПрдХрд▓ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП, рдФрд░ рдПрдХ рд╕рдореВрд╣ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рд░рдЦрд╛ рдЧрдпрд╛ред рджрд░рдЕрд╕рд▓, рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╢рдмреНрдж рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рд╛рде рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рдореВрд╣ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдЕрдЧрд░ рдпреЗ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рдкрд╛рда рдкрд░ рдирд╣реАрдВ рдлреИрд▓реА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдмреНрд▓реЙрдХ рдореЗрдВ рдПрдХрддреНрд░ рдХреА рдЬрд╛рддреА рд╣реИрдВред



рдЖрдЗрдП рдЗрд╕реЗ VALUE рдЪрд░ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

 VOCABULARY рдорд╛рди
 рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рдг
 : рдХреБрдЫ рдирд╣реАрдВ ...


рдФрд░ рдпрд╣рд╛рдБ рд╣рдо рдХреБрдЫ рдкрд░реЗрд╢рд╛рдиреА рдореЗрдВ рдЖрддреЗ рд╣реИрдВред рдпреЛрдЧреНрдпрддрд╛ рд╢рдмреНрдж VALUE рдХреЛ CREATE рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 : рдореВрд▓реНрдп  
        рд╣реИрдбрд░
        ['] _CONSTANT-CODE рд╕рдВрдХрд▓рди ,,
        ['] _TOVALUE-CODE рд╕рдВрдХрд▓рди,
 ;


рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╢рдмреНрдж рд╣реЗрдбрд░, рдЬреЛ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрддрд╛ рд╣реИ, рд╢рдмреНрдж рд╢реЗрд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЬреЛрдбрд╝реА рд╣реИ, рдЬреЛ рд╕реГрдЬрд┐рдд рд╢рдмреНрдж рдХрд╛ рдкрд░реНрдпрд╛рдп рд╣реИред

рдмрд╕ рдПрдХ рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ рдФрд░ рд╢рдмреНрдж рдХрд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

 : рдорд╛рдиреНрдп (рдПрди рдПрдбреНрд░ рдпреВ ---)
       SHEADER
       ['] _CONSTANT-CODE рд╕рдВрдХрд▓рди ,,
       ['] _TOVALUE-CODE рд╕рдВрдХрд▓рди,
 ;




рддреЛ:

 VOCABULARY рдорд╛рди
 рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рдг

 :; рдорд╛рдиреНрдп рдкреВрд░реНрд╡ рдкреНрд░рд╛рдкреНрддрд┐;
 : рдиреЙрдЯрдЖрдЙрдЯ 0;

 рдкреВрд░реНрд╡рд╡рд░реНрддреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ 
  
 : рдореВрд▓реНрдп: ALSO рдорд╛рди 0;


рд▓реЗрдХрд┐рди рдПрдХ рдЦрд╛рдореА рд╣реИред рд╕рднреА VALUE рд╢реВрдиреНрдп рдкрд░ рдЖрд░рдВрднрд┐рдХ рд╣реИрдВред рдЗрд╕реЗ рдЦрддреНрдо рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдк рдмрд╕ рд░рд┐рдХреЙрд░реНрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

 рдорд╛рди:
   резрез рдЖ   
   22 рдмреА.рдмреА. 
   33 рд╕реА.рд╕реА.
 ? рдореВрд▓реНрдпреЛрдВ


рдпрд╣ рдЕрдкрдардиреАрдп рд╣реИред



рдЖрдЗрдП рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:

 рдорд╛рди:
    рдЖ = резрез
    рдмрдм = реиреи
    cc = 33 
 ? рдореВрд▓реНрдпреЛрдВ


рдпрд╣ рд╕реБрдВрджрд░ рджрд┐рдЦрддрд╛ рд╣реИред



рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ "рд╕рдорд╛рди" рд╢рдмреНрдж рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрд┐рд╕реА рдХреЛ рдЕрдЧрд▓рд╛ рд╢рдмреНрдж рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрд╕реЗ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╛рдиреА LITERAL рдХрд╛ рд▓рдЧрднрдЧ рдкрд░реНрдпрд╛рдпрд╡рд╛рдЪреА рд╣реЛрдирд╛ред рдПрдХ рдЕрдиреНрдп "рдмрд░рд╛рдмрд░" рдХреЛ рдЕрдВрддрд┐рдо рдкрд░рд┐рднрд╛рд╖рд┐рдд VALUE рдЪрд░ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдорд╛рди рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред



рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ

 VOCABULARY рдорд╛рди
 рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рдг

 :; рдорд╛рдиреНрдп рдкреВрд░реНрд╡ рдкреНрд░рд╛рдкреНрддрд┐;
 : = BL WORD; LITERAL LATEST NAME> 9 + EXECUTE;
 : рдиреЙрдЯрдЖрдЙрдЯ 0;

 рдкреВрд░реНрд╡рд╡рд░реНрддреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ 
  
 : рдореВрд▓реНрдп: ALSO рдорд╛рди 0;




рдРрд╕рд╛ рд╡рд┐рдХрд▓реНрдк

 рдорд╛рди:
   резрез рд╕реЗ рдЖ   
   22 рд╕реЗ рдмреА.рдмреА. 
   33 рд╕реЗ рд╕реА.рд╕реА.
 ? рдореВрд▓реНрдпреЛрдВ
рдпрд╣ рдореВрд▓реНрдпрд╡рд╛рди рд╣реИ рдХрд┐ рдпрд╣ рднрд╛рд╖рд╛ рдХреЗ рдкреНрд░рддрд┐рдорд╛рди рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЖрдкрдХреЛ рдЧрдгрдирд╛ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде VALUE рдЪрд░ рдХреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

 рдорд╛рди:
        резрез рд╕реЗ рдЖ   
   22 1980 * рдЯреВ рдмреА.рдмреА. 
   рдЖрдм рдмреАрдмреА + рдХреЛ рд╕реА.рд╕реА.
 ? рдореВрд▓реНрдпреЛрдВ


рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ NOTFOUND рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреЗрд╡рд▓ рд╢рдмреНрдж рдХрд╛ рдЕрд░реНрде рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред VALUES рдХреЗ рдмреАрдЪ: рдЯрд░реНрдорд┐рдиреЗрдЯрд░ рд╢рдмреНрдж:: VALUES TO рдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп VALUE рдХреА рддрд░рд╣ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

 VOCABULARY рдорд╛рди
 рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рдг

 :; рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХрд╛ рдореВрд▓реНрдп;
 : рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП;

 рдкреВрд░реНрд╡рд╡рд░реНрддреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ 
  
 : рдореВрд▓реНрдп: ALSO рдорд╛рди;




рдЖрдк рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрди рдХрд╛ рдПрдХ рд╕рдорд╛рди рддрд░реАрдХрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

 рд╕реНрдерд┐рд░рд╛рдВрдХ:
        11 рдЖрдИрдПрд╕ рдЖ   
   22 1980 * рдЖрдИрдПрд╕рдмреАрдПрди 
   рдЖ рдмрдм + рдЖрдИрдПрд╕
 ;


рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╕реНрдкрд╖реНрдЯ рд╣реИред



рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдЕрднрд┐рдпрд╛рди рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╢рдмреНрдж рдмрдирд╛рддрд╛ рд╣реИ - рд╕рдореВрд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╢рдмреНрджред рдПрдХ рд╕рд░рд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╢рдмреНрдж рдЖрдкрдХреЛ рдРрд╕реЗ рд╢рдмреНрдж рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджрд╛рд░реНрде рд╕реЗ рдПрдХрдЬреБрдЯ рд╣реЛрддреЗ рд╣реИрдВред рд╕рдорд╛рди рд╕рдВрдкрддреНрддрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рд╕рдореВрд╣ рдХреЛ рд╕реНрд░реЛрдд рдкрд╛рда рдХреЗ рдПрдХ рднрд╛рдЧ рдореЗрдВ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╢рдмреНрджреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЬреЛ рдЗрд╕рдХреА рдкрдардиреАрдпрддрд╛ рдФрд░ рд╕рдВрдЧрдд рдХреЛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдПрд╕рдкреА-рдПрд╕рдкреА-рдлреЛрд░реНрде рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдЦрдж рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╢рдмреНрдж рдХрд╛ рд╕рдореВрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ WINAPI:ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, Winctl рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ, WinAPI рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рдкреВрд░реЗ рдкрд╛рда рдореЗрдВ рдмрд┐рдЦрд░реА рд╣реБрдИ рд╣реИрдВ, рдЬреЛ рдЙрджрд╛рд╕ рджрд┐рдЦрддреА рд╣реИрдВред

рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ:

 WINAPIS:
     LIB: USER32.DLL
              PostQuitMessage
              PostMessageA
              SetActiveWindow
     LIB: GDI32.DLL
              CreateFontA
              GetDeviceCaps
              DeleteDC
     LIB: COMCTL32.DLL
              InitCommonControlsEx
 ? рдЬреАрдд


рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдХрд┐ рдХреИрд╕реЗ WINAPI рд╢рдмреНрдж рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

spf_win_defwords.f


 : __WIN: (рдкреИрд░рд╛рдореНрд╕ "рдкреНрд░реЛрд╕реАрдЬрд░рдирд╛рдо" "рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдиреЗрдо" -)
   рдпрд╣рд╛рдВ> рдЖрд░
   0, winproc рдХрд╛ \ рдкрддрд╛
   рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдирд╛рдо рдХрд╛ 0, \ рдкрддрд╛
   рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдХрд╛ 0, \ рдкрддрд╛
   , рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ # #
   IS-TEMP-WL 0 =
   рдпрджрд┐
     рдпрд╣рд╛рдБ WinAPLINK @, WINAPLINK!  (рд▓рд┐рдВрдХ)
   рддрдм
   рдпрд╣рд╛рдБ DUP рдЖрд░ @ рд╕реЗрд▓ + рд╕реЗрд▓ +!
   PARSE-NAME CHARS HERE SWAP DUP ALLOT MOVE 0 C, \ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо
   рдпрд╣рд╛рдБ DUP рдЖрд░> рд╕реЗрд▓ +!
   PARSE-NAME CHARS HERE SWAP DUP ALLOT MOVE 0 C, \ _ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдирд╛рдо
   LoadLibraryA DUP 0 = IF -2009 THROW THEN \ ABORT "рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд╣реАрдВ рдорд┐рд▓реА"
   GetProcAddress 0 = IF -2010 THROW THEN \ ABORT "рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдорд┐рд▓реА"
 ;

 : WINAPI: ("рдкреНрд░реЛрд╕реАрдЬрд╝рд░рдирд╛рдо" "рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдиреЗрдо" -)
   (Win32 рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
     рдкрд░рд┐рдгрд╛рдореА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ ProcedureName рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
     Winproc рдлрд╝реАрд▓реНрдб рдХрд╛ рдкрддрд╛ рдкрд╣рд▓реЗ рдХреЗ рд╕рдордп рдкрд░ рднрд░рд╛ рдЬрд╛рдПрдЧрд╛
     рдкрд░рд┐рдгрд╛рдореА рд╢рдмреНрджрдХреЛрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрдиред
     рдкреНрд░рд╛рдкреНрдд "рдЖрдпрд╛рдд" рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
     рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреНрдХрд╛ рджрд┐рдпрд╛
     рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ C рдХреЙрд▓ рдореЗрдВред  рдкрд░рд┐рдгрд╛рдо рдкрд░рд┐рдгрд╛рдо
     рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
   )
   рдирдИ-WINAPI?
   рдЕрдЧрд░ рд╣реЗрдбрд░
   рд╡рд░рдирд╛
     -1
     > @ @ рд╣реЗрдбрд░ рдореЗрдВ!
   рддрдм
   ['] _WAPAPI- рдХреЛрдб рд╕рдВрдХрд▓рди,
   __WIN:
 ;




рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ DLL рдХреЗ рд╡рд┐рд▓рдВрдмрд┐рдд рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред WinAPI рдХреЙрд▓ рдХреЛрдб рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ рдЖрдпрд╛рддрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдХреБрдЫ рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рдлрд┐рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдФрд░ рдЙрд╕рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ред рдлрд┐рд░, рдРрд╕реА рдлрд╝рд╛рдЗрд▓ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдФрд░ рдРрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛрддреА рд╣реИред

рд╣рдорд╛рд░реА рдЗрдЪреНрдЫрд╛рдУрдВ рдХреЛ рдпрд╣ рдХреЛрдб рд░реАрдореЗрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдХреНрдпрд╛ рдХрд░реЗрдЧрд╛ред

; WINAPIS - рдХреЗрд╡рд▓ рд╕рдВрджрд░реНрдн рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред

LIB: - рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдЕрдЧрд▓реЗ рд╢рдмреНрдж рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдмрдлрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╢реЗрд╖ рд╢рдмреНрджреЛрдВ рдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред



рддреЛ:

string to stack.f


 SP @ рд╡реИрд▓реНрдпреВ рд╕реНрдкрд╕реНрдЯреЛрд░ 
 : рдПрд╕рдкреА @ рдПрд╕рдкреА рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП;
 : sp- рд░рд┐рд╕реНрдЯреЛрд░ рд╕реНрдкрд╕реНрдЯреЛрд░ рдПрд╕рдкреА!  ;
 : s-allot (n рдмрд╛рдЗрдЯреНрд╕ - addr) sp-save spstore SWAP-ALIGNED DUP> R CELL- CELL- SP!  рдЖрд░>;
 : ss (- addr u) NextWord 2> RR @ s-allot DUP DUP R @ + 0!  2R >> R SWAP R @ CMOVE R>;
 : s-free spstore CELL + SP!  ;
 : 3DUP 2 PICK 2 PICK 2 PICK;




winapis.f


 VOCABULARY winlibs
 рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╡рд┐рдирдлрд╛рдЗрдиреНрд╕реЗрд╕ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ

 :; рд╡рд┐рдиреИрдкрд┐рд╕ рдПрд╕-рдлреНрд░реА рдкреНрд░реАрд╡рд┐рдпрд╕;

 : LIB: (- addr u id) s-free ss CR OVER LoadLibraryA DUP 0 = IF -2009 THROW THEN;

 : NOTFOUND (рдПрдбреНрд░ рдпреВ рдЖрдИрдбреА рдПрдбреНрд░ рдпреВ - рдПрдбреНрд░ рдпреВ рдЖрдИрдбреА) 
           2> рдЖрд░ 3 рдбреАрдпреВрдкреА 2 рдЖрд░>    
           2DUP рд╢реЗрдб
           ['] _WAPAPI- рдХреЛрдб рд╕рдВрдХрд▓рди, 
           рдпрд╣рд╛рдВ> рдЖрд░  
           0, winproc рдХрд╛ \ рдкрддрд╛
           рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдирд╛рдо рдХрд╛ 0, \ рдкрддрд╛ 
           рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдХрд╛ 0, \ рдкрддрд╛
           -1, \ # рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ
           IS-TEMP-WL 0 =
                      рдпрджрд┐
                         рдпрд╣рд╛рдБ WinAPLINK @, WINAPLINK!  (рд▓рд┐рдВрдХ)
                      рддрдм 
               рдпрд╣рд╛рдБ DUP рдЖрд░ @ рд╕реЗрд▓ + рд╕реЗрд▓ +!  > рдЖрд░ 
                рдпрд╣рд╛рдБ рдкрд░ рд╕реНрд╡реИрдк рдбреБрдк рдПрд▓реЙрдЯ рдореЛ 0 0, R> \ function рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
               рдпрд╣рд╛рдБ рдЖрд░> рд╕реЗрд▓ +!  2> рдЖрд░  
                 рдпрд╣рд╛рдБ рдкрд░ рд╕реНрд╡реИрдк рдбреБрдк рдЕрд▓реЙрдЯ рдореЛрд╡ 0 рд╕реА, 2 рдЖрд░> \ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд╛рдо рд╣реИ 
               SWAP GetProcAddress 0 = IF -2010 THROW THEN \ ABORT "рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдорд┐рд▓реА"
 ;

  рдкреВрд░реНрд╡рд╡рд░реНрддреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ

 : WINAPIS: sp-save 1 2 3 ALSO winlibs; 











All Articles