#!/usr/local/bin/yorick -batch
arg = get_argv();
{
 if   (numberof(arg)<2)
   { fname = "Risultati/"+"i5tdjii"+".out";
    hcp_file, "Risultati/test.ps";
    nomf = "i5tdj"; };
else
   { fname = "Risultati/"+ arg(2)+ ".out" ;
    hcp_file, "Risultati/"+ arg(2)+".ps";
    nomf = arg(2); };
}

file = open(fname);

// Print Comment Cards
    pp = array(0,5);
    line = rdline(file);
do {
    if (strmatch(line, "PP")) {
				 backup, file ;
				 read_n, file, pp;
				 line = rdline(file); }
    if (strmatch(line, "STRUCTURE SPECIFICATION")) break;
    write, line;
} while(line=rdline(file));

// case pp(1)=0 ..

{if (pp(1)==0)
    write, "I don't know what to do: no PP card !";

 else  if (pp(1)==1) {      /* Free space antenna */
// Find Impedence
do {
    if (strmatch(line, "ANTENNA INPUT")) break;
} while(line=rdline(file));
    line = rdline(file);
    line = rdline(file);
    line = rdline(file);
    imped = array(0.0, 12);
    read_n, file, imped;
   modz = sqrt(imped(7)^2 + imped(8)^2);
   gamma = sqrt(((imped(7)-52)^2 + imped(8)^2)/((imped(7)+52)^2 + imped(8)^2) );
   ros = (1+gamma)/(1-gamma);

// Find Gain
do {
    if (strmatch(line, "RADIATION PATTERNS")) break;
} while(line=rdline(file));
    line = rdline(file);
    line = rdline(file);
    line = rdline(file);
    line = rdline(file);
    fg = array(0.0, 10);
    read_n, file, fg;
//gain = strpart(line,38:46) ;

// Find back gain
    line = rdline(file);
do {
    if (strmatch(line, "RADIATION PATTERNS")) break;
} while(line=rdline(file));
    line = rdline(file);
    line = rdline(file);
    line = rdline(file);
    line = rdline(file);
    bg = array(0.0, 10);
    read_n, file, bg;

 fb = fg(5) - bg(5);


write, " ------------------------------------------------------------------";
// Find azimuth pattern
    line = rdline(file);
do {
    if (strmatch(line, "RADIATION PATTERNS")) break;
} while(line=rdline(file));
    line = rdline(file);
    line = rdline(file);
    azt = array(0.0, 11);
    azx  = array(0.0, 361);
    azy  = array(0.0, 361);
   for (i=1 ; i<362; ++i)
   {
    read_n, file, azt;
    azx(i)= azt(2); azy(i)= azt(5);
    };
// 180^ shift
    azx= azx-180;
    azy2  = array(0.0, 361);
    for (i=1 ; i<181 ; ++i)
     { azy2(i) = azy(i+179);
     };
    for (i=181 ; i<361 ; ++i)
     { azy2(i) = azy(i-180);
     };
     azy2(361)=azy(180); azx(361)=180;

// 3 db angle
{ if (fg(5)<3)
   az3db = 999;
  else {
    i = 0;
    do { i = i+1;
       } while ((i < 180) && (fg(5)-azy2(i+180)<3));
    az3db = (i-1)*2;
    }
}


// Find zenital pattern
    line = rdline(file);
do {
    if (strmatch(line, "RADIATION PATTERNS")) break;
} while(line=rdline(file));
    line = rdline(file);
    line = rdline(file);
    zet = array(0.0, 11);
    zex  = array(0.0, 361);
    zey  = array(0.0, 361);
   for (i=1 ; i<362; ++i)
   {
    read_n, file, zet;
    zex(i)= zet(1); zey(i)= zet(5);
    };

// 90^ shift
    zex= zex-180;
    zey2  = array(0.0, 361);
    zey2 = zey ;
    for (i=1 ; i<271 ; ++i)
     { zey2(i+90) = zey(i);
     };
    for (i=271 ; i<362 ; ++i)
     { zey2(i-270) = zey(i);
     };
     zey2(361)=zey(270);

// 3 db angle
{ if (fg(5)<3)
   ze3db = 999;  /* does not make sense */
  else
    {  i = 0;
    do { i = i+1;
       } while ((i < 180) && (fg(5)-zey2(i+180)<3)) ;
    ze3db = (i-1)*2;
     }
}

// get TIME
    line = rdline(file);
do {
    if (strmatch(line, "RUN TIME")) break;
} while(line=rdline(file));
time = strpart(line,15:21) ;


// Results printing
write, "  GAIN = " + swrite(format="%6.5lg", fg(5)) + " dBi   Ang. 3db = "+ swrite(format="%3.1i",az3db) + " degrees";
write, "  F/B  = " + swrite(format="%6.5lg", fb) + " dB";
write, "  Z    = " + swrite(format="%6.5lg", imped(7)) + " j" + swrite(format="%6.5lg", imped(8)) ;
write, "  |Z|  = " + swrite(format="%6.5lg", modz) + " Ohm";
write, "  SWR  = " + swrite(format="%6.5lg", ros) ;
write, " TIME  = "+ time + " sec.";
write, " ";

// Plotting
{ if (pp(2)==0) {                 /* Cartesian */
window, wait=1, style="boxed.gs";
limits, -180,180;
range, -25,30;
plg, azy2, azx, legend ="GAIN = " + swrite(format="%6.5lg", fg(5)) + " dBi", color="red", marks = 0 ;
//plt, "Azimuth              GAIN = " + swrite(format="%6.5lg", fg(5)) + " dBi",-150,25, tosys=1 ;
pltitle,"Azimuth   GAIN = " + swrite(format="%6.5lg", fg(5)) + " dBi" ;
xxx=xytitles( "Degrees", "dBi",[0.025,0.025]);
window, 0;
hcp;


window, 1, wait=1, style="boxed.gs";
limits, -25,30;
range, -180,180;
plg, zex, zey2, legend ="Zenith GAIN = " + swrite(format="%6.5lg", fg(5)) + " dBi", color="blue" , marks = 0;
//plt, "Zenith  GAIN = " + swrite(format="%6.5lg", fg(5)) + " dBi",-1,150, tosys=1 ;
pltitle,"Zenith  GAIN = " + swrite(format="%6.5lg", fg(5)) + " dBi";
xxx=xytitles( "dBi", "Degrees",[0.025,0.025]);
window, 1;
hcp;
	     }
 else if (pp(2)==1) {             /* Polar linear absolute */

window, 2, wait=1, style="boxed.gs";
limits, -60,60;
range, -60,60;
gridxy, 2,2;
teta = span (0, 2*pi,361);
x = 60*cos(teta);
y = 60*sin(teta);
plg, x,y , marks = 0, legend = "Azimuth  "+ nomf  ;
plt, "+30dBi", 0,60, tosys=1 ;
x = 50*cos(teta);
y = 50*sin(teta);
plg, x,y , marks = 0,legend = "GAIN   = " + swrite(format="%6.5lg", fg(5)) + " dBi"  ;
plt, "+20dBi", 0,50, tosys=1 ;
x = 40*cos(teta);
y = 40*sin(teta);
plg, x,y , marks = 0, legend = "A. 3db = " + swrite(format="%3.1i", az3db) + " deg." ;
plt, "+10dBi", 0,40, tosys=1 ;
x = 30*cos(teta);
y = 30*sin(teta);
plg, x,y , marks = 0, color="green", legend = "  F/B  = " + swrite(format="%6.5lg", fb) + " dB"  ;
plt, "0 dBi", 0,30, tosys=1 ;
x = 20*cos(teta);
y = 20*sin(teta);
plg, x,y , marks = 0, legend = "  Z    = " + swrite(format="%6.5lg", imped(7)) + " j" + swrite(format="%6.5lg", imped(8))   ;
plt, "-10dBi", 0,20, tosys=1 ;
x = 10*cos(teta);
y = 10*sin(teta);
plg, x,y , marks = 0, legend = "  |Z|  = " + swrite(format="%6.5lg", modz) + " Ohm"   ;
plt, "-20dBi", 0,10, tosys=1 ;

for (i=1; i<362; ++i) {if (azy2(i)< -30) azy2(i)=-30; };
x= (azy2 + 30) * cos(azx*2*pi/360);
y= (azy2 + 30) * sin(azx*2*pi/360);
plg, x,y , color = "red", marks = 0,legend = "  SWR  = " + swrite(format="%6.5lg", ros)   ;
//plt, "Azimuth G = " + swrite(format="%6.5lg", fg(5)) + " dBi",-60,55, tosys=1 ;
pltitle,"Azimuth G = " + swrite(format="%6.5lg", fg(5)) + " dBi";
hcp;

window, 3, wait=1, style="boxed.gs";
limits, -60,60;
range, -60,60;
gridxy, 2,2;
// teta = span (0, 2*pi,361);
x = 60*cos(teta);
y = 60*sin(teta);
plg, x,y , marks = 0, legend = "Zenith  "+ nomf  ;
plt, "+30dBi", 0,60, tosys=1 ;
x = 50*cos(teta);
y = 50*sin(teta);
plg, x,y , marks = 0, legend = "GAIN   = " + swrite(format="%6.5lg", fg(5)) + " dBi"   ;
plt, "+20dBi", 0,50, tosys=1 ;
x = 40*cos(teta);
y = 40*sin(teta);
plg, x,y , marks = 0, legend = "A. 3db = " + swrite(format="%3.1i", ze3db) + " deg." ;
plt, "+10dBi", 0,40, tosys=1 ;
x = 30*cos(teta);
y = 30*sin(teta);
plg, x,y , marks = 0, color="green", color="green",  legend = "  F/B  = " + swrite(format="%6.5lg", fb) + " dB"   ;
plt, "0 dBi", 0,30, tosys=1 ;
x = 20*cos(teta);
y = 20*sin(teta);
plg, x,y , marks = 0,  legend = "  Z    = " + swrite(format="%6.5lg", imped(7)) + " j" + swrite(format="%6.5lg", imped(8))   ;
plt, "-10dBi", 0,20, tosys=1 ;
x = 10*cos(teta);
y = 10*sin(teta);
plg, x,y , marks = 0,  legend = "  |Z|  = " + swrite(format="%6.5lg", modz) + " Ohm"    ;
plt, "-20dBi", 0,10, tosys=1 ;

for (i=1; i<362; ++i) {if (zey2(i)< -30) zey2(i)=-30; };
x= (zey2 + 30) * sin(zex*2*pi/360);
y= (zey2 + 30) * cos(zex*2*pi/360);
plg, x,y , color = "blue", marks = 0 , legend = "  SWR  = " + swrite(format="%6.5lg", ros)   ;
//plt, "Zenith G = " + swrite(format="%6.5lg", fg(5)) + " dBi",-60,55, tosys=1 ;
pltitle,"Zenith G = " + swrite(format="%6.5lg", fg(5)) + " dBi";
hcp;
hcp_finish;
window, 3;
	   }
 else if (pp(2)==2)              /* Polar ARRL relative */
    {
window, 2, wait=1, style="boxed.gs";
spa = exp(0.43429/.98*(fg(5)/10));
limits, -spa,spa;
range, -spa,spa;
gridxy, 2,2;
teta = span (0, 2*pi,361);
x = spa*cos(teta);
y = spa*sin(teta);
plg, x,y , marks = 0, legend = "Azimuth  "+ nomf  ;
d=fg(5)-3;
spa = exp(0.43429/.98*d/10);
x = spa*cos(teta);
y = spa*sin(teta);
plg, x,y , marks = 0,legend = "GAIN   = " + swrite(format="%6.5lg", fg(5)) + " dBi"  ;
plt, "-3dB", 0,spa, tosys=1 ;
d=fg(5)-6;
spa = exp(0.43429/.98*d/10);
x = spa*cos(teta);
y = spa*sin(teta);
plg, x,y , marks = 0,legend = "A. 3db = " + swrite(format="%3.1i", az3db) + " deg."  ;
plt, "-6dB", 0,spa, tosys=1 ;
d=fg(5)-10;
spa = exp(0.43429/.98*d/10);
x = spa*cos(teta);
y = spa*sin(teta);
plg, x,y , marks = 0,legend = "  F/B  = " + swrite(format="%6.5lg", fb) + " dB"     ;
plt, "-10dB", 0,spa, tosys=1 ;
d=fg(5)-20;
spa = exp(0.43429/.98*d/10);
x = spa*cos(teta);
y = spa*sin(teta);
plg, x,y , marks = 0,legend = "  Z    = " + swrite(format="%6.5lg", imped(7)) + " j" + swrite(format="%6.5lg", imped(8))    ;
plt, "-20dB", 0,spa, tosys=1 ;
d=fg(5)-30;
spa = exp(0.43429/.98*d/10);
x = spa*cos(teta);
y = spa*sin(teta);
plg, x,y , marks = 0,legend = "  |Z|  = " + swrite(format="%6.5lg", modz) + " Ohm"     ;
plt, "-30dB", 0,spa, tosys=1 ;
d=fg(5)-40;
spa = exp(0.43429/.98*d/10);
x = spa*cos(teta);
y = spa*sin(teta);
plg, x,y , marks = 0,legend = "  SWR  = " + swrite(format="%6.5lg", ros)    ;
plt, "-40dB", 0,spa, tosys=1 ;

x= exp(.43439/.98*azy2/10)  * cos(azx*2*pi/360);
y= exp(.43439/.98*azy2/10)  * sin(azx*2*pi/360);
plg, x,y , color = "red", marks = 0,legend = " "   ;

xxx=xytitles( "ARRL relative","",[0.025,0.025]);
pltitle,"Azimuth G = " + swrite(format="%6.5lg", fg(5)) + " dBi";
hcp;
window, 2;


window, 3, wait=1, style="boxed.gs";
spa = exp(0.43429/.98*(fg(5)/10));
limits, -spa,spa;
range, -spa,spa;
gridxy, 2,2;
teta = span (0, 2*pi,361);
x = spa*cos(teta);
y = spa*sin(teta);
plg, x,y , marks = 0, legend = "Azimuth  "+ nomf  ;
d=fg(5)-3;
spa = exp(0.43429/.98*d/10);
x = spa*cos(teta);
y = spa*sin(teta);
plg, x,y , marks = 0,legend = "GAIN   = " + swrite(format="%6.5lg", fg(5)) + " dBi"  ;
plt, "-3dB", 0,spa, tosys=1 ;
d=fg(5)-6;
spa = exp(0.43429/.98*d/10);
x = spa*cos(teta);
y = spa*sin(teta);
plg, x,y , marks = 0,legend = "A. 3db = " + swrite(format="%3.1i", az3db) + " deg."  ;
plt, "-6dB", 0,spa, tosys=1 ;
d=fg(5)-10;
spa = exp(0.43429/.98*d/10);
x = spa*cos(teta);
y = spa*sin(teta);
plg, x,y , marks = 0,legend = "  F/B  = " + swrite(format="%6.5lg", fb) + " dB"     ;
plt, "-10dB", 0,spa, tosys=1 ;
d=fg(5)-20;
spa = exp(0.43429/.98*d/10);
x = spa*cos(teta);
y = spa*sin(teta);
plg, x,y , marks = 0,legend = "  Z    = " + swrite(format="%6.5lg", imped(7)) + " j" + swrite(format="%6.5lg", imped(8))    ;
plt, "-20dB", 0,spa, tosys=1 ;
d=fg(5)-30;
spa = exp(0.43429/.98*d/10);
x = spa*cos(teta);
y = spa*sin(teta);
plg, x,y , marks = 0,legend = "  |Z|  = " + swrite(format="%6.5lg", modz) + " Ohm"     ;
plt, "-30dB", 0,spa, tosys=1 ;
d=fg(5)-40;
spa = exp(0.43429/.98*d/10);
x = spa*cos(teta);
y = spa*sin(teta);
plg, x,y , marks = 0,legend = "  SWR  = " + swrite(format="%6.5lg", ros)    ;
plt, "-40dB", 0,spa, tosys=1 ;

x= exp(.43439/.98*zey2/10)  * sin(zex*2*pi/360);
y= exp(.43439/.98*zey2/10)  * cos(zex*2*pi/360);
plg, x,y , color = "blue", marks = 0,legend = " "   ;

xxx=xytitles( "ARRL relative","",[0.025,0.025]);
pltitle,"Azimuth G = " + swrite(format="%6.5lg", fg(5)) + " dBi";
hcp;
hcp_finish;
window, 3;

	   }

			};  /* end if plotting*/
write, "fine";
 pause, 240000;
 }                  /* end  free space antenna */


// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

else if (pp(1)==2) { write, "Antenna over ground\n";
// Find Impedence
do {
    if (strmatch(line, "ANTENNA INPUT")) break;
} while(line=rdline(file));
    line = rdline(file);
    line = rdline(file);
    line = rdline(file);
    imped = array(0.0, 12);
    read_n, file, imped;
   modz = sqrt(imped(7)^2 + imped(8)^2);
   gamma = sqrt(((imped(7)-52)^2 + imped(8)^2)/((imped(7)+52)^2 + imped(8)^2) );
   ros = (1+gamma)/(1-gamma);


// Find Gain

// Find zenital pattern
    line = rdline(file);
do {
    if (strmatch(line, "RADIATION PATTERNS")) break;
} while(line=rdline(file));
    line = rdline(file);
    line = rdline(file);
    zet = array(0.0, 11);
    zex  = array(0.0, 181);
    zey  = array(0.0, 181);
   for (i=1 ; i<182; ++i)
   {
    read_n, file, zet;
    zex(i)= zet(1); zey(i)= zet(5);
    };

//  Reverse
 zex2 = span(180,0,181);
// Find Forward Gain
 indy = sort(zey);
 gain = zey(indy(181));

azg = 181-indy(181);

// Find Backward Gain
fb = 0.0                    /* !!!!!  not implemented yet !! */


// 3 db angle
    ze3dbm = 0; ze3dbp = 0;
    i = indy(181);
    do { i = i+1;
 } while ((i < 91) && gain-zey(i)<3);

   ze3dbp = i-indy(181);
    i = indy(181);
    do { i = i-1;
 } while ((i > -90) && gain-zey(i)<3);
   ze3dbm = indy(181)-i;

   ze3db = ze3dbm + ze3dbp;



// get TIME
    line = rdline(file);
do {
    if (strmatch(line, "RUN TIME")) break;
} while(line=rdline(file));
time = strpart(line,15:21) ;


// Results printing
write, "  GAIN = " + swrite(format="%6.5lg",gain) + " dBi   at  "+ swrite(format="%3.1i",azg) + " deg. elevation";
write, " Ag.3Db=" + swrite(format="%3.1i",ze3db) + " deg.";
//write, "  F/B  = " + swrite(format="%6.5lg", fb) + " dB";
write, "  Z    = " + swrite(format="%6.5lg", imped(7)) + " j" + swrite(format="%6.5lg", imped(8)) ;
write, "  |Z|  = " + swrite(format="%6.5lg", modz) + " Ohm";
write, "  SWR  = " + swrite(format="%6.5lg", ros) ;
write, " TIME  = "+ time + " sec.";
write, " ";

// Plotting
{ if (pp(2)==0) {               /* Cartesian */
window, 0, wait=1, style="boxed.gs";
limits, -25,30;
range, 0,180;
plg, zex2, zey, legend ="GAIN = " + swrite(format="%6.5lg", gain) + " dBi  at "+ swrite(format="%3.1i",azg) + " degrees", color="blue" , marks = 0;
//plt, "G = " + swrite(format="%6.5lg", gain) + " dBi  at "+ swrite(format="%3.1i",azg) + " degrees",-1,170, tosys=1 ;
pltitle,"G = " + swrite(format="%6.5lg", gain) + " dBi  at "+ swrite(format="%3.1i",azg) + " degrees";
xxx=xytitles( "dBi","Degrees",[0.025,0.025]);
hcp;
window, 0;
	     }
 else if (pp(2)==1) {             /* Polar linear */

window, 1, wait=1, style="boxed.gs";
limits, -60,60;
range, 0,120;
gridxy, 2,2;
teta = span (0, 2*pi,361);
x = 60*cos(teta);
y = 60*sin(teta);
plg, x,y , marks = 0, legend = "Zenith  "+ nomf  ;
plt, "+30dBi", 0,60, tosys=1 ;
x = 50*cos(teta);
y = 50*sin(teta);
plg, x,y , marks = 0,legend = "GAIN   = " + swrite(format="%6.5lg", gain) + " dBi at  "+ swrite(format="%3.1i",azg) + " deg. el"  ;
plt, "+20dBi", 0,50, tosys=1 ;
x = 40*cos(teta);
y = 40*sin(teta);
plg, x,y , marks = 0, legend = "A. 3db = " + swrite(format="%3.1i", ze3db) + " deg." ;
plt, "+10dBi", 0,40, tosys=1 ;
x = 30*cos(teta);
y = 30*sin(teta);
plg, x,y , marks = 0, color="green", legend = "  F/B  = " + swrite(format="%6.5lg", fb) + " dB"  ;
plt, "0 dBi", 0,30, tosys=1 ;
x = 20*cos(teta);
y = 20*sin(teta);
plg, x,y , marks = 0, legend = "  Z    = " + swrite(format="%6.5lg", imped(7)) + " j" + swrite(format="%6.5lg", imped(8))   ;
plt, "-10dBi", 0,20, tosys=1 ;
x = 10*cos(teta);
y = 10*sin(teta);
plg, x,y , marks = 0, legend = "  |Z|  = " + swrite(format="%6.5lg", modz) + " Ohm"   ;
plt, "-20dBi", 0,10, tosys=1 ;

for (i=1; i<182; ++i) {if (zey(i)< -30) zey(i)=-30; };
x= (zey + 30) * cos(zex*2*pi/360);
y= (zey + 30) * sin(zex*2*pi/360);
plg, x,y , color = "red", marks = 0,legend = "  SWR  = " + swrite(format="%6.5lg", ros)   ;
//plt, "Zenith G = " + swrite(format="%6.5lg", gain) + " dBi at  "+ swrite(format="%3.1i",azg) + " deg. el",-35,80, tosys=1 ;
pltitle,"Zenith G = " + swrite(format="%6.5lg", gain) + " dBi at  "+ swrite(format="%3.1i",azg) + " deg. el";
window, 1;
hcp;
	   }
 else if (pp(2)==2)              /* Polar ARRL relative */
    {
window, 1, wait=1, style="boxed.gs";
spa = exp(0.43429/.98*(gain/10));
limits, -spa,spa;
range, 0,2*spa;
gridxy, 2,2;
teta = span (0, 2*pi,361);
x = spa*cos(teta);
y = spa*sin(teta);
plg, x,y , marks = 0, legend = "Azimuth  "+ nomf  ;
d=gain-3;
spa = exp(0.43429/.98*d/10);
x = spa*cos(teta);
y = spa*sin(teta);
plg, x,y , marks = 0,legend = "GAIN   = " + swrite(format="%6.5lg", gain) + " dBi at  "+ swrite(format="%3.1i",azg) + " deg. el"  ;
plt, "-3dB", 0,spa, tosys=1 ;
d=gain-6;
spa = exp(0.43429/.98*d/10);
x = spa*cos(teta);
y = spa*sin(teta);
plg, x,y , marks = 0,legend = "A. 3db = " + swrite(format="%3.1i", ze3db) + " deg."  ;
plt, "-6dB", 0,spa, tosys=1 ;
d=gain-10;
spa = exp(0.43429/.98*d/10);
x = spa*cos(teta);
y = spa*sin(teta);
plg, x,y , marks = 0,legend = "  F/B  = " + swrite(format="%6.5lg", fb) + " dB"     ;
plt, "-10dB", 0,spa, tosys=1 ;
d=gain-20;
spa = exp(0.43429/.98*d/10);
x = spa*cos(teta);
y = spa*sin(teta);
plg, x,y , marks = 0,legend = "  Z    = " + swrite(format="%6.5lg", imped(7)) + " j" + swrite(format="%6.5lg", imped(8))    ;
plt, "-20dB", 0,spa, tosys=1 ;
d=gain-30;
spa = exp(0.43429/.98*d/10);
x = spa*cos(teta);
y = spa*sin(teta);
plg, x,y , marks = 0,legend = "  |Z|  = " + swrite(format="%6.5lg", modz) + " Ohm"     ;
plt, "-30dB", 0,spa, tosys=1 ;
d=gain-40;
spa = exp(0.43429/.98*d/10);
x = spa*cos(teta);
y = spa*sin(teta);
plg, x,y , marks = 0,legend = "  SWR  = " + swrite(format="%6.5lg", ros)    ;
plt, "-40dB", 0,spa, tosys=1 ;

x= exp(.43439/.98*zey/10)  * cos(zex*2*pi/360);
y= exp(.43439/.98*zey/10)  * sin(zex*2*pi/360);
plg, x,y , color = "blue", marks = 0,legend = " "   ;

xxx=xytitles( "ARRL relative","",[0.025,0.025]);
pltitle,"Azimuth G = " + swrite(format="%6.5lg", gain) + " dBi";
hcp;
hcp_finish;
window, 1;

	   }

			};  /* end if plotting*/

write, "fine";
 pause, 240000;

 }                  /* end  antenna over ground */

// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

else if (pp(1)==3) { write, "Frequency sweep of an antenna in free space\n";
// Find intervall and steps
    fr = array(0.,10);
    fri = array(0,10);
    line = rdline(file);
do {
    if (strmatch(line, "***** DATA CARD"))
			         break;
				 read_n, file, fr ;
} while(line=rdline(file));

  fri=int(fr);


  fg = array(0.0, 10);
  bg = array(0.0, 10);

  rosv = array(0.0, fri(3));
  fgain = array(0.0, fri(3));
  bgain = array(0.0, fri(3));
  fb_ratio = array(0.0, fri(3));
  freq = array(0.0, fri(3));
  real = array(0.0, fri(3));
  imag = array(0.0, fri(3));
  imped = array(0.0, 12);

for (i=1; i<fri(3)+1; ++i) {

//*************************  loop
// Find Impedence
do {
    if (strmatch(line, "ANTENNA INPUT")) break;
} while(line=rdline(file));
    line = rdline(file);
    line = rdline(file);
    line = rdline(file);
    read_n, file, imped;
/*    modz = sqrt(imped(7)^2 + imped(8)^2);
{   if (modz > 52)  ros =  modz / 52 ;
    else ros = 52 / modz ;}*/
   gamma = sqrt(((imped(7)-52)^2 + imped(8)^2)/((imped(7)+52)^2 + imped(8)^2) );
   ros = (1+gamma)/(1-gamma);

//write, i,"...............";


// Find Gain
do {
    if (strmatch(line, "RADIATION PATTERNS")) break;
} while(line=rdline(file));
    line = rdline(file);
    line = rdline(file);
    line = rdline(file);
    line = rdline(file);
    read_n, file, fg;

    freq(i) =  fr(6)+(i-1)*fr(7);
    fgain(i) = fg(5);
    rosv(i) = ros;
    real(i) = imped(7);
    imag(i) = imped(8);

//************************* fine loop
						     }

write, "--------------------------------------";
for (i=1; i<fri(3)+1; ++i) {
// Find back gain
    line = rdline(file);
do {
    if (strmatch(line, "RADIATION PATTERNS")) break;
} while(line=rdline(file));
    line = rdline(file);
    line = rdline(file);
    line = rdline(file);
    line = rdline(file);
    read_n, file, bg;
//write, fr(6)+(i-1)*fr(7),  bg(5);

    bgain(i) = bg(5);
			}

   fb_ratio= fgain-bgain;

// get TIME
    line = rdline(file);
do {
    if (strmatch(line, "RUN TIME")) break;
} while(line=rdline(file));
time = strpart(line,15:21) ;
write, time, " sec.";

// Plotting
window, 0, wait=1, style="boxed.gs";
range,min(fgain)-2,max(fgain)+2 ;
plg,  fgain,freq-freq(1),   legend ="Forward gain ", marks = 0, color="green";
pltitle, "Forward Gain";
xxx=xytitles( "Freq."+ swrite(format="%6.3f", freq(1)) +" MHz", "dBi",[0.025,0.025]);
hcp;
window, 0;

window, 1, wait=1, style="boxed.gs";
range,1,max(rosv)+1 ;
plg,  rosv,freq-freq(1),   legend ="S.W.R. ", marks = 0, color="red";
pltitle, "S.W.R." ;
xxx=xytitles( "Freq."+ swrite(format="%6.3f", freq(1)) +" MHz", "N.",[0.025,0.025]);
hcp;
window, 1;

window, 2, wait=1, style="boxed.gs";
range,min(bgain)-2,max(bgain)+2 ;
plg,  bgain,freq-freq(1),   legend ="Back gain ", marks = 0;
pltitle, "Back gain" ;
xxx=xytitles( "Freq."+ swrite(format="%6.3f", freq(1)) +" MHz", "dBi",[0.025,0.025]);
hcp;
window, 2;

window, 3, wait=1, style="boxed.gs";
range,min(fb_ratio)-2,max(fb_ratio)+2 ;
plg,  fb_ratio,freq-freq(1),   legend ="F/B ", marks = 0;
pltitle, "F/B" ;
xxx=xytitles( "Freq."+ swrite(format="%6.3f", freq(1)) +" MHz", "dB",[0.025,0.025]);
hcp;
window, 3;

window, 4, wait=1, style="boxed.gs";
pltitle, "Z on Smith chart" ;
limits, -2,2;
range, -2,2;
gridxy, 0,2;
teta = span (0, 2*pi,361);
x = 2*cos(teta);
y = 2*sin(teta);
plg, x,y , marks = 0, legend = "Smith chart"  ;
x = 1*cos(teta);
y = 1*sin(teta)+1;
plg, x,y , marks = 0, color="blue",legend=""  ;
x = (2./3.)*cos(teta);
y = (2./3.)*sin(teta)+2-(2./3.);
plg, x,y , marks = 0 , color="black",legend=""  ;
x = (2./4.)*cos(teta);
y = (2./4.)*sin(teta)+2-(2./4.);
plg, x,y , marks = 0 , color="black",legend=""  ;
x = (2./5.)*cos(teta);
y = (2./5.)*sin(teta)+2-(2./5.);
plg, x,y , marks = 0 , color="black",legend=""  ;
x = (2./10.)*cos(teta);
y = (2./10.)*sin(teta)+2-(2./10.);
plg, x,y , marks = 0 , color="black",legend=""  ;
x = (2./20.)*cos(teta);
y = (2./20.)*sin(teta)+2-(2./20.);
plg, x,y , marks = 0 , color="black",legend=""  ;
x = (2.*(1./(1+0.5)))*cos(teta);
y = (2.*(1./(1+0.5)))*sin(teta)+2-(2.*(1./(1+0.5)));
plg, x,y , marks = 0 , color="black" ,legend="" ;
x = (2.*(1./(1+0.2)))*cos(teta);
y = (2.*(1./(1+0.2)))*sin(teta)+2-(2.*(1./(1+0.2)));
plg, x,y , marks = 0 , color="black",legend=""   ;

//teta = span (0, 2*pi,361);
//teta(270:361)= 0. ;
xx=array(0.,127);
yy=array(0.,127);

x = 1*cos(teta)+1;
y = 1*sin(teta)+2;
x(308:361)=x(308);
y(308:361)=y(308);  /* lazy boy !! */
plg, x,y , marks = 0 ,legend="" ;
x = 1*cos(teta)-1;
y = 1*sin(teta)+2;
for (i=1;i<128;++i){
 xx(i)=x(i+233);
 yy(i)=y(i+233); }; /* lazy boy !! */
plg, xx,yy , marks = 0 ,legend="" ;

x = 2*cos(teta)+2;
y = 2*sin(teta)+2;
plg, x,y , marks = 0 ,legend="" ;
x = 2*cos(teta)-2;
y = 2*sin(teta)+2;
plg, x,y , marks = 0 ,legend=""  ;

x = 2*1/.5*cos(teta)+2*1/.5;
y = 2*1/.5*sin(teta)+2;
x(234:361)=x(234);
y(234:361)=y(234);  /* lazy boy !! */
plg, x,y , marks = 0 ,legend="" ;
x = 2*1/.5*cos(teta)-2*1/.5;
y = 2*1/.5*sin(teta)+2;
xx=array(0.,127);
yy=array(0.,127);
for (i=1;i<53;++i){
 xx(i)=x(i+307);
 yy(i)=y(i+307); }; /* lazy boy !! */
plg, xx,yy , marks = 0 ,legend="" ;

teta = span (0, 2*pi,720);
x = 2*1/.2*cos(teta)+2*1/.2;
y = 2*1/.2*sin(teta)+2;
x(406:720)=x(406);
y(406:720)=y(406);  /* lazy boy !! */
plg, x,y , marks = 0 ,legend="" ;
x = 2*1/.2*cos(teta)-2*1/.2;
y = 2*1/.2*sin(teta)+2;
xx=array(0.,127);
yy=array(0.,127);
for (i=1;i<46;++i){
 xx(i)=x(i+674);
 yy(i)=y(i+674); }; /* lazy boy !! */
plg, xx,yy , marks = 0 ,legend=""  ;

// Normalizzazione
real = real / 52.
imag = imag / 52.

rp1 = real + 1. ; /* Z + 1 */
rm1 = real - 1. ; /* Z - 1 */
den = rp1 * rp1 + imag * imag ;
real = (rm1 * rp1 + imag * imag) / den ;
imag = imag * (rp1 - rm1) / den;
plg, imag * 2 , real * 2 , marks = 0, color = "red", width=5., type="dot",legend=""  ;

hcp;
window, 4;


write, "fine";
pause, 240000;
}

}		    /* end main if */
//
close, file;
quit;
