home *** CD-ROM | disk | FTP | other *** search
/ Antennas / Antennas_CD-ROM_Walnut_Creek_September_1996.iso / mininec / amiga / mnpost.bas < prev    next >
BASIC Source File  |  1996-06-30  |  23KB  |  519 lines

  1.         REM   **** MININEC POST PROCESSOR **** NOSC CODE 822  JCL 4-88
  2.         '     ==== MOD TO INCREASE DIM TO 400 FOR 361 AZ POINTS  ==== RWA 13 OCT 89
  3.         DIM EX(400, 4), EY(400, 4), EZ(300, 4), EP(300), N(100), P(400), X(400, 3), Z(1600, 2)
  4.         '
  5. 10      CLS
  6.         COLOR 2, 0
  7.         PRINT "                 ++++ MININEC POST-PROCESSOR ++++"
  8.         PRINT : INPUT "MININEC OUTPUT DATA FILE {\NEEDS\DATA\}(name.OUT) "; F$
  9.                 T$ = RIGHT$(F$, 4)
  10.                 IF LEFT$(T$, 1) <> "." THEN F$ = F$ + ".OUT"
  11.                 IF LEFT$(F$, 1) <> "\" THEN F$ = "\NEEDS\DATA\" + F$
  12.         OPEN F$ FOR INPUT AS #1
  13.                 INPUT #1, I, P0, G$
  14.             IF G$ = "Z" THEN GOSUB 15
  15.             IF G$ = "C" THEN GOSUB 19
  16.             IF (G$ = "D" OR G$ = "V") THEN GOSUB 190
  17.             IF (G$ = "E" OR G$ = "H") THEN GOSUB 121
  18.         PRINT : INPUT "CONTINUE (Y/N) "; G$
  19.             IF LEFT$(G$, 1) = "Y" THEN GOTO 10
  20.         GOTO 349
  21.         '
  22.         REM --- PROCESS IMPEDANCE DATA -----
  23. 15        J = 0
  24.         WHILE NOT EOF(1)
  25.                 J = J + 1
  26.                 INPUT #1, X(J, 1), X(J, 2), X(J, 3)
  27.         WEND
  28.         CLOSE #1
  29.         REM ---- DISPLAY DATA
  30.                 ZNORM = 50
  31.                 GOSUB 16
  32.         REM ---- CHANGE NORMALIZATION
  33.                 Z$ = "Y"
  34.                 WHILE LEFT$(Z$, 1) = "Y"
  35.                    PRINT : INPUT "CHANGE Zo (Y/N) "; Z$
  36.                         IF Z$ = "Y" THEN
  37.                            PRINT
  38.                            INPUT "NEW Zo = "; ZNORM
  39.                            GOSUB 16
  40.                         END IF
  41.                 WEND
  42.         REM --- SAVE PLOT DATA
  43.                 PRINT : INPUT "SAVE FOR ANMATCH OR GRAPS (A/G) "; S$
  44.                         S$ = LEFT$(S$, 1)
  45.                 PRINT : INPUT "PLOT DATA FILE {\NEEDS\DATA\}(name.DAT) "; F$
  46.                         T$ = RIGHT$(F$, 4)
  47.                         IF LEFT$(T$, 1) <> "." THEN F$ = F$ + ".DAT"
  48.                         IF LEFT$(F$, 1) <> "\" THEN F$ = "\NEEDS\DATA\" + F$
  49.                 OPEN F$ FOR OUTPUT AS #1
  50.                 IF S$ = "A" THEN
  51.                         WRITE #1, J
  52.                         FOR K = 1 TO J
  53.                                 WRITE #1, X(K, 1), X(K, 2) / ZNORM, X(K, 3) / ZNORM
  54.                         NEXT K
  55.                     ELSE
  56.                         PRINT #1, "GRAPS SMITH"
  57.                         FOR K = 1 TO J
  58.                                 WRITE #1, X(K, 2) / ZNORM, X(K, 3) / ZNORM
  59.                         NEXT K
  60.                 END IF
  61.            CLOSE #1
  62.         RETURN
  63.         REM --- DISPLAY IMPEDANCE DATA SUBROUTINE
  64. 16         K1 = 1: K2 = 0
  65.          PRINT : PRINT "FREQUENCY (MHZ)", "R (OHMS)", "X (OHMS)", "R/"; ZNORM, "X/"; ZNORM
  66.               IF K2 + 10 > J THEN K2 = J ELSE K2 = K2 + 10
  67.               FOR K = K1 TO K2
  68.                 PRINT X(K, 1), X(K, 2), X(K, 3), X(K, 2) / ZNORM, X(K, 3) / ZNORM
  69.               NEXT K
  70.                  K1 = K2 + 1
  71.                  IF K1 > J THEN K1 = 1: K2 = 0
  72.              PRINT : INPUT "DISPLAY MORE DATA (Y/N) "; M$
  73.              IF LEFT$(M$, 1) = "Y" THEN 16
  74.  
  75.         RETURN
  76.         '
  77.         REM --- PROCESS CURRENT DATA ----
  78. 19         J = 0
  79.            K = 0
  80.            FOR L = 1 TO I
  81.                 J = J + 1
  82.                 EX(L, 1) = J
  83. 24         K = K + 1
  84.                 INPUT #1, EY(J, 1), EY(J, 2), EY(J, 3), EY(J, 4)
  85.                 IF EY(J, 1) + EY(J, 2) + EY(J, 3) + EY(J, 4) = 4 THEN 29
  86.                 J = J + 1
  87.                 GOTO 24
  88. 29         N(L) = K - 1
  89.                 J = J - 1
  90.                 K = 0
  91.                 EX(L, 2) = J
  92.            NEXT L
  93.         CLOSE #1
  94.         REM --- DISPLAY DATA ----
  95.                 P = 0
  96.                 K = 1
  97. 38         L = 1
  98.                 N1 = 1
  99. 40         GOSUB 110
  100.                 PRINT : INPUT "DISPLAY ANOTHER WIRE (Y/N) "; C$
  101.                 IF LEFT$(C$, 1) = "N" THEN 46
  102.                 L = L + 1
  103.                 IF L > I THEN 38
  104.                 GOTO 40
  105. 46         PRINT
  106.                 PRINT "                     ++++ SELECT PLOT DATA ++++"
  107.                 PRINT : PRINT "ORDINATE DATA:"
  108.                 P = P + 1
  109.                 W = 1
  110.                 IF I = 1 THEN 55
  111. 52         PRINT : PRINT "NUMBER OF WIRES = "; I
  112.                 PRINT : INPUT "USE DATA FROM WHICH WIRE "; W
  113.                 IF (W < 1 OR W > I) THEN 52
  114. 55         P(P) = N(W)
  115. 56         PRINT : PRINT "DATA TYPE:  1 - REAL"
  116.                 PRINT "            2 - IMAGINARY"
  117.                 PRINT "            3 - MAGNITUDE"
  118.                 PRINT "            4 - PHASE"
  119.                 INPUT "ENTER CHOICE "; C
  120.                 IF (C < 0 OR C > 4) THEN 56
  121. 62         PRINT : PRINT "ABSCISSA DATA:"
  122.                 PRINT : PRINT "     1 - PULSE POSITION ON WIRE"
  123.                 PRINT "     2 - DISTANCE (m) ALONG WIRE"
  124.                 INPUT "ENTER CHOICE "; J
  125.                 IF (J < 1 OR J > 2) THEN 62
  126.            ON J GOSUB 80, 91
  127.                 PRINT : PRINT "ADD MORE DATA FROM FILE "; F$; " (Y/N)";
  128.                 INPUT C$
  129.                 IF LEFT$(C$, 1) = "N" THEN 75
  130.                 Z(K, 1) = 1.234
  131.                 Z(K, 2) = -1.234
  132.                 K = K + 1
  133.                 GOTO 38
  134. 75         Z(K, 1) = -1.234
  135.                 Z(K, 2) = -1.234
  136.                 GOSUB 276
  137.         RETURN
  138.         REM  ---- ABSCISSA TYPE (J=1) ----
  139. 80         N1 = EX(W, 1)
  140.                 N2 = EX(W, 2)
  141.                 N3 = 0
  142.                 FOR L = N1 TO N2
  143.                 Z(K, 1) = N3
  144.                 Z(K, 2) = EY(L, C)
  145.                 K = K + 1
  146.                 N3 = N3 + 1
  147.                 NEXT L
  148.         RETURN
  149.         REM ---- ABSCISSA TYPE (J=2) ----
  150. 91         N1 = EX(W, 1)
  151.                 N2 = EX(W, 2)
  152. 93         PRINT : PRINT "COORDINATES OF WIRE "; W
  153.                 INPUT "     END1 (X,Y,Z) "; X1, Y1, Z1
  154.                 INPUT "     END2 (X,Y,Z) "; X2, Y2, Z2
  155.                 S = (X2 - X1) * (X2 - X1) + (Y2 - Y1) * (Y2 - Y1) + (Z2 - Z1) * (Z2 - Z1)
  156.                 IF S > 0 THEN 100
  157.                 PRINT "WIRE LENGTH = 0"
  158.                 GOTO 93
  159. 100        S = SQR(S) / (N(W) - 1)
  160.                 X = 0
  161.            FOR L = N1 TO N2
  162.                 Z(K, 1) = X
  163.                 Z(K, 2) = EY(L, C)
  164.                 X = X + S
  165.                 K = K + 1
  166.            NEXT L
  167.         RETURN
  168.         REM ---- DISPLAY CURRENTS ----
  169. 110        PRINT : PRINT "TOTAL POWER RADIATED = "; P0; " WATTS"
  170.                 PRINT : PRINT "WIRE NUMBER "; L; ":"
  171.                 PRINT "REAL", "IMAGINARY", "MAGNITUDE", "PHASE"
  172.                 PRINT " NO. ", "(AMPS)", "(AMPS)", "(DEGREES)"
  173.                 N1 = EX(L, 1)
  174.                 N2 = EX(L, 2)
  175.            FOR J = N1 TO N2
  176.                 PRINT USING "#.####^^^^    "; EY(J, 1), EY(J, 2), EY(J, 3); : PRINT USING "####.##"; EY(J, 4)
  177.            NEXT J
  178.         RETURN
  179.         '
  180.         REM --- PROCESS NEAR FIELD DATA ----
  181.         '
  182.         REM --- ACQUIRE DATA FROM UNIT 1
  183. 121        FOR L = 1 TO I
  184.                 INPUT #1, EX(L, 1), EX(L, 2), EX(L, 3), EX(L, 4)
  185.                 INPUT #1, EY(L, 1), EY(L, 2), EY(L, 3), EY(L, 4)
  186.                 INPUT #1, EZ(L, 1), EZ(L, 2), EZ(L, 3), EZ(L, 4)
  187.                 INPUT #1, EP(L), P(L)
  188.                 INPUT #1, X(L, 1), X(L, 2), X(L, 3)
  189.            NEXT L
  190.         CLOSE #1
  191.         POWER = P(I)
  192.         REM  --- DISPLAY DATA ----
  193.                 L = 1
  194. 131        GOSUB 177
  195.                 PRINT : INPUT "DISPLAY ANOTHER FIELD POINT (Y/N) "; C$
  196.                 IF LEFT$(C$, 1) = "N" THEN GOTO 132
  197.                 L = L + 1
  198.                 IF L > I THEN L = 1
  199.                 GOTO 131
  200.         REM --- CONTOUR PLOTS ?
  201. 132     PRINT : INPUT "PREPARE DATA FOR CONTOUR PLOT (Y/N) "; CON$
  202.                 IF LEFT$(CON$, 1) = "N" THEN GOTO 137
  203.            REM --- SELECT COMPONENT TO PLOT
  204. 133           PRINT : PRINT "ORDINATE DATA:    X = X-COMPONENT"
  205.                 PRINT "                  Y = Y-COMPONENT"
  206.                 PRINT "                  Z = Z-COMPONENT"
  207.                 PRINT "                  P = MAXIMUM OR PEAK VALUE"
  208.                 INPUT "ENTER CHOICE OF FIELD COMPONENT (X/Y/Z/P) "; D$
  209.                 D$ = LEFT$(D$, 1)
  210.                 IF D$ = "P" THEN GOTO 135
  211.                 IF D$ < "X" THEN
  212.                    BEEP
  213.                    GOTO 133
  214.                 END IF
  215. 134        PRINT : PRINT "DATA TYPE:"
  216.                 PRINT "      1 - REAL"
  217.                 PRINT "      2 - IMAGINARY"
  218.                 PRINT "      3 - MAGNITUDE"
  219.                 PRINT "      4 - PHASE"
  220.                 INPUT "CHOICE:"; J
  221.                         IF J < 1 OR J > 4 THEN
  222.                                 BEEP
  223.                                 GOTO 134
  224.                         END IF
  225.         REM --- FIND PLANE OF CONTOUR
  226. 135        X1 = X(1, 1): Y1 = X(1, 2): Z1 = X(1, 3)
  227.            X2 = X(I, 1): Y2 = X(I, 2): Z2 = X(I, 3)
  228.            PLANE$ = "NONE"
  229.            IF X2 - X1 = 0 THEN
  230.                 PLANE$ = "YZ"
  231.                 K1 = 2: K2 = 3
  232.            END IF
  233.            IF Y2 - Y1 = 0 THEN
  234.                 PLANE$ = "XZ"
  235.                 K1 = 1: K2 = 3
  236.            END IF
  237.            IF Z2 - Z1 = 0 THEN
  238.                 PLANE$ = "XY"
  239.                 K1 = 1: K2 = 2
  240.            END IF
  241.            IF PLANE$ = "NONE" THEN
  242.                 BEEP
  243.                 PRINT : PRINT "NOT PRINCIPLE PLANE !"
  244.                 PRINT "USE CONVENTIONAL PLOT."
  245.                 L = 1
  246.                 GOTO 131
  247.            END IF
  248.         REM --- FIND MIN - MAX VALUE
  249.                 LOW = 9.999999E+35: HI = -9.999999E+35
  250.                 IF D$ = "P" THEN
  251.                         FOR L = 1 TO I
  252.                                 IF EP(L) < LOW THEN LOW = EP(L)
  253.                                 IF EP(L) > HI THEN HI = EP(L)
  254.                         NEXT L
  255.                 END IF
  256.                 IF D$ = "X" THEN
  257.                         FOR L = 1 TO I
  258.                                 IF EX(L, J) < LOW THEN LOW = EX(L, J)
  259.                                 IF EX(L, J) > HI THEN HI = EX(L, J)
  260.                         NEXT L
  261.                 END IF
  262.                 IF D$ = "Y" THEN
  263.                         FOR L = 1 TO I
  264.                                 IF EY(L, J) < LOW THEN LOW = EY(L, J)
  265.                                 IF EY(L, J) > HI THEN HI = EY(L, J)
  266.                         NEXT L
  267.                 END IF
  268.                 IF D$ = "Z" THEN
  269.                         FOR L = 1 TO I
  270.                                 IF EZ(L, J) < LOW THEN LOW = EZ(L, J)
  271.                                 IF EZ(L, J) > HI THEN HI = EZ(L, J)
  272.                         NEXT L
  273.                 END IF
  274.         REM ---- DESIGNATE FILE FOR CONTOUR PLOT
  275.                 PRINT : INPUT "PLOT DATA FILE {\NEEDS\DATA\}(name.DAT) "; F$
  276.                         T$ = RIGHT$(F$, 4)
  277.                         IF LEFT$(T$, 1) <> "." THEN F$ = F$ + ".DAT"
  278.                         IF LEFT$(F$, 1) <> "\" THEN F$ = "\NEEDS\DATA\" + F$
  279.         REM ---- SAVE CONTOUR PLOT DATA
  280. 136            OPEN F$ FOR OUTPUT AS #1
  281.                    PRINT #1, "GRAPS CONTOUR"
  282.                    IF PLANE$ = "XY" THEN WRITE #1, X1, X2, Y1, Y2, LOW, HI
  283.                    IF PLANE$ = "XZ" THEN WRITE #1, X1, X2, Z1, Z2, LOW, HI
  284.                    IF PLANE$ = "YZ" THEN WRITE #1, Y1, Y2, Z1, Z2, LOW, HI
  285.                         FOR L = 1 TO I
  286.                                 IF D$ = "P" THEN WRITE #1, X(L, K1), X(L, K2), EP(L)
  287.                                 IF D$ = "X" THEN WRITE #1, X(L, K1), X(L, K2), EX(L, J)
  288.                                 IF D$ = "Y" THEN WRITE #1, X(L, K1), X(L, K2), EY(L, J)
  289.                                 IF D$ = "Z" THEN WRITE #1, X(L, K1), X(L, K2), EZ(L, J)
  290.                         NEXT L
  291.                    PRINT #1, "-1.234,-1.234,-1.234"
  292.                    PRINT #1, "1,1"
  293.                    PRINT #1, "POWER = "; POWER
  294.                CLOSE #1
  295.         RETURN
  296.         REM --- GRAPS STANDARD PLOTS
  297. 137        L1 = 1: L2 = I
  298. 138        PRINT : PRINT "                        ++++ SELECT PLOT DATA ++++"
  299.                 PRINT : INPUT "ABSCISSA DATA (X/Y/Z) "; A$
  300.                 A$ = LEFT$(A$, 1)
  301.                 M = 0
  302.                 IF A$ = "X" THEN M = 1
  303.                 IF A$ = "Y" THEN M = 2
  304.                 IF A$ = "Z" THEN M = 3
  305.                 IF M = 0 THEN GOTO 138
  306.                 N = 0
  307. 147        PRINT : PRINT "ORDINATE DATA:    X = X-COMPONENT"
  308.                 PRINT "                  Y = Y-COMPONENT"
  309.                 PRINT "                  Z = Z-COMPONENT"
  310.                 PRINT "                  P = MAXIMUM OR PEAK VALUE"
  311.                 INPUT "ENTER CHOICE OF FIELD COMPONENT (X/Y/Z/P) "; D$
  312.                 D$ = LEFT$(D$, 1)
  313.                 IF D$ = "P" THEN GOTO 164
  314.                 PRINT "DATA TYPE:"
  315.                 PRINT "      1 - REAL"
  316.                 PRINT "      2 - IMAGINARY"
  317.                 PRINT "      3 - MAGNITUDE"
  318.                 PRINT "      4 - PHASE"
  319.                 INPUT "CHOICE:"; J
  320.                 IF D$ = "X" THEN GOTO 165
  321.                 IF D$ = "Y" THEN GOTO 166
  322.                 IF D$ = "Z" THEN GOTO 167
  323.                 GOTO 147
  324. 164        FOR L = L1 TO L2: N = N + 1: Z(L, 1) = X(N, M): Z(L, 2) = EP(N): NEXT L: GOTO 168
  325. 165        FOR L = L1 TO L2: N = N + 1: Z(L, 1) = X(N, M): Z(L, 2) = EX(N, J): NEXT L: GOTO 168
  326. 166        FOR L = L1 TO L2: N = N + 1: Z(L, 1) = X(N, M): Z(L, 2) = EY(N, J): NEXT L: GOTO 168
  327. 167        FOR L = L1 TO L2: N = N + 1: Z(L, 1) = X(N, M): Z(L, 2) = EZ(N, J): NEXT L
  328. 168        L2 = L2 + 1
  329.                 PRINT : PRINT "ADD MORE DATA FROM FILE '"; F$; "' (Y/N) ";
  330.                 INPUT C$
  331.                 IF LEFT$(C$, 1) = "N" THEN GOTO 173
  332.                 Z(L2, 1) = 1.234: Z(L2, 2) = -1.234: L1 = L2 + 1: L2 = L2 + I: GOTO 138
  333. 173        Z(L2, 1) = -1.234: Z(L2, 2) = -1.234
  334.                 GOSUB 276
  335.         RETURN
  336.         REM  --- DISPLAY NEAR FIELD DATA ----
  337. 177        PRINT : PRINT "                    *** NEAR FIELD DATA FROM FILE '"; F$; "' ***"
  338.                 PRINT : PRINT "             FIELD POINT: X = "; X(L, 1); ", Y = "; X(L, 2); ", Z = "; X(L, 3)
  339.                 PRINT "VECTOR", "REAL", "IMAGINARY", "MAGNITUDE", "PHASE"
  340.                 IF G$ = "E" THEN PRINT "COMPONENT", "(V/M)", "(V/M)", "(V/M)", "(DEG)"
  341.                 IF G$ = "H" THEN PRINT "COMPONENT", "(AMPS/M)", "(AMPS/M)", "(AMPS/M)", "(DEG)"
  342.                 PRINT "    X         "; : PRINT USING "#.####^^^^    "; EX(L, 1), EX(L, 2), EX(L, 3); : PRINT USING "####.##"; EX(L, 4)
  343.                 PRINT "    Y         "; : PRINT USING "#.####^^^^    "; EY(L, 1), EY(L, 2), EY(L, 3); : PRINT USING "####.##"; EY(L, 4)
  344.                 PRINT "    Z         "; : PRINT USING "#.####^^^^    "; EZ(L, 1), EZ(L, 2), EZ(L, 3); : PRINT USING "####.##"; EZ(L, 4)
  345.                 IF G$ = "E" THEN PRINT "MAXIMUM OR PEAK FIELD = "; EP(L); " V/M"
  346.                 IF G$ = "H" THEN PRINT "MAXIMUM OR PEAK FIELD = "; EP(L); " AMPS/M"
  347.                 PRINT "RADIATED POWER = "; P(L); " WATTS"
  348.         RETURN
  349.         '
  350.         REM --- PROCESS PATTERN DATA ---
  351. 190        IF G$ = "V" THEN GOTO 197
  352.                 REM ---  INPUT DATA IN DB
  353.                 FOR L = 1 TO I
  354.                         INPUT #1, X(L, 1), X(L, 2), EX(L, 1), EX(L, 2), EX(L, 3)
  355.                 NEXT L
  356.                 REM  --- INPUT DATA IN V/M
  357.                 GOTO 201
  358. 197        INPUT #1, R0
  359.            FOR L = 1 TO I
  360.                 INPUT #1, X(L, 1), X(L, 2), EX(L, 1), EX(L, 2), EY(L, 1), EY(L, 2)
  361.            NEXT L
  362. 201     CLOSE #1
  363.         REM  --- DISPLAY DATA ----
  364. 203        J = 1: K = 10: IF K > I THEN K = I
  365. 204        IF G$ = "D" THEN GOSUB 232
  366.                 IF G$ = "V" THEN GOSUB 238
  367.                 PRINT : INPUT "DISPLAY MORE PATTERN DATA (Y/N) "; C$
  368.                 IF LEFT$(C$, 1) = "N" THEN GOTO 212
  369.                 IF K = I THEN GOTO 203
  370.                 J = K: K = K + 10: IF J > I THEN J = K - 9
  371.                 IF K > I THEN K = I
  372.                 GOTO 204
  373. 212        L1 = 1: L2 = I
  374. 213        PRINT : PRINT "                        ++++ SELECT PLOT DATA ++++"
  375.                 PRINT : INPUT "ABSCISSA DATA: (Theta/Phi) "; A$
  376.                 A$ = LEFT$(A$, 1)
  377.                 M = 0
  378.                 IF A$ = "T" THEN M = 1
  379.                 IF A$ = "P" THEN M = 2
  380.                 N = 0
  381.                 IF M = 0 THEN GOTO 213
  382.                 IF G$ = "D" THEN GOSUB 252
  383.                 IF G$ = "V" THEN GOSUB 262
  384.                 L2 = L2 + 1
  385.                 PRINT : PRINT "ADD MORE DATA FROM FILE '"; F$; "' (Y/N) ";
  386.                 INPUT C$
  387.                 IF LEFT$(C$, 1) = "N" THEN GOTO 228
  388.                 Z(L2, 1) = 1.234: Z(L2, 2) = -1.234: L1 = L2 + 1: L2 = L2 + I: GOTO 213
  389. 228        Z(L2, 1) = -1.234: Z(L2, 2) = -1.234
  390.                 GOSUB 276
  391.         RETURN
  392.         REM  --- DISPLAY PATTERN DATA (DBI) ---
  393. 232        PRINT : PRINT "                      RADIATION PATTERN DATA"
  394.                 PRINT : PRINT "ZENITH", "AZIMUTH", "VERTICAL", "HORIZONTAL", "TOTAL"
  395.                 PRINT "(THETA)", "(PHI)", "PATTERN (dB)", "PATTERN (dB)", "PATTERN (dB)"
  396.                 FOR L = J TO K: PRINT X(L, 1), X(L, 2), EX(L, 1), EX(L, 2), EX(L, 3): NEXT L
  397.         RETURN
  398.         REM  ---- DISPLAY PATTERN DATA (V/M) ---
  399. 238        PRINT : PRINT "                      RADIATION PATTERN DATA"
  400.                 PRINT : PRINT "RADIAL DISTANCE = "; R0; " METERS"
  401.                 PRINT "POWER LEVEL = "; P0; " WATTS"
  402.                 PRINT : PRINT " ZENITH   AZIMUTH", "     E(THETA)  ", "      E(PHI)"
  403.                 PRINT "(THETA)   (PHI)", "MAG(V/M)   PHASE(DEG)", "MAG(V/M)   PHASE(DEG)"
  404.            FOR L = J TO K
  405.                 PRINT USING "###.##    "; X(L, 1), X(L, 2);
  406.                 PRINT USING "       ##.###^^^^"; EX(L, 1);
  407.                 PRINT USING "   ####.##   "; EX(L, 2);
  408.                 PRINT USING "       ##.###^^^^"; EY(L, 1);
  409.                 PRINT USING "   ####.##"; EY(L, 2)
  410.            NEXT L
  411.         RETURN
  412.         REM --- SAVE PATTERN DATA (BDI) ---
  413. 252        PRINT : INPUT "ORDINATE DATA (Vertical/Horizontal/Total) "; D$
  414.                 D$ = LEFT$(D$, 1)
  415.                 J = 0
  416.                 IF D$ = "V" THEN J = 1
  417.                 IF D$ = "H" THEN J = 2
  418.                 IF D$ = "T" THEN J = 3
  419.                 IF J = 0 THEN GOTO 260
  420.                 FOR L = L1 TO L2: N = N + 1: Z(L, 1) = X(N, M): Z(L, 2) = EX(N, J): NEXT L
  421. 260     RETURN
  422.         REM --- SAVE PATTERN DATA (V/M) ---
  423. 262        PRINT : PRINT "ORDINATE DATA:    T = E-THETA COMPONENT"
  424.                 PRINT "                  P = E-PHI COMPONENT"
  425.                 INPUT "ENTER CHOICE OF COMPONENT (ET/EP) "; D$
  426.                 D$ = LEFT$(D$, 1)
  427.                 PRINT : PRINT "DATA TYPE:     1 - MAGINTUDE"
  428.                 PRINT "               2 - PHASE"
  429.                 INPUT "CHOICE:"; J
  430.                 IF D$ = "T" GOTO 272
  431.                 IF D$ = "P" GOTO 273
  432.                 GOTO 274
  433. 272        FOR L = L1 TO L2: N = N + 1: Z(L, 1) = X(N, M): Z(L, 2) = EX(N, J): NEXT L: GOTO 274
  434. 273        FOR L = L1 TO L2: N = N + 1: Z(L, 1) = X(N, M): Z(L, 2) = EY(N, J): NEXT L
  435. 274     RETURN
  436.         REM ---FIND MAX & MIN ---
  437. 276        PRINT : PRINT "PLOT FORMAT:    1 - ONE ORDINATE SCALE"
  438.                 PRINT "                2 - TWO ORDINATE SCALES"
  439.                 PRINT "                3 - POLAR "
  440.                 INPUT "ENTER CHOICE "; C: PRINT
  441.                 IF (C < 1 OR C > 3) THEN GOTO 276
  442.                 IF C = 2 THEN PRINT "--- TWO CURVES IS ASSUMED ---"
  443.                 L1 = 1: L2 = I
  444.                 IF G$ = "C" THEN 300
  445.                 XL = 9.999999E+35: XH = -9.999999E+35
  446. 285        YL = 9.999999E+35: YH = -9.999999E+35
  447. 286        FOR L = L1 TO L2
  448.                 IF Z(L, 1) < XL THEN XL = Z(L, 1)
  449.                 IF Z(L, 1) > XH THEN XH = Z(L, 1)
  450.                 IF Z(L, 2) < YL THEN YL = Z(L, 2)
  451.                 IF Z(L, 2) > YH THEN YH = Z(L, 2)
  452.            NEXT L
  453.                 L2 = L2 + 1
  454.                 IF Z(L2, 1) = -1.234 THEN GOTO 321
  455.                 IF C <> 2 THEN GOTO 298
  456.                 Y1 = YL: Y2 = YH
  457.                 L1 = L2 + 1: L2 = L2 + I
  458.                 GOTO 285
  459. 298        L1 = L2 + 1: L2 = L2 + I: GOTO 286
  460.         REM --- CURRENTS MAX & MIN ---
  461. 300        IF C <> 2 THEN 304
  462.                 IF P = 2 THEN 304
  463.                 PRINT : PRINT "BUT, THERE ARE "; P; " CURVES"
  464.                 GOTO 276
  465. 304        XL = 9.999999E+35: XH = -9.999999E+35
  466.                 YL = 9.999999E+35: YH = -9.999999E+35
  467.            FOR J = 1 TO P
  468.                 L2 = L1 + P(J) - 1
  469.            FOR L = L1 TO L2
  470.                 IF Z(L, 1) < XL THEN XL = Z(L, 1)
  471.                 IF Z(L, 1) > XH THEN XH = Z(L, 1)
  472.                 IF Z(L, 2) < YL THEN YL = Z(L, 2)
  473.                 IF Z(L, 2) > YH THEN YH = Z(L, 2)
  474.            NEXT L
  475.                 IF J = 2 THEN 318
  476.                 IF C <> 2 THEN 318
  477.                 Y1 = YL: Y2 = YH
  478.                 YL = 9.999999E+35: YH = -9.999999E+35
  479. 318        L1 = L2 + 2
  480.            NEXT J
  481.                 L2 = K
  482. 321        PRINT : PRINT " ", "MINIMUM", "MAXIMUM"
  483.                 PRINT "ABSCISSA", XL, XH
  484.                 IF C = 2 THEN PRINT "ORDINATE", Y1, Y2, " (LEFT SIDE)"
  485.                 PRINT "ORDINATE", YL, YH
  486.                 IF C = 3 THEN GOTO 337
  487.                 PRINT : INPUT "CHANGE ABSCISSA RANGE (Y/N) "; C$
  488.                 IF LEFT$(C$, 1) = "N" THEN GOTO 330
  489.                 INPUT "NEW LOWER LIMIT = "; XL
  490.                 INPUT "NEW UPPER LIMIT = "; XH
  491. 330        PRINT : INPUT "CHANGE ORDINATE RANGE (Y/N) "; C$
  492.                 IF LEFT$(C$, 1) = "N" THEN GOTO 337
  493.                 IF C <> 2 THEN GOTO 335
  494.                 INPUT "NEW LOWER LIMIT (LEFT SIDE) = "; Y1
  495.                 INPUT "NEW UPPER LIMIT (LEFT SIDE) = "; Y2
  496. 335        INPUT "NEW LOWER LIMIT = "; YL
  497.                 INPUT "NEW UPPER LIMIT = "; YH
  498. 337        PRINT : INPUT "PLOT DATA FILE {\NEEDS\DATA\}(name.DAT) "; F$
  499.                 T$ = RIGHT$(F$, 4)
  500.                 IF LEFT$(T$, 1) <> "." THEN F$ = F$ + ".DAT"
  501.                 IF LEFT$(F$, 1) <> "\" THEN F$ = "\NEEDS\DATA\" + F$
  502. 341        OPEN F$ FOR OUTPUT AS #1
  503.                 IF C = 1 THEN
  504.                         PRINT #1, "GRAPS LINEAR"
  505.                         PRINT #1, XL; ","; XH; ","; YL; ","; YH
  506.                 END IF
  507.                 IF C = 2 THEN
  508.                         PRINT #1, "GRAPS BILINEAR"
  509.                         PRINT #1, XL; ","; XH; ","; Y1; ","; Y2; ","; YL; ","; YH
  510.                 END IF
  511.            FOR L = 1 TO L2
  512.                 PRINT #1, Z(L, 1); ","; Z(L, 2)
  513.            NEXT L
  514.         CLOSE #1
  515.         RETURN
  516. 349     SYSTEM
  517.         END
  518.  
  519.