public function table(nx,mv,x,v)
r="<table>"
r=r&"<tr><td><font style=""font:10pt Arial Black; color:#FF4040 "">FREQ (GHz)</td><td><font style=""font:10pt Arial Black; color:#FF4040 "">S<SUB>00</SUB> (dB)</td><td><font style=""font:10pt Arial Black; color:#FF4040 "">S<SUB>01</SUB> (dB)</td></tr>"

for i=0 to nx
r=r&"<tr>"&"<td width=150><font style=""font:10pt Arial Black; color:#404040 "">"&x(0,i)&"</td>"
for im=0 to mv
r=r&"<td width=150><font style=""font:10pt Arial Black; color:#404040 "">"&FormatNumber(-v(im,i),5)&"</td>"
next
r=r&"</tr>"
next
r=r&"</table>"
table=r
end function



Public Function Graph(dL,Gx,Gy,Ny,Ymax,Np,N,x,y)
on error resume next
dim xo(500),yo(500)
x0=x(0,0):x1=x(0,Np): y0=0: y1=ymax
call ScaleX(x(0,0),x(0,Np),Nx,x0,x1)
if Nx<=5 then Nx=2*Nx
if Nx>=14 then Nx=int(Nx/2)
dxw=Gx/2:dyw=Gy/2:xw=Gx*Nx:yw=Gy*Ny
LN=""
LN= ""
for i=0 to N
for j=0 to Np: xo(j)=x(i,j):yo(j)=y(i,j):next
LN=LN&Plot(i+1,dL,dxw,dyw,xw,yw,x0,y0,x1,y1,Np,xo,yo)
next
Graph=LN &Axes(Gx,Gy,x0,y0,x1,y1,Nx,Ny)
if ERR<>0 then msgbox "An error # "&ERR&" occured while plotting. Please review your data."

end function

function Axes(Gx,Gy,x0,y0,x1,y1,Nx,Ny)
on error resume next
rx="<TABLE border=0 width="&(Nx+1)*Gx&" height="&Gx*1.5&">"
ry="<TABLE border=0 width="&Gy& " height="&Ny*Gy  & ">"
'msgbox ry
'exit function
for iy=0 to Ny-1
y=y0+(y1-y0)*iy/Ny
ry=ry&"<TR><TD><FONT SIZE=1 COLOR=NAVY><B>"&FormatNumber(y,1)&"</TD></TR>"
next
rx=rx&"<TR>"
for ix=0 to Nx
x=x0+(x1-x0)*ix/Nx
rx=rx&"<TD width="&Gx&"><CENTER><FONT SIZE=1 COLOR=NAVY><B>"&FormatNumber(x,4)&"</TD>"
next
ry=ry&"</TABLE>"
rx=rx&"</TR></TABLE>"
'msgbox ry
Axes=ry&rx
end function

function U(xmin,ymin,xmax,ymax,i,x,y)
on error resume next
kv=chr(34)
if y>ymax then exit function
if y<ymin then exit function
if x>xmax then exit function
if x<xmin then exit function
if y=empty then ay="position:absolute;top:0 " else ay="position:absolute;top:"&y:end if
if x=empty then ax=";left:0 " else ax=";left:"&x: end if
U="<IMG SRC=s"&i&".bmp style="&chr(34)&ay&ax&chr(34)&">"
'US="/IMGO SRC=s"&i&".bmp style="&chr(34)&ay&ax&chr(34)&"/"
end function

Function LineDraw(xmin,ymin,xmax,ymax,ind,dL,x0,y0,x1,y1)
on error resume next
dx=x1-x0:dy=y1-y0
N=int(sqr(dx*dx+dy*dy)/dL):r=""
if N=0 then LineDraw=U(xmin,ymin,xmax,ymax,ind,x0,y0):exit function
for i=1 to N
x=x0+dx*i/N
y=y0+dy*i/N
r=r+U(xmin,ymin,xmax,ymax,ind,x,y)
next 
LineDraw=r
end function

Sub ReScale(dxw,dyw,xw,yw,x0,y0,x1,y1,x,y,xp,yp)
on error resume next
xp=dxw+xw*(x-x0)/(x1-x0)
yp=dyw+yw*(y-y0)/(y1-y0)
end sub

Function Plot(ind,dL,dxw,dyw,xw,yw,x0,y0,x1,y1,N,x,y)
on error resume next
LN=""
for i=1 to N
call ReScale(dxw,dyw,xw,yw,x0,y0,x1,y1,x(i-1),y(i-1),xp0,yp0)
call ReScale(dxw,dyw,xw,yw,x0,y0,x1,y1,x(i),y(i),xp1,yp1)
LN=LN& LineDraw(dxw,dyw,dxw+xw,dyw+yw,ind,dL,xp0,yp0,xp1,yp1)
next
Plot=LN
End Function

sub ScaleX(x0,x1,nxs,xs0,xs1)
on error resume next
dx=x1-x0
idxs=int(log(dx)/log(10)-0.5):dxs=10^idxs
xs0=dxs*int(x0/dxs):xs1=dxs*int(x1/dxs)
if xs1<x1 then xs1=xs1+dxs
nxs=int((xs1-xs0)/dxs+0.01)
end sub

