рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдо рдиреНрдпреВрдирддрдо POP3 рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рд╡рд╣ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛, рдореЗрд▓рдмреЙрдХреНрд╕ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ, рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рдХрд┐рддрдиреЗ рдкрддреНрд░ рд╣реИрдВ рдФрд░ рдирд╡реАрдирддрдо рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред
POP3 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд▓реЙрдЧрд┐рди рдХреЗ рд▓рд┐рдП USER PASS рдХрдорд╛рдВрдб рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдмреЙрдХреНрд╕ рдореЗрдВ рдЕрдХреНрд╖рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП STAT рдФрд░ рд╕реНрд╡рдпрдВ рдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП RETRред рд╣рдо DELE рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЕрдХреНрд╖рд░реЛрдВ рдХреЛ рдирд╣реАрдВ рд╣рдЯрд╛рдПрдВрдЧреЗред QUIT рд╢рд┐рд╖реНрдЯрд╛рдЪрд╛рд░ рд╕реЗ рдмрд╛рд╣рд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЖрдЗрдП рдЯреАрдореЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрдиреНрд╣реЗрдВ рджреЛ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдмрд┐рдирд╛ рддрд░реНрдХ рд╡рд╛рд▓реА рдЯреАрдореЗрдВ NOOP QUIT STAT RSET рдФрд░ рдПрдХ рддрд░реНрдХ рд░рдЦрдиреЗ рд╡рд╛рд▓реА рдЯреАрдореЗрдВ: DELE LIST RETR TOP APOP USER PASSред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдВрддрд┐рдо рддреАрди рдХреЛ рдкрд╛рда рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рдЦреНрддреА рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП, рд╕рднреА рдЖрджреЗрд╢реЛрдВ рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рджреВрд╕рд░реЗ рдореЗрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рджрд╢рдорд▓рд╡ рдЕрдВрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рддреАрд╕рд░реЗ рд╡рд░реНрдгреЛрдВ рдореЗрдВ рдордирдорд╛рдиреА рдЕрдХреНрд╖рд░ рд╣реИрдВред
рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рддрд░реНрдХрд╣реАрди рдЖрджреЗрд╢ред рдЖрдк рдорд╛рдереЗ рдкрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ
рдПрд╕ "рдПрдирдУрдУрдкреА" рд╕реЙрдХрдЯреЙрд╕рдХреЗрдЯрд▓рд╛рдЗрди рдереНрд░реЙрдЗрдб рдФрд░ рдЗрд╕рд▓рд┐рдП 4 рдмрд╛рд░ред
S "DELE" sockt WriteSocket THROW S> D (D.) sockt WriteSocketLine THROW
3 рдмрд╛рд░ рднреА
(рд╣рдо TOP APOP рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди USER рдкрд╛рд╕ рдХреЗ рд╕рд╛рде рд╣рдо рдЕрднреА рдХреЗ рд▓рд┐рдП рдмреБрджреНрдзрд┐рдорд╛рди рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред)
рд▓реЗрдХрд┐рди рд╣рдо рдлреЛрд░реНрдЯ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╢рдмреНрдж рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрдВрджрд░ рддрдВрддреНрд░ рд╣реИред рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдмрд╛рдЗрдЯреНрд╕_рдбреНрд░реЗрдб рдкрд░ рд╕реЙрдХреЗрдЯ рд░рд╛рдЗрдЯрд╕реНрдХреЗрдЯрд▓рд╛рдЗрди рдереНрд░реЙ рдФрд░ buf bufsize рд╕реЙрдХрд┐рдЯ рд░реАрдбрд╕реНрдХреЙрдХреЗрдЯ THROW рдбрд╛рд▓реЗрдВред рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкрддреНрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реАред
:> рд╕реЙрдХрдЯ
sockt WriteSocketLine THROW;
: рд╕реЙрдХрдЯ>
buf bufsize sockt ReadSocket THROW TO bytes_read;
рдФрд░ рд╢рдмреНрдж рдмрдирд╛рдиреЗ рд╢реБрд░реВ рдХрд░реЛ
: pop3_noarg
рд╕рдмрд╕реЗ рдирд╡реАрдирддрдо,
Does> @ COUNT> sockt;
: pop3_noargs
0 DO pop3_noarg LOOP;
4 pop3_noargs NOOP QUIT STAT RSET
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рддреАрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╣рдордиреЗ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рдЪрд╛рд░ рдЯреАрдореЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреАред рдореБрдЭреЗ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдПрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдПрдХ рдирдпрд╛ рд╢рдмреНрдж pop3_noarg рдХреЛ рдмреГрд╣рджрд╛рдиреНрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдирд┐рдореНрди рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде: рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдПрдХ рд╕реНрдерд╛рди рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рдЕрдХреНрд╖рд░реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╢рдмреНрдж рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдмреНрдж рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рд╕рдм рдЙрд╕ рд╢рдмреНрдж рдХреЛ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕ рд╕рдордп рд╢рдмреНрдж pop3_noarg рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдЧрд▓рд╛ рд╢рдмреНрдж LATEST рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╢рдмреНрдж рдХреЗ рдирд╛рдо рдлрд╝реАрд▓реНрдб рдХреЗ рдкрддреЗ рдХреЛ рдзрдХреЗрд▓рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, NOOP, рд╕реНрдЯреИрдХ рдкрд░ред рдПрдХ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рд╕реНрдЯреИрдХ рд╕реЗ рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд╢реАрд░реНрд╖ рддрдХ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдЖрдЧреЗ рдХреЛрдИ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рдерд╛, рддреЛ NOOP рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдкрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкрддрд╛ рд▓рдЧрд╛рдПрдЧрд╛, рдбреЗрд░реЗрдлреЗрд░рд┐рдВрдЧ рдХрд┐ рд╣рдореЗрдВ рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдХрд╛ рдкрддрд╛ рдорд┐рд▓реЗрдЧрд╛, рдЗрд╕реЗ COUNT рд╢рдмреНрдж рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдХреЗ рдкрддреЗ рдореЗрдВ рдмрджрд▓рдХрд░, рд╣рдо рдЗрд╕реЗ TYPE рд╢рдмреНрдж рд╕реЗ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдирддреАрдЬрддрди, рд╡реЗ NOOP рджреЗрдЦреЗрдВрдЧреЗред рдпрд╣ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдХрдард┐рди рд▓рдЧрддрд╛ рд╣реИ, рдХрд┐рд▓реЗ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдЦреБрдж рдХреЛ рдЖрдЬрд╝рдорд╛рдиреЗ рдореЗрдВ рддреЗрдЬрд╝ рд╣реИред
рдЖрдЧреЗ рдХреНрдпрд╛? рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлреЛрд░реНрдЯ рдбреАрдИрдПрд╕> рдХрд╛ рд╕рдмрд╕реЗ рд░рд╣рд╕реНрдпрдордп рд╢рдмреНрдж рд╣реИред рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдпрд╣ рд╢рдмреНрдж рдХреНрд░рд┐рдПрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдП рдЧрдП рд╢рдмреНрдж рдХреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЙрд╕ рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВред DOES> рдХреЗ рдмрд╛рдж рд▓рд┐рдЦреА рдЧрдИ рд╣рд░ рдЪреАрдЬ pop3_noarg рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рднреА рд╢рдмреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХреНрд░рд┐рдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рдЗрд╕рдХрд╛ рдкрддрд╛ рдФрд░ рд▓рд╛рдЗрди рдХрд╛рдЙрдВрдЯрд░ - рд╢рдмреНрдж рдХрд╛ рдирд╛рдо рдФрд░ рдЗрд╕реЗ рд╕реЙрдХреЗрдЯ рдореЗрдВ рднреЗрдЬрдирд╛ рд╣реИред
: pop3_digiarg
рд╕рдмрд╕реЗ рдирд╡реАрдирддрдо,
DOES> @> R <# S> D #S BL рд╣реЛрд▓реНрдб R> COUNT HOLDS # >> sockt;
: pop3_digiargs 0 DO pop3_digiarg LOOP;
3 pop3_digiargs DELE LIST RETR
рдбреАрдУрдИрдПрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдЕрдВрддрд░ рд╡рд╛рд▓реЗ рд╢рдмреНрджреЛрдВ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдореВрд╣ рдХреЗ рд╕рдорд╛рдиред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╕реЙрдХреЗрдЯ рдореЗрдВ рдХреБрдЫ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛?
рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рдФрд░ рдорд╣рд╛рди рдХрд┐рд▓реЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реБрдВрджрд░ рд╢рдмреНрдж (рдбреА) рд╣реИ рдЬреЛ рд╕реНрдЯреИрдХ рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрдХ рдПрдХ рдбрдмрд▓-рд╕рдЯреАрдХ рд╕рдВрдЦреНрдпрд╛ (64 рдмрд┐рдЯ) рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╣рдо рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛
S "LIST" sockt WriteSocket S> D (Dред)> Sockt
рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рджреБрдЦреАред
рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдЗрд╕реЗ рд╕реБрдВрджрд░ рддрд░реАрдХреЗ рд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдирд╣реАрдВ рдХреАред рдпрджрд┐ рдЖрдк рдХрд┐рд▓реЗ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рдкрд░рд┐рднрд╛рд╖рд╛ (рдбреА) рдкрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдореЗрдВ <# #S #> рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрди рддреАрди рд╢рдмреНрджреЛрдВ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдЪрдХ рдореВрд░ рдиреЗ рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рддреАрди рдЪрд░рдгреЛрдВ рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ред рдкрд╣рд▓рд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рддреИрдпрд╛рд░реА рд╣реИ, рджреВрд╕рд░рд╛ рд╕реНрд╡рдпрдВ рд░реВрдкрд╛рдВрддрд░рдг рд╣реИ, рдФрд░ рддреАрд╕рд░рд╛ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдирд┐рдЪрд▓реЗ рдЕрдВрдХреЛрдВ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рд┐рдВрдЯ рдЙрдЪреНрдЪ рдЕрдВрдХреЛрдВ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ - рдХрдиреНрд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреБрдЫ рдЕрд╕реНрдерд╛рдпреА рдмрдлрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд╣рд╛рдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЬрд╣рд╛рдВ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдмрдлрд░ рдХрд╛ рдЖрдХрд╛рд░ рдПрдХ рдЕрдЪреНрдЫреЗ рдорд╛рд░реНрдЬрд┐рди рдХреЗ рд╕рд╛рде рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рдмреНрдж рд╣реЛрд▓реНрдб рдмрд╕ рдЕрдЧрд▓реЗ рдЪрд░рд┐рддреНрд░ рдХреЛ рд╕реНрдЯреИрдХ рд╕реЗ рдмрдлрд░ рдореЗрдВ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред HOLDS, рд╣реЛрд▓реНрдб рдХреА рдмрд╣реБрд╡рдЪрди, рдХрдИ рд╡рд░реНрдг рдЙрд░реНрдл тАЛтАЛрд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдХрд░рддрд╛ рд╣реИред рдХреБрдЫ рд╢рдмреНрдж> R R> рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рдПрдХ рдЖрд╕рд╛рди рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдЖрдкрдХреЛ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рд╕реЗ рдХреБрдЫ рдорд╛рди рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдРрд╕рд╛ рд╕рдВрддреБрд▓рди рдЕрдзрд┐рдирд┐рдпрдо рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрдлрд╝рд░реНрд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЛ рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдмрдлрд░ рдореЗрдВ рд╕рдм рдХреБрдЫ рдХрд░рдирд╛ рд╣реИред
рдЕрдм рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рджреЗрдЦреЗрдВред рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рджреЛ рд╣реИрдВ: + OK рдпрд╛ -ERR, рдЬреЛ рдХрд┐рд╕реА рднреА рдкрд╛рда рдпрд╛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдиреЗ рдХрд┐рд╕реА рддрд░рд╣ рд╕рднреА рдХрд╛рдо рдЦреБрдж рдХрд┐рдпрд╛ред рддрд╛рдХрд┐ рд╣рдореЗрдВ рдЕрдВрддрд╣реАрди рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреВрджрдирд╛ рди рдкрдбрд╝реЗред рдФрд░ рдХрд┐рд▓реЗ рд╣рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдмрдлрд░ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рд╢рдмреНрдж EVALUATE рдХреЗ рд╕рд╛рде рд╣рдо рдПрдХ рдордирдорд╛рдирд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕ рдЕрд╡рд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣рдореЗрд╢рд╛ + OK рдпрд╛ -RR рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдЖрдЗрдП рдЗрди рдЙрддреНрддрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдордЭреЗрдВред
рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ -ERR рдХреЗ рд╕рд╛рде рд╣реИред рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдмрд╛рдХреА рд▓рд╛рдЗрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
: -RR 1 PARSE TYPE CR ABORT;
PARSE рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдП рдЧрдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдкреВрдВрдЫ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+ рдУрдХреЗ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╣рдореЗрд╢рд╛ рдкреЙрдк рдЕрдк рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдХрдорд╛рдВрдб рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИред рд╣рдо рд╕рднреА рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдЕрдЪреНрдЫреЗ рдХрд╛ рд╕рдВрджрд░реНрдн рдХреНрдпрд╛ рд╣реИ?
рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рд╕рдлрд▓ рдХрдиреЗрдХреНрд╢рди рдкрд░ рдкрд╣рд▓реЗ + рдареАрдХ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рд╣рдореЗрдВ рдЗрд╕ рддрдереНрдп рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдЧреНрд░реАрдЯрд┐рдВрдЧ рд╕рд░реНрд╡рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд▓реЙрдЧрд┐рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рджреВрд╕рд░рд╛ рдФрд░ рддреАрд╕рд░рд╛ + рдУрдХреЗ рд╣реЛрддрд╛ рд╣реИред рдмрд╕ рдмрд╛рдХреА рд▓рд╛рдЗрди рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░реЗрдВред
рдЪреМрдерд╛ + OK STAT рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ + OK рдкрд░ рджреЛ рдирдВрдмрд░ рд╕рдВрд▓рдЧреНрди рд╣реЛрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдмреЙрдХреНрд╕ рдореЗрдВ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рджреВрд╕рд░рд╛ рд╣реИ рдЙрдирдХреЗ рдХрдмреНрдЬреЗ рд╡рд╛рд▓реЗ рддреЛрддреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред рд╣рдореЗрдВ рддреЛрддреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕рд░реНрд╡рд░ рд░рд┐рд╕реНрдкрд╛рдВрд╕ рдХреЗ рдЯреЗрдХреНрд╕реНрдЯ рдирдВрдмрд░ рдХреЛ рд╕реНрдЯреИрдХ рдкрд░ рдПрдХ рдирдВрдмрд░ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдмрд╛рдХреА рд▓рд╛рдЗрди рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдкрд╛рдВрдЪрд╡рд╛рдВ + рдареАрдХ рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рд╣рдореЗрдВ рдЙрд╕ рдкрддреНрд░ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдПрдХ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рд░реНрд╡рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдкрддреНрд░ рдХреЗ рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рдмреАрдЪ рдПрдХ рдард╣рд░рд╛рд╡ред рджреВрд╕рд░реЗ, + рдУрдХреЗ рдХреЗ рдмрд╛рдж рджреЛ рдирдВрдмрд░ - рд╕рдВрджреЗрд╢ рд╕рдВрдЦреНрдпрд╛ рдФрд░ рддреЛрддреЗ рдореЗрдВ рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ред
рдЫрдареА + рдареАрдХ рд╣реИ, рдЖрдк рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рдЖрдк рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рд╣реА рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред
рддреЛ, + рдУрдХреЗ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХрд┐рд▓реЗ рдЖрдкрдХреЛ рдЭрдВрдбреЗ рдФрд░ рдЬрдЯрд┐рд▓ рддрд░реНрдХ рдХреЗ рдмрд┐рдирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рддрдерд╛рдХрдерд┐рдд рд╡реЗрдХреНрдЯрд░ рд╢рдмреНрдж рд╣реИрдВред рдРрд╕реЗ рд╢рдмреНрдж рдЬрд┐рдирдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд┐рд╕реА рднреА рд╕рдордп рд╕реМрдВрдкреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
VECT + рдУрдХреЗ
: do_type 1 PARSE TYPE CR;
: do_ignore 1 PARSE 2DROP;
: do_number 1 PARSE; SLITERAL;
: do_msg
sockt>
BEGIN buf рдмрд╛рдЗрдЯреНрд╕_рдкрд╛рдп TYPE CR
bytes_read bufsize - 0 <0 = WHILE sockt> REPEAT do_ignore;
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдб рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рд╣реИред
рдХреЛрдб
~ nn / lib / sock2.f
0 VALUE рд╕реЙрдХрдЯ
0 рдореВрд▓реНрдп рдмрд╛рдЗрдЯреНрд╕_рдбреНрд░реЗрдб
0 рдорд╛рди num_of_msgs
рез реп реи рдХрдирд╕реНрдЯреЗрдВрдЯ рдмрдлрд╕рд╛рдЗрдЬ
bufize рдЖрд╡рдВрдЯрд┐рдд рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯ buf
рдореЙрдбреНрдпреВрд▓:
:> рд╕реЙрдХрдЯ
sockt WriteSocketLine THROW;
: рд╕реЙрдХрдЯ>
buf bufsize sockt ReadSocket THROW TO bytes_read;
: рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛
sockt>
buf bytes_read EVALUATE;
: pop3_noarg
рд╕рдмрд╕реЗ рдирд╡реАрдирддрдо,
DOES> @ COUNT> рд╕реЙрдХрдЯ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛;
: pop3_noargs
0 DO pop3_noarg LOOP;
4 pop3_noargs NOOP QUIT STAT RSET
: pop3_digiarg
рд╕рдмрд╕реЗ рдирд╡реАрдирддрдо,
DOES> @> R <# S> D #S BL рд╣реЛрд▓реНрдб R> COUNT HOLDS # >> sockt response;
: pop3_digiargs 0 DO pop3_digiarg LOOP;
3 pop3_digiargs DELE LIST RETR
: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрд╕ "USER рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо"> sockt рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛;
: рдкрд╛рд╕ "рдПрд╕ рдкрд╛рд╕ рдкрд╛рд╕рд╡рд░реНрдб"> рд╕реЙрдХрдЯ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛;
VECT + рдУрдХреЗ
: do_type 1 PARSE TYPE CR;
: do_ignore 1 PARSE 2DROP;
: do_number 1 PARSE; SLITERAL do_ignore;
: do_msg
sockt>
BEGIN buf рдмрд╛рдЗрдЯреНрд╕_рдкрд╛рдп TYPE CR
bytes_read bufsize - 0 <0 = WHILE sockt> REPEAT do_ignore;
: -RR do_type ABORT;
: start_sockets
рд╕реЙрд░реНрдЯрд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдереНрд░реМрдб
CreateSocket рдереНрд░реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП;
: connect_to_host
GetHostIP THROW
110 рд╕реЙрдХреЗрдЯ рдХрдиреЗрдХреНрдЯрд╕реНрдХреЗрдЯ рдереНрд░реЙрдЗрдб
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛;
\ рдиреАрдЪреЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рд╣реИред рдКрдкрд░ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВред
start_sockets
'do_type TO + OK
S "pop.server.com" connect_to_host
'do_ignore TO + OK
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╛рд╕
'do_number TO + OK
STAT TO num_of_msgs
'do_msg TO + OK
num_of_msgs RETR
'do_type TO + OK
QUIT
рдЗрд╕ рдХреЛрдб рдХреЛ рдкреВрд░рдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╕рд░реНрд╡рд░ рд╕реЗ рд╕рднреА рдпрд╛ рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗ, рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдбреНрд░рд╛рдЗрд╡ рдкрд░ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ, рд╕рд░реНрд╡рд░ рд╕реЗ рд╣рдЯрд╛рддрд╛ рд╣реИ, рдЖрджрд┐ред рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рд▓рд┐рдпреЛ рдмреНрд░реЙрдбреА рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдФрд░ рд╡рд░реНрдгрд┐рдд рдлреЛрд░реНрдЯ рднрд╛рд╖рд╛ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдкрдШрдЯрди рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рднрд╛рд╖рд╛ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдХрд░рдг рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
FORTH: рдиреИрдиреЛрд╕рд░реНрд╡рд░реНрд╕ рдФрд░ рдиреИрдиреЛ рдЧреНрд░рд╛рд╣рдХред рднрд╛рдЧ 1рдкреБрдирд╢реНрдЪ: рдЬрдм рдПрдХ рд╡рд┐рд╖рдп рд▓рд┐рдЦ рд░рд╣рд╛ рдерд╛ рддреЛ рд╣рдмрд░ рдереЛрдбрд╝рд╛ рдХреНрд╖рддрд┐рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдпрд╛ рдерд╛ред