2017-10-07 03:24:16 +02:00
|
|
|
--- src/input.c.orig 2005-07-10 09:16:31 UTC
|
|
|
|
+++ src/input.c
|
2017-10-28 18:15:16 +02:00
|
|
|
@@ -16,7 +16,7 @@ manually!
|
2005-07-20 16:58:46 +02:00
|
|
|
*/
|
2017-10-07 03:24:16 +02:00
|
|
|
|
2005-07-20 16:58:46 +02:00
|
|
|
#include <stdio.h>
|
|
|
|
-#include <malloc.h>
|
2017-10-28 18:15:16 +02:00
|
|
|
+#include <string.h>
|
2005-07-20 16:58:46 +02:00
|
|
|
#include <math.h>
|
|
|
|
#include "nrutil.h"
|
|
|
|
#include "yagi.h"
|
2017-10-28 18:15:16 +02:00
|
|
|
@@ -29,12 +29,14 @@ int main(int argc, char **argv)
|
|
|
|
double min_f, max_f, step_f, angular_step;
|
|
|
|
int elements, driven, i, fixed_diameter, boom, parasitic, c, hflg=0, errflg=0;
|
|
|
|
double scale_factor;
|
|
|
|
- char response, *filename, *notes, *type, data_entry;
|
|
|
|
+ char response, *filename, *notes, *type, *str, data_entry;
|
2017-10-07 03:24:16 +02:00
|
|
|
FILE *fp;
|
|
|
|
|
|
|
|
- filename = string(0L, 1000L);
|
|
|
|
- notes = string(0L, 1000L);
|
2017-10-28 18:15:16 +02:00
|
|
|
- type = string(0L, 1000L);
|
|
|
|
+#define MAXINPUTLINE 1000L
|
2017-10-07 03:24:16 +02:00
|
|
|
+ filename = string(0L, MAXINPUTLINE);
|
|
|
|
+ notes = string(0L, MAXINPUTLINE);
|
2017-10-28 18:15:16 +02:00
|
|
|
+ type = string(0L, MAXINPUTLINE);
|
|
|
|
+ str = string(0L, MAXINPUTLINE);
|
2017-10-07 03:24:16 +02:00
|
|
|
|
|
|
|
while ((c = getoptions(argc,argv,"h")) != -1)
|
2017-10-28 18:15:16 +02:00
|
|
|
switch (c)
|
|
|
|
@@ -56,56 +58,65 @@ int main(int argc, char **argv)
|
2017-10-07 03:24:16 +02:00
|
|
|
printf("\nThis program asks for length, diameter and position of antenna elements then\n");
|
|
|
|
printf("writes them to a file you specify. Data is written in m (metres)\n \n");
|
|
|
|
printf("Enter any notes on this design (up to 400 characters): ");
|
|
|
|
- gets(notes);
|
|
|
|
- printf("Enter a filename to write data to ");
|
|
|
|
- gets(filename);
|
|
|
|
- printf("Enter the centre frequency in MHz ");
|
2017-10-28 18:15:16 +02:00
|
|
|
- scanf("%lf", &frequency);
|
2017-10-07 03:24:16 +02:00
|
|
|
+ fgets(notes, MAXINPUTLINE-1, stdin);
|
2017-10-28 18:15:16 +02:00
|
|
|
+ notes[strcspn(notes, "\n")] = '\0';
|
2017-10-07 03:24:16 +02:00
|
|
|
+ printf("Enter a filename to write data to ");
|
|
|
|
+ fgets(filename, MAXINPUTLINE-1, stdin);
|
2017-10-28 18:15:16 +02:00
|
|
|
+ filename[strcspn(filename, "\n")] = '\0';
|
2017-10-07 03:24:16 +02:00
|
|
|
+ printf("Enter the centre frequency in MHz ");
|
2017-10-28 18:15:16 +02:00
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%lf", &frequency);
|
2017-10-07 03:24:16 +02:00
|
|
|
printf("Enter the minimum frequency in MHz ");
|
2017-10-28 18:15:16 +02:00
|
|
|
- scanf("%lf", &min_f);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%lf", &min_f);
|
|
|
|
printf("Enter the maximum frequency in MHz ");
|
|
|
|
- scanf("%lf", &max_f);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%lf", &max_f);
|
|
|
|
printf("Enter the frequency steps in MHz ");
|
|
|
|
- scanf("%lf", &step_f);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%lf", &step_f);
|
|
|
|
if(min_f > frequency)
|
|
|
|
nrerror("The minimum frequency has been set higher than the centre frequency");
|
|
|
|
if(max_f < frequency)
|
|
|
|
nrerror("The maximum frequency has been set lower than the centre frequency");
|
|
|
|
printf("\nData can be entered in imperial (inches) metric (mm) or wavelengths (lambda)\n");
|
|
|
|
printf("Please enter i (for imperial), m (for metric) or w (for wavelengths). ");
|
|
|
|
- scanf("%c", &data_entry);
|
|
|
|
- scanf("%c", &data_entry);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%c", &data_entry);
|
|
|
|
/* The file produced by this is always written in metres. */
|
|
|
|
if(data_entry=='i' || data_entry=='I')
|
|
|
|
{
|
|
|
|
scale_factor=39.37; /* inches in 1m */
|
|
|
|
- type="\"\"";
|
|
|
|
+ strcpy(type,"\"\"");
|
|
|
|
}
|
|
|
|
else if(data_entry=='m' || data_entry=='m')
|
|
|
|
{
|
|
|
|
scale_factor=1000.0; /* mm in 1m */
|
|
|
|
- type="mm";
|
|
|
|
+ strcpy(type,"mm");
|
|
|
|
}
|
|
|
|
else if(data_entry=='w' || data_entry=='w')
|
|
|
|
{
|
|
|
|
scale_factor=frequency/300; /* wavelegths in 1m */
|
|
|
|
- type="lambda";
|
|
|
|
+ strcpy(type,"lambda");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
exit(1);
|
|
|
|
printf("Enter the number of elements for the antenna ");
|
|
|
|
- scanf("%d",&elements);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%d",&elements);
|
|
|
|
/* printf("Enter the number of driven elements ");
|
|
|
|
- scanf("%d", &driven); */
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%d", &driven); */
|
|
|
|
driven=1;
|
|
|
|
parasitic=elements-driven;
|
|
|
|
d=dmatrix(1L, (long) driven, 1L, 6L);
|
|
|
|
p=dmatrix(1L, (long) parasitic , 1L, 4L);
|
|
|
|
printf("Enter the angular step size in degrees for the gain to be plotted ");
|
|
|
|
- scanf("%lf",&angular_step);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%lf",&angular_step);
|
|
|
|
/* printf("Are any of the elements tappered? ");
|
|
|
|
- scanf("%c", &response);
|
|
|
|
- scanf("%c", &response);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%c", &response);
|
|
|
|
if(response =='y' || response == 'Y')
|
|
|
|
{
|
|
|
|
tappered=TRUE;
|
|
|
|
@@ -114,12 +125,13 @@ int main(int argc, char **argv)
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
printf("Are all the elements of the same diameter ? ");
|
|
|
|
- scanf("%c",&response);
|
|
|
|
- scanf("%c",&response);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%c",&response);
|
|
|
|
if(response=='Y' || response =='y')
|
|
|
|
{
|
|
|
|
printf("Enter the diameter of the elements (in %s) ", type);
|
|
|
|
- scanf("%lf", &diameter);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%lf", &diameter);
|
|
|
|
fixed_diameter=TRUE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
@@ -128,29 +140,35 @@ int main(int argc, char **argv)
|
|
|
|
for(i=1;i<=driven;++i)
|
|
|
|
{
|
|
|
|
printf("\n\nEnter location of the driven element in %s (wrt. reflector at x=0) ", type);
|
|
|
|
- scanf("%lf", &d[i][X]);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%lf", &d[i][X]);
|
|
|
|
d[i][Y]=0;
|
|
|
|
if( boom != TRUE)
|
|
|
|
{
|
|
|
|
printf("Enter the y position of the driven element (in %s) ", type);
|
|
|
|
- scanf("%lf", &d[i][Y]);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%lf", &d[i][Y]);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
d[i][Y]=0.0;
|
|
|
|
printf("Enter length of the driven element (in %s) ", type);
|
|
|
|
- scanf("%lf", &d[i][LENGTH]);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%lf", &d[i][LENGTH]);
|
|
|
|
if(fixed_diameter == TRUE)
|
|
|
|
d[i][DIAMETER]=diameter;
|
|
|
|
else
|
|
|
|
{
|
|
|
|
printf("Enter the diameter of the driven element (in %s) ", type);
|
|
|
|
- scanf("%lf", &d[i][DIAMETER]);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%lf", &d[i][DIAMETER]);
|
|
|
|
}
|
|
|
|
/*
|
|
|
|
printf("Enter the voltage driving this element ");
|
|
|
|
- scanf("%lf", &d[i][VOLTAGE_R]);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%lf", &d[i][VOLTAGE_R]);
|
|
|
|
printf("Enter the phase driving this element ");
|
|
|
|
- scanf("%lf", &d[i][VOLTAGE_I]);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%lf", &d[i][VOLTAGE_I]);
|
|
|
|
*/
|
|
|
|
d[i][VOLTAGE_R]=1.0;
|
|
|
|
d[i][VOLTAGE_I]=0.0;
|
|
|
|
@@ -160,39 +178,46 @@ int main(int argc, char **argv)
|
|
|
|
if(i==1) /* The reflector */
|
|
|
|
{
|
|
|
|
printf("\nEnter length of the reflector (in %s) ", type);
|
|
|
|
- scanf("%lf", &p[1][LENGTH]);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%lf", &p[1][LENGTH]);
|
|
|
|
if(boom != TRUE)
|
|
|
|
{
|
|
|
|
printf("\nEnter the y position of the reflector (in %s) ", type);
|
|
|
|
- scanf("%lf", &p[i][Y]);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%lf", &p[i][Y]);
|
|
|
|
}
|
|
|
|
if(fixed_diameter == TRUE)
|
|
|
|
p[i][DIAMETER]=diameter;
|
|
|
|
else
|
|
|
|
{
|
|
|
|
printf("Enter the diameter of the reflector (in %s) ", type);
|
|
|
|
- scanf("%lf", &p[i][DIAMETER]);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%lf", &p[i][DIAMETER]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else /* a director */
|
|
|
|
{
|
|
|
|
printf("\n\nEnter location of director %d in %s (wrt. reflector at x=0.0) ", i-1, type);
|
|
|
|
- scanf("%lf", &p[i][X]);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%lf", &p[i][X]);
|
|
|
|
if( boom != TRUE)
|
|
|
|
{
|
|
|
|
printf("Enter the y position of director %d (in %s) ", i-1, type);
|
|
|
|
- scanf("%lf", &p[i][Y]);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%lf", &p[i][Y]);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
p[i][Y]=0.0;
|
|
|
|
printf("Enter the length of director %d (in %s) ", i-1,type);
|
|
|
|
- scanf("%lf", &p[i][LENGTH]);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%lf", &p[i][LENGTH]);
|
|
|
|
if(fixed_diameter == TRUE)
|
|
|
|
p[i][DIAMETER]=diameter;
|
|
|
|
else
|
|
|
|
{
|
|
|
|
printf("Enter the diameter of director %d (in %s) ", i-1, type);
|
|
|
|
- scanf("%lf", &p[i][DIAMETER]);
|
|
|
|
+ fgets(str, MAXINPUTLINE-1, stdin);
|
|
|
|
+ sscanf(str,"%lf", &p[i][DIAMETER]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@@ -200,9 +225,10 @@ int main(int argc, char **argv)
|
|
|
|
fp=fopen(filename,"wt");
|
|
|
|
write_input_data_to_disk(fp, notes, frequency, min_f, max_f, step_f, elements , driven, parasitic, angular_step, d, p, scale_factor);
|
|
|
|
fclose(fp);
|
|
|
|
- free_string(filename,0L, 1000L);
|
|
|
|
- free_string(notes,0L, 1000L);
|
|
|
|
- free_string(type,0L, 1000L);
|
|
|
|
+ free_string(filename,0L, MAXINPUTLINE);
|
|
|
|
+ free_string(notes,0L, MAXINPUTLINE);
|
|
|
|
+ free_string(type,0L, MAXINPUTLINE);
|
|
|
|
+ free_string(str,0L, MAXINPUTLINE);
|
|
|
|
free_dmatrix(d, 1L, (long) driven, 1L, 6L);
|
|
|
|
free_dmatrix(p, 1L, (long) parasitic , 1L, 4L);
|
|
|
|
exit(0);
|