.adp starts it's life as an html page and then code is added in (you
can simply rename and .html page to .adp and have a working .adp
page that doesn't do anything special)
for example:
<%
set somevar [some_tcl_function somedata]
%>
<html>
<body>
<%=$somevar%>
</body>
</html>
.tcl starts life as a tcl script and then outputs html
for example:
ReturnHeaders
set somevar [some_tcl_function somedata]
ns_write "<html>
<body>
$somevar
</body>
</html>
"