рдЖрдЬ рдореЗрд░реЗ рдкрд╛рд╕ рдЪрд╛рдмрд┐рдпреЛрдВ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рджреЛ рдХрд╛рд░рдг рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рд╣рдлреНрддреЗ
jParser рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж (
BMP рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП jParser рдХрд╛
рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ
RReverser рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж), рдпрд╣ рдЕрдЧрд▓реЗ рдЪрд░рдг рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИ: рдПрдХ рд╡рд┐рд╖рдп рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛, рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП jParser рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред (рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣
рдЙрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдЧрд╛ рдЬреЛ
alekciy рдиреЗ рдкреВрдЫрд╛ рдерд╛,
jParser рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдЖрдЧреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИред)

рджреВрд╕рд░реЗ, тЙИ рдЫрд╣ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ
( 26 рдирд╡рдВрдмрд░, 2011 ) ertaquo рдиреЗ рдкреВрдЫрд╛ рдХрд┐ рдореИрдВ рдлрд┐рдбреЛрдиреЗрдЯ рдореЗрдВ Node.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдлрд┐рд░ рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдореБрдЭреЗ рд╕рд┐рд░реНрдл рдирд╛рдо рдкрд╕рдВрдж рд╣реИ (рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдЬрдм "рдиреЛрдб"
рдпрд╛ "рдиреЛрдб" рд╢рдмреНрдж, рдЕрдЧрд░ рдмрд┐рдирд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
, рддреЛ рд░реВрд╕реА рдХрдВрдкреНрдпреВрдЯрд░ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдлрд┐рдбреЛрдиреЗрдЯ рдиреЛрдб рдХрд╛ рдорддрд▓рдм рд╣реИ), рд▓реЗрдХрд┐рди рдореИрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХрд╛ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреЗ рд╕рдХрд╛ред рдЕрдм рдореИрдВ рдЗрд╕реЗ рд▓рд╛рдКрдВрдЧрд╛
рддреЛ рдЙрджрд╛рд╣рд░рдг рдбрдмрд▓ рд╣реЛрдЧрд╛ред рдореИрдВ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдореЗрдВ JAM рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд Fidonet рдХреЗ рдИ-рдореЗрд▓ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╢реАрд░реНрд╖рдХреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд▓рд╛рддрд╛ рд╣реВрдВред рджреВрд░ рдФрд░ рдЕрдирд╛рджрд┐рдХрд╛рд▓ рд╕реЗ рдпрд╣ рдкреНрд░рд╛рд░реВрдк рдлрд╝рд┐рджреЗрдиреЗрдЯ рдореЗрдВ рд▓реЛрдХрдкреНрд░рд┐рдп рд░рд╣рд╛ рд╣реИ
( рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ JAM рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ 1993 рддрдХ рд╣реИ)ред рдореБрдЭреЗ
рддреБрд░рдВрдд рдпрд╣
рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ JAM рдХреЛ рдПрдХ рдЕрдиреНрдп рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░рд╛рд░реВрдк
( рд╕реНрдХреНрд╡рд┐рд╢ ) рдХреЗ рд▓рд┐рдП рдкрд╕рдВрдж рдХрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рдиреМ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ JAM рдПрдХ рд╕реАрдорд┐рдд рд▓рдВрдмрд╛рдИ рд╡рд╛рд▓реЗ рд╕рд░рдгреА (
рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪреА ) рдХреЗ рдмрдЬрд╛рдп рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬреЛ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдЬреАрд╡рдВрдд рдФрд░ рдХрд╛рдВрдЯреЗ рдХреА рдЪрд░реНрдЪрд╛рдУрдВ рдореЗрдВ рднреА рдПрдХ рдкреВрд░реНрдг рдЙрддреНрддрд░ рдкреЗрдбрд╝ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
JAM рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╡рд┐рднрд┐рдиреНрди BBS рдлрд╝рд┐рдбреЛрд╕ рдкрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди BBS рд╕рдордп рдХреЗ рд╕рд╛рде рдкрддреЗ рдмрдВрдж рдХрд░рдиреЗ рдпрд╛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдореИрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ
рдкрддреНрд░ рдХреЛ рдкрд╛рдВрдЪ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реВрдВрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╢рдмреНрджрд╢рдГ рдФрд░ рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛ рд╣реИред (рдЪреЗрдХ рдмреАрдмреАрдПрд╕, рдЬреЛ рддрдм рдореЗрд░реЗ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рдерд╛, рдЕрдм рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдВрдж рд╣реИред рдЗрд╕ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЙрдЧреНрд░ рд╣реИред)
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, Fidonet рдХреЗ
рдИ- рдореЗрд▓ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╣реЗрдбрд░
JHR рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ
ред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд▓рдВрдмрд╛рдИ рдХреЗ рд╣реЗрдбрд░ (
рдлрд┐рдХреНрд╕реНрдбрд╣реЗрдбрдЗрдиреНрдлреЛ рд╕реНрдЯреЗреНрд░рд╕реНрдЯ ) рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрд╛рдж рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрджреЗрд╢ рд╣реЗрдбрд░ (
рдореИрд╕реЗрдЬрд╣реЗрдбрд░ ) рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХреА рд╕рдВрд░рдЪрдирд╛ (
рдореЗрд╕реЗрдЬрдлреАрдбрд╣реЗрдбрд░ ) рдФрд░ рдПрдХ рдЪрд░ рдкреВрдВрдЫ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдХреНрд╖реЗрддреНрд░ (
рд╕рдмрдлрд┐рд▓реНрдбрдПрдХреНрд╕рдПрдХреНрд╕ ) рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдХреБрд▓ рд▓рдВрдмрд╛рдИред рдЬреЛ
MessageFixedHeader рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЕрдВрджрд░
SubfieldLen рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
ред SubFieldXX рдлрд╝реАрд▓реНрдб рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХреЗ рд╣реЗрдбрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрд╛рдж рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреА рд▓рдВрдмрд╛рдИ рдкрд┐рдЫрд▓реЗ
рдбреЗрдЯрд▓реЗрди рдирдВрдмрд░ рдореЗрдВ рджреА рдЧрдИ рд╣реИ
ред (рдпрд╣ рдПрдХ рд╣реА рдирдмреНрдмреЗ рдХреЗ рджрд╢рдХ рдореЗрдВ рдкрд╛рд╕реНрдХрд▓ рдмреЛрд▓рд┐рдпреЛрдВ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИ -
рдЯрд░реНрдмреЛ-рдкрд╛рд╕реНрдХрд▓, рдпреВрд╕реАрдПрд╕рдбреА рдкрд╛рд╕реНрдХрд▓; рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд╛рд╕реНрдХрд▓ рдореЗрдВ, рд▓рдВрдмрд╛рдИ рдПрдХ рдмрд╛рдЗрдЯ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреА рдЧрдИ рдереА, рдФрд░ рдЬреЗрдПрдПрдо рдореЗрдВ
рдбреЗрдЯрд▓реЗрди рдХреА рд╕рдВрдЦреНрдпрд╛
рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рдЪрд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдХреА рд╣реИ , рдЕрд░реНрдерд╛рддреН , рдпрд╣ рдмрддреНрддреАрд╕-рдмрд┐рдЯ рд╣реИред) )
рдПрдХ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╕реНрдерд┐рддрд┐ рдмрд╣реБрдд рдХрдо рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ:
рдЬреЗрдПрдЪрдЖрд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░,
рдореИрд╕реЗрдЬрд╣реЗрдб рд╣реЗрдбрд░ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЙрдк-рд╕рдВрджреЗрд╢ "рдЕрдкрдбреЗрдЯрд┐рдВрдЧ рд╣реЗрдбрд░" рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдкрддреНрд░ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдпрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕рдХрд╛ рд╣реЗрдбрд░ рд╡реЙрд▓реНрдпреВрдо рдореЗрдВ рдмрдврд╝рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкрд┐рдЫрд▓реЗ рд╣реЗрдбрд░ рдХреЛ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрди рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рднрд╛рдЧреНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдХреБрдЫ рдирд╣реАрдВ рдХрд╣рд╛
рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдирдХреА рд╣реЗрдбрд┐рдВрдЧ рд╡реЙрд▓реНрдпреВрдо рдореЗрдВ рдирд╣реАрдВ рдмрдврд╝реА рд╣реИ, рд▓реЗрдХрд┐рди рдШрдЯ рдЧрдИ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдХрдИ рдлрд╝рд┐рдбреЛрдиреЗрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдирдП рд╣реЗрдбрд┐рдВрдЧ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╕рдмрдлрд╝реАрд▓реНрдб рд╡реИрд▓реНрдпреВ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ
рдЗрдВрдбрд┐рд╡рд┐рдЬреБрдЕрд▓ рд╡реИрд▓реНрдпреВрдЬрд╝
)ред рдЗрд╕ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗ
MessageHeader рдХреЗ рдмреАрдЪ
, рдкрд┐рдЫрд▓реЗ рдкрд┐рдЫрд▓реЗ
SubFieldXX рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдпреБрдХреНрдд рдХрдЪрд░рд╛ рд╣реИ
ред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЕрдЧрд▓реЗ
MessageHeader рд╣реЗрдбрд░ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдЧрд▓реЗ
MessageHeader рд╣реЗрдбрд░ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ
, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рддреАрди "JAM"
ASCII рд╡рд░реНрдгреЛрдВ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╢рдХреНрдд рдмрд╛рдЗрдЯ рдХреЗ рдмрд╛рдж - рдпрд╣ рд╡рд╣
рд╕рд┐рдЧреНрдирд▓ рдЕрдиреБрдХреНрд░рдо рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде
MessageFixedHeader рд╣реЗрдбрд░ рд╢реБрд░реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
редNode.js рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХреЛрдб, рдЬреЛ
JHR рдлрд╝рд╛рдЗрд▓ рд╕реЗ RAM рдореЗрдВ рдЗрдХреЛ-рдореЗрд▓ рд╣реЗрдбрд░ рдкрдврд╝рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
var fs = require('fs'); var jParser = require('jParser'); var ulong = 'uint32'; var ushort = 'uint16'; var JAM = function(echotag){ if (!(this instanceof JAM)) return new JAM(echotag); this.echotag = echotag;
рдпрд╣ рд╕реНрдХреЗрдЪ рдПрдХреНрд╕рдкреЛрд░реНрдЯреЗрдб
JAM рдСрдмреНрдЬреЗрдХреНрдЯ (
JHR рдлрд╝реАрд▓реНрдб рдореЗрдВ
) рдХреЗ рдЕрдВрджрд░
JHR рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдХрдЪреНрдЪреЗ рдбреЗрдЯрд╛ рдХреЗ рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
- рдПрдХ рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЙрдбреНрдпреВрд▓ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ
рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ
рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ,
рд░реАрдбрд╣реЗрдбрд░реНрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде,
рдЖрдкрдХреЛ рдПрдХ рд╕рд░рд▓ рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
рдкрдврд╝реЗрдЧреА ред рдХреЗрд╡рд▓
FixedHeaderInfoStruct рд╣реЗрдбрд░ред JAM рдкреНрд░рд╛рд░реВрдк (JDT, рдФрд░ JDX, рдФрд░ JLR) рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рддреАрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рднреА рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЯрд┐рдкреНрдкрдгреА рдХреА рдЬрд╛рддреА рд╣реИред (рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдХрд┐рд╕реА рдХреЛ рдХреИрд╢ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреА рдЪрд╛рд╣рд┐рдП -
рд╕реНрдЯреЗрдЯ рдХрд░реЗрдВ () , рдпрд╛ рдирд╣реАрдВ
рд╡реЙрдЪ рдлрд╝рд╛рдЗрд▓ () рдмрд┐рд▓реНрдХреБрд▓
- рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рдЙрд╕рдХреЗ рдмрд┐рдирд╛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╕реМрджреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ред)
JAM рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
ulong ) jParser (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
" 'ulong': 'uint32' ") рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдП
рдЧрдП рдереЗ , рд▓реЗрдХрд┐рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "
var ulong = 'uv32' "), рдЬрд┐рдирдореЗрдВ рд╕реЗ рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рд╡рд┐рд╡рд░рдгред рдпрд╣ рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рд╣реИ: рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ V8 рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдВрдЬрди рдХрд╛ рдХреЛрдб jParser рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
SubField рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╡рд░реНрдгрди рдореЗрдВ
, рдЖрдк рдПрдХ рдЯрд┐рдкреНрдкрдгреА
рдкреНрд░рдХрд╛рд░ рдлрд╝реАрд▓реНрдб рдкрд╛рдПрдВрдЧреЗ
- рдпрд╣ рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЖрдмрд╛рдж рд╣реИ рдЬрд┐рд╕рдореЗрдВ
рдЬреЗрдПрдПрди рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдЙрдзрд╛рд░ рд▓реА рдЧрдИ рдореЗрдиреЗрдореЛрдирд┐рдХ рдлрд╝реАрд▓реНрдб рдкрджрдирд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреАрдмрдЧрд┐рдВрдЧ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
MessageHeader рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЕрдВрджрд░
рдЙрдкрдХреНрд╖реЗрддреНрд░ рдлрд╝реАрд▓реНрдб рдХреЛ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрд╣рд▓рд╛ (рддреЗрдЬ) рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЛ
рд╕рдмрдлреАрд▓реНрдбрд▓реЗрди рдЖрдХрд╛рд░ рдХреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рддрд╛ рд╣реИред рджреВрд╕рд░рд╛ (рдЯрд┐рдкреНрдкрдгреА рдХреА рдЧрдИ) рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, jParser рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЙрдк-рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИ - рдпрджрд┐ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдлрд╝реАрдб рдХреЗ рд╣реЗрдбрд░ рдХреЗ рдЪрд░ рднрд╛рдЧ рд╕реЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдПрдХ рд▓рдВрдмреЗ рдмреЙрдХреНрд╕ рдореЗрдВ рдЙрдирдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рд╕реНрдердЧрд┐рдд рдХреНрдпреЛрдВ рдХрд░реЗрдВред
AfterSubfields рдореЗрдВ рддреАрди
ASCII- рд╡рд░реНрдг "JAM" рдХреА рдПрдХ рд╕рд░рд▓ рдЦреЛрдЬ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдПрдХ рд╢реВрдиреНрдп рдмрд╛рдЗрдЯ рд╣реЛрддрд╛ рд╣реИ - рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред
рдХрдВрд╕реЛрд▓ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрд╛рд╣рд░ред
() рдбрд┐рдмрдЧрд┐рдВрдЧ рдЕрд░реНрде рд╣реИ, рдФрд░ рдирд╣реАрдВред (рдЖрдВрддрд░рд┐рдХ рдЪрд░
рдЪрд╛рд▓рди рдХрд╛ рдирд╛рдо рдореЗрдо рдХреЛ "
рдЖрдкрдХреЗ рд╕рднреА рдЖрдзрд╛рд░ рд╣рдорд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ " рдореЗрдо рдХреЗ рд▓рд┐рдП рдПрдХ рднреНрд░рдо
рд╣реИ ред)
JHR рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ
MessageHeaders рдлрд╝реАрд▓реНрдб рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ
69 рдирдВрдмрд░ "рдЬрд╛рджреВ" рд╣реИ; рдЗрд╕рдХрд╛ рд▓рдХреНрд╖реНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдХрдЪрд░рд╛ рдбреЗрдЯрд╛ рдХреА рднреА рдЙрдореНрдореАрдж рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЧрддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХреА:
var JAM = require('../'); var util = require('util'); console.log( new Date().toLocaleString() ); var blog = JAM('blog-MtW'); blog.ReadHeaders(function(err,data){ if (err) throw err;
рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдкрд░реАрдХреНрд╖рдг рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдпрд╣ рдореВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкрд╛рда
index.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ
; рдЪреВрдВрдХрд┐ рдпрд╣ рдирд╛рдо
Node.js рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ
рдирд┐рд╣рд┐рдд рд╣реИ , рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреЗрд╡рд▓ рдореВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
Blog-MtW.jhr рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдореЗрдВ рдореЗрд░реЗ рдлрд╝рд┐рдбреЛрдиреЗрдЯ рдмреНрд▓реЙрдЧ рдмреНрд▓реЙрдЧ рдЗрдХреЛ
( Ru.Blog.Mithgol ) рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдЧ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рдорд╛рд░реНрдЪ 2007 рд╕реЗ рдЬрдорд╛ рд╣реБрдИ рд╣реИрдВред
рдПрдХрд▓-рдХреЛрд░ рдкреЗрдВрдЯрд┐рдпрдо IV (2.2 рдЧреАрдЧрд╛рд╣рд░реНрдЯреНрдЬ) рдкрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╣реЗрдбрд░
рддреАрди рд╕реЗ рдЪрд╛рд░ рд╕реЗрдХрдВрдб
рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐
рд╕рдмрдлреАрд▓реНрдбреНрд╕ рдРрд░реЗ рдХреА рд╕рд░рд▓ рд░реАрдбрд┐рдВрдЧ рдХреЛ рдЙрд╕рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреЛ рдЕрдм рдЯрд┐рдкреНрдкрдгреА рдХреА рдЧрдИ рд╣реИ), рддреЛ рдпрд╣ рд╕рдордп рдЕрднреА рднреА рджреЛрдЧреБрдирд╛ рд╣реИред
рдпрд╣ рдПрдХ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐ рд╕рдореНрдореЗрд▓рди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдлрд┐рдбреЛрдиреЗрдЯ рд╕рд╛рдЗрдЯ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реМ рд╕реЗ рдЕрдзрд┐рдХ рдЧреВрдВрдЬ рд╕рдореНрдореЗрд▓рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдИ-рдореЗрд▓ рд╣реЗрдбрд░ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрд▓ рд╕рдордп рдХрдИ рдорд┐рдирдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рд▓реЗрдХрд┐рди рдлрд┐рдбреЛрдЯрдирд┐рдХ рдХреЛ рд╢рд╛рдпрдж рдпрд╣ рдпрд╛рдж рджрд┐рд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд▓реЛрдХрдкреНрд░рд┐рдп рдЧреЛрд▓реНрдбреЗрдб рдореЗрд▓ рдПрдбрд┐рдЯрд░ рдЧреЛрд▓реНрдбреЗрдб (рдЧреЛрд▓реНрдбреЗрдб +,
рдЧреЛрд▓реНрдбреЗрдб-рдПрдирдПрд╕рдПрдл) рдЗрдХреЛ рд╕рдореНрдореЗрд▓рдиреЛрдВ (рдЕрдкрдиреЗ рдХрд╛рдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ) рдХреЛ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рд╕реНрдХреИрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрдирдХреЗ рдирд╛рдо рдЕрдкрдиреА рдЫрдк рд╕реНрдХреНрд░реАрди рдкрд░ рд╕реНрдЯреЗрдЯрд╕ рдмрд╛рд░ рдореЗрдВ рдЗрддрдиреА рддреЗрдЬрд╝реА рд╕реЗ рдЪрдордХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдПрдХ рд╕реЗрдХрдВрдб рдХреЗ рдЕрдВрд╢ рдкреНрд░рддреНрдпреЗрдХ рдЦрд░реНрдЪ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдирд╣реАрдВред рдПрдХ рдХреЛ рдЕрдиреИрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдЕрдкреНрд░рд┐рдп рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдЖрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ: рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рд╢реНрд▓реЗрд╖рдг, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рддреЗрдЬ рд╡реА 8 рдЗрдВрдЬрди рдкрд░, рдкрд░рд┐рдорд╛рдг рдХреЗ рдзреАрдореЗ рдХреНрд░рдо рдХрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдФрд░ рдкрд░рд┐рдорд╛рдг рдХреЗ рд╕рд┐рд░реНрдл рдПрдХ рдХреНрд░рдо рд╕реЗ рднреА рдзреАрдорд╛ рдирд╣реАрдВред
рдпрд╣ рд╕рдВрджреЗрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдирд┐рдВрджрдиреАрдп рд╣реИ рдХрд┐ рдХрд╛рдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЧреЛрд▓реНрдбреЗрдб рдиреЗ рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рдлрд╛рдЗрд▓ рдирд╣реАрдВ рдкрдврд╝реА рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рд╣реЗрдбрд░ рд╕рдВрд░рдЪрдирд╛
FixedHeaderInfoStruct (рдЗрд╕рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдЗрдХреЛ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдореЗрдВ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛, рдФрд░ рдЕрдзрд┐рдХ рдЧреЛрд▓реНрдбреЗрдб
рдХрд╛рдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ
рдХрд░рддрд╛ рд╣реИ) - рд╕рдЪреНрдЪрд╛рдИ , рдореИрдВ рдЗрд╕ рд╕рдВрджреЗрд╣ рдХреА рди рддреЛ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рди рд╣реА рдЗрдирдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕
рд╕реАрд╡реАрдПрд╕ рдЧреЛрд▓реНрдбреЗрдб + рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдерд╛ред
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдХреЛрдб (JAM рд╣реЗрдбрд░реНрд╕
рдХрд╛ рд░реАрдбрд░ ) рдПрдХ рдореБрдлреНрдд рдПрдордЖрдИрдЯреА рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд
рдЬреАрдердм рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ред