Frames

<..frames..>
 \def\HorFrames{\def\:tempa{cols}\:Frames}
 \def\VerFrames{\def\:tempa{rows}\:Frames}
 \Odef\:Frames[#1]#2{%
    \PushStack\Frm:Stc{</frameset>}%
    \HCode{<frameset\Hnewline \:tempa="#2" #1>}}
 \def\NoFrames{%
    \PopStack\Frm:Stc\:temp
    \PushStack\Frm:Stc{</body></noframes></frameset>}
    \HCode{<noframes><body>}}
 \def\EndFrames{\PopStack\Frm:Stc\:tempc \HCode{\:tempc}}
 \Odef\Frame[#1]#2{{\def\HREF:{ src=}\def\tag:A{frame}%
                    \def\empty:lnk{ /}\Link[#1]{#2}{}}}
 -_-_-

Frames may be external or embedded. The embeded don’t need alternative for browsers that don’t recognize them.

<..framesNO..>
 \def\p:Frames{\csname <.live.>\file:id\endcsname
    \xdef:cs{<.live.>\file:id}{<.noframes noexpand.><./HCode NOFRAMES.>}%
    \let\:Frames=\sb:Frames  \sb:Frames  }
 \let\:Frames=\p:Frames
 \Odef\sb:Frames[#1]#2{\HCode{<frameset\Hnewline \:tempa="#2" #1>}}
 -_-_-

FrameSet can get the onLoad attribute.

<..initiate frames..>
 \let\:Frames=\p:Frames
 -_-_-

The \noexpand below is for getting the same definition as ‘\def\:temp{|</HCode NOFRAMES|>}’ above.

<..noframes noexpand..>
 \noexpand -_-_-

<../HCode NOFRAMES..>
 \HCode{<noframes>}%
 -_-_-

<..framesNO..>+
 \def\end:frames{\b:BODY\noexpand\HCode{\expandafter
    \ifx \csname <.live.>\file:id\endcsname\:temp
          </noframes></frameset>
    \fi}\b:HTML}
 -_-_-