home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1 / HamRadio.cdr / tech / ee1 / almond.bas < prev    next >
BASIC Source File  |  1986-09-02  |  40KB  |  488 lines

  1. 10 DEFINT C,K:C0=0:C1=1:C2=2:C3=3:C4=4:C5=5:C6=6:C7=7:C8=8:C9=9:C10=10:C11=11:C12=12:C13=13:C14=14:C19=19:C20=20:C39=39:CC=100:CK=1000:K9=-C1:L0=K9
  2. 20 DIM D(19,14),F(19,14),V(19,10),O(5,14)
  3. 30 FLAG$="NNNNNN":PI=3.141593:RD=180/PI:FI$=STRING$(C20," "):FO$=FI$:FILE$=STRING$(CC," "):L$=STRING$(39," "):WIDTH 40
  4. 40 E$="SHTOPNOSTSSTTRLCPLRLCRCLVCSCCSTFRRLPRCPLCPRLSRCSLCSRESINSCPSIMSTWOONEIMPCPPINPREPCLSCRSLRSCLPCRPLRPLCRCLRCAXCASSERPARBALINVEQUIMACEBCECEND":GOTO 2340
  5. 50 W5=W1*W3-W2*W4:W2=W1*W4+W2*W3:W1=W5:RETURN
  6. 60 W5=W3*W3+W4*W4:IF W5<9.999999E-21 THEN W5=9.999999E-21
  7. 70 W6=(W1*W3+W2*W4)/W5:W2=(W2*W3-W1*W4)/W5:W1=W6:RETURN
  8. 80 W3=W1*COS(W2):W2=W1*SIN(W2):W1=W3:RETURN
  9. 90 IF W1=C0 THEN W3=SGN(W2)*PI/C2:GOTO 110
  10. 100 W3=ATN(W2/W1)+PI*(W1<C0)*SGN(W1*W2)
  11. 110 W1=SQR(W1*W1+W2*W2):W2=W3:RETURN
  12. 120 W1=C0:FOR L1=D(K2,C3) TO C0 STEP -C1:W1=W1*F(K1,C0)+V(L2,L1):NEXT L1:RETURN
  13. 130 FOR L1=C0 TO K8-C1:IF D(L1,C1)<>K3 THEN NEXT L1
  14. 140 K3=L1:RETURN
  15. 150 FOR K0=C7 TO C9 STEP C2:W1=D(K5,K0):W2=D(K5,K0+C1):W3=D(K3,K0):W4=D(K3,K0+C1):GOSUB 50:F(K1,K0-C4)=W1:F(K1,K0-C3)=W2:NEXT K0
  16. 160 W1=D(K3,C5):W2=D(K3,C6):FOR K0=C7 TO C9 STEP C2:W3=D(K5,K0):W4=D(K5,K0+C1):GOSUB 50:NEXT K0:W8=W1:W9=W2
  17. 170 W1=D(K5,C11):W2=D(K5,C12):FOR K0=C7 TO C9 STEP C2:W3=D(K3,K0):W4=D(K3,K0+C1):GOSUB 50:NEXT K0:W6=W1:W7=W2
  18. 180 W1=C1+D(K3,C5):W2=D(K3,C6):W3=C1-D(K5,C11):W4=C0-D(K5,C12):GOSUB 50:W3=W1-D(K3,C5)+D(K5,C11):W4=W2-D(K3,C6)+D(K5,C12):W1=D(K5,C5):W2=D(K5,C6):GOSUB 50
  19. 190 F(K1,C1)=W1+W8:F(K1,C2)=W2+W9:W1=D(K3,C11):W2=D(K3,C12):GOSUB 50:F(K1,C7)=W1+W6:F(K1,C8)=W2+W7
  20. 200 FOR K0=C5 TO C11 STEP C2:W1=F(K1,K0-C4):W2=F(K1,K0-C3):GOSUB 60:D(K2,K0)=W1:D(K2,K0+C1)=W2:NEXT K0:RETURN
  21. 210 W1=D(K2,C9):W2=D(K2,C10):W3=D(K2,C7):W4=D(K2,C8):GOSUB 50:W6=W1:W7=W2:W1=-C1-D(K2,C5):W2=C0-D(K2,C6):W3=-C1-D(K2,C11)
  22. 220 W4=C0-D(K2,C12):D(K2,C11)=W1:D(K2,C12)=W2:GOSUB 50:D(K2,C5)=W3:D(K2,C6)=W4:W3=(W6-W1)/C2:W4=(W7-W2)/C2
  23. 230 FOR K0=C5 TO C11 STEP C2:W1=D(K2,K0):W2=D(K2,K0+C1):GOSUB 60:D(K2,K0)=W1+(K0=C5)+(K0=C11):D(K2,K0+C1)=W2:NEXT K0:RETURN
  24. 240 L9=L9-1:Q$=INKEY$:ON -(Q$="Q") GOTO 4370:IF L9>=0 THEN O(L9,5)=1.001*O(L9,5)
  25. 250 L8=L8+1:GOSUB 320:W1=0:FOR K1=0 TO K9:W2=F(K1,1)*F(K1,1)+F(K1,2)*F(K1,2):IF W2<9.999999E-21 THEN W2=9.999999E-21
  26. 260 W2=C10*LOG(W2)/LOG(C10)-F(K1,C9):W3=F(K1,C7)*F(K1,C7)+F(K1,C8)*F(K1,C8):IF W3<9.999999E-21 THEN W3=9.999999E-21
  27. 270 W3=C10*LOG(W3)/LOG(C10)-F(K1,C11):W4=F(K1,C3)*F(K1,C3)+F(K1,C4)*F(K1,C4):IF W4<9.999999E-21 THEN W4=9.999999E-21
  28. 280 W4=C10*LOG(W4)/LOG(C10)-F(K1,C13):IF F(K1,C14)<C0 AND W4<C0 THEN W4=C0
  29. 290 W1=W1-W2*W2*F(K1,C10)*(W2>C0)-W3*W3*F(K1,C12)*(W3>C0)+W4*W4*ABS(F(K1,C14)):NEXT K1:W1=W1/K1:IF W1=C0 THEN 4320
  30. 300 IF L9>=C0 THEN O(L9,5)=O(L9,5)/1.001:O(L9,6)=W1:GOTO 240
  31. 310 FOR L9=0 TO L0:O(L9,6)=1000*(O(L9,6)/W1-1):NEXT L9:RETURN
  32. 320 FOR K1=C0 TO L0:D(O(K1,C0),O(K1,C2))=O(K1,5):NEXT K1
  33. 330 FOR K1=C0 TO K9:OM=C2*PI*F(K1,C0):FOR K2=C0 TO K8-C1:K3=D(K2,C0)+C1:K4=K2:W1=C0:W2=W1:W3=W1:W4=W1
  34. 340 ON K3 GOTO 420,420,430,430,460,490,600,680,380,380,400,610,590,630,690,670,650,700,660,640,560
  35. 350 ON K3-21 GOTO 750,560,560,640,660,700,650,670,690,630,590,610,680,600
  36. 360 K4=D(K2,C4):IF K3<46 THEN K5=D(K2,C13):ON K3-35 GOTO 760,770,830,830,780,580,890,820,830,830
  37. 370 FOR K3=C1 TO C8:F(K1,K3)=D(K4,K3+C4):NEXT K3:GOTO 900
  38. 380 W2=D(K2,C3)/RD:W4=-(C2-98*(K3=C9))*D(K2,C2)
  39. 390 D(K2,C5)=C1+C2*(K3=C10):D(K2,C7)=W4*COS(W2):D(K2,C9)=C0:D(K2,C11)=C1:W4=W4*SIN(W2):GOTO 410
  40. 400 W2=D(K2,C2)/D(K2,C3):W3=W2*W2+C1:D(K2,C5)=(W3-C2)/W3:D(K2,C7)=C2*W2/W3:D(K2,C9)=D(K2,C7):D(K2,C11)=C0-D(K2,C5)
  41. 410 FOR K0=C3 TO C6:D(K2,C2*K0)=C0-W4*(K0=C4):NEXT K0:GOTO 900
  42. 420 W3=C1+C2*(K3=C1):GOTO 740
  43. 430 W3=OM*D(K2,C3)/(360*D(K2,C4)):W2=SIN(W3):W3=COS(W3):IF K3=C4 THEN W1=W2:W2=C0-W3:W3=W1
  44. 440 W2=25*W2/D(K2,C2):IF ABS(W3)<9.999999E-21 THEN W3=9.999999E-21
  45. 450 W5=W2/W3:W1=C1/(C1+W5*W5):W2=C0-W1*W5:W3=W2*W5:W4=W2:GOTO 740
  46. 460 W9=(D(K2,C2)-50)/(D(K2,C2)+50):W8=OM*D(K2,C3)/(D(K2,C4)*-360):W7=SIN(W8):W8=COS(W8):W1=C1-C2*W7*W7:W2=C2*W7*W8
  47. 470 W3=C1-W9*W9*W1:W4=C0-W9*W9*W2:W1=W9*(C1-W1):W2=C0-W9*W2:W9=C1-W9*W9:GOSUB 60
  48. 480 W0=W1:W1=W9*W8:W8=W2:W2=W9*W7:GOSUB 60:W3=W0:W4=W8:GOTO 740
  49. 490 W0=(D(K2,C2)-D(K2,C3))/(D(K2,C2)+D(K2,C3)):W1=OM/(C4*D(K2,C4)):W2=C1-W0*W0:W3=COS(W1)
  50. 500 W4=W0*W3:W0=SQR(D(K2,C2)*D(K2,C3)):W4=W2/(C1-W4*W4):W3=W3*SQR(W2):IF ABS(W3)<9.999999E-21 THEN W3=9.999999E-21
  51. 510 W0=(50-W0)/(50+W0):W8=SQR(W4):W6=SQR(C1-W4):W9=-PI*(W3<C0)-ATN(SIN(W1)/W3)
  52. 520 W7=PI/C2+W9:W1=W6*COS(W7):W2=W6*SIN(W7):W3=W8*COS(W9):W4=W8*SIN(W9):W8=(W1+W2)*(W1-W2)+(W3+W4)*(W3-W4)
  53. 530 W9=C2*(W1*W2+W3*W4):W6=C2*(W1*W3-W2*W4):W7=C2*(W1*W4+W2*W3):W1=W0*(W6+W7)*(W6-W7):W2=C2*W0*W6*W7
  54. 540 W3=W8-W0:W4=C1-W0*W8:W5=C0-W0*W9:W8=W3*W4-W5*W9+W1:W9=W3*W5+W4*W9+W2:W3=(W4+W5)*(W4-W5)-W0*W1
  55. 550 W4=C2*W4*W5-W0*W2:W0=C1-W0*W0:W1=W0*W6:W2=W0*W7:GOSUB 60:W6=(W8*W3+W9*W4)/W5:W4=(W9*W3-W8*W4)/W5:W3=W6:GOTO 740
  56. 560 L2=D(K2,C4)+C1:GOSUB 120:W2=W1:L2=L2-C1:GOSUB 120:IF K3<>23 THEN 710
  57. 570 D(K2,C5)=W1:D(K2,C6)=W2:FOR K3=C7 TO C12:D(K2,K3)=C0+(K3=C11):NEXT K3:GOTO 900
  58. 580 W3=C1-D(K5,C5):W4=C0-D(K5,C6):W1=50*(C2-W3):W2=50*W4:GOSUB 60:W1=W1-50:GOTO 710
  59. 590 W4=OM*D(K2,C3)/CK:GOTO 620
  60. 600 W4=OM*D(K2,C4)/CK
  61. 610 W4=W4-C1/(OM*D(K2,C3))
  62. 620 W3=C1/D(K2,C2):W1=C1:GOSUB 60:GOTO 710
  63. 630 W2=OM*D(K2,C2)/(C1-OM*OM*D(K2,C2)*D(K2,C3)/CK):GOTO 710
  64. 640 W2=-CK/(OM*D(K2,C2)):GOTO 710
  65. 650 W2=-CK/(OM*D(K2,C3))
  66. 660 W2=W2+OM*D(K2,C2):GOTO 710
  67. 670 W2=-CK/(OM*D(K2,C3)):GOTO 700
  68. 680 W2=-CK/(OM*D(K2,C4))
  69. 690 W2=W2+OM*D(K2,C3)
  70. 700 W1=D(K2,C2)
  71. 710 W1=W1/CC:W2=W2/CC:IF K3>22 THEN W3=W1:W4=W2:W1=.25:W2=C0:GOSUB 60
  72. 720 W3=C1+W1:W4=W2:GOSUB 60
  73. 730 W3=W1:W4=W2:W1=C1-W1:W2=C0-W2:IF K3>22 THEN W3=C0-W3:W4=C0-W4
  74. 740 D(K4,C5)=W3:D(K4,C6)=W4:D(K4,C7)=W1:D(K4,C8)=W2:D(K4,C9)=W1:D(K4,C10)=W2:D(K4,C11)=W3:D(K4,C12)=W4:GOTO 900
  75. 750 L2=D(K2,C4):FOR K3=C5 TO C12:GOSUB 120:D(K2,K3)=W1:L2=L2+C1:NEXT K3:GOTO 900
  76. 760 FOR L2=D(K2,C2)+C1 TO D(K2,C3):K3=L2:GOSUB 130:GOSUB 150:K5=K2:NEXT L2:GOTO 890
  77. 770 K3=D(K2,C14):GOSUB 150 :GOTO 890
  78. 780 W9=PI*F(K1,C0)*.5/D(K2,C3):W8=COS(W9):W2=SIN(W9):W7=.5/(C1-.25*W8*W8):W1=SQR(.5)*W8:GOSUB 90
  79. 790 W8=W2:W9=SQR(C1-W7):W1=W7-W9*W9:W2=-C2*W8:GOSUB 80:W3=W1:W4=W2:FOR K0=C5 TO C11 STEP C6
  80. 800 W1=D(K5,K0):W2=D(K5,K0+C1):GOSUB 50:D(K4,K0)=W1:D(K4,K0+C1)=W2:NEXT K0:W1=C2*SQR(W7)*W9:W2=-C2*W8+.5*PI:GOSUB 80
  81. 810 W3=W1:W4=W2:FOR K0=C7 TO C9 STEP C2:W1=D(K5,K0):W2=D(K5,K0+C1):GOSUB 50:D(K4,K0)=W1:D(K4,K0+C1)=W2:NEXT K0:GOTO 900
  82. 820 FOR K0=C5 TO C11 STEP C2:FOR K3=C0 TO C1:D(K2,K0+K3)=D(K5,16-K0+K3):NEXT K3:NEXT K0:GOTO 890
  83. 830 FOR K0=C5 TO C12:D(K2,K0)=(C1+C2*(K3=38))*D(K5,K0):NEXT K0:GOSUB 210:ON 46-K3 GOTO 870,860
  84. 840 FOR K0=C5 TO C12:F(K1,K0-C4)=D(K2,K0):D(K2,K0)=(C1+C2*(K3=38))*D(D(K2,C14),K0):NEXT K0:GOSUB 210
  85. 850 FOR K0=C5 TO C12:D(K2,K0)=D(K2,K0)+F(K1,K0-C4):NEXT K0:GOSUB 210:GOTO 890
  86. 860 FOR K0=C7 TO C11 STEP C2:D(K2,C5)=D(K2,C5)+D(K2,K0):D(K2,C6)=D(K2,C6)+D(K2,K0+C1):NEXT K0:GOTO 880
  87. 870 FOR K0=C5 TO C9 STEP C2:D(K2,C11)=D(K2,C11)+D(K2,K0):D(K2,C12)=D(K2,C12)+D(K2,K0+C1):NEXT K0
  88. 880 FOR K0=C7 TO C9 STEP C2:D(K2,K0)=C0-D(K2,K0)-D(K2,C5-C6*(K3=44)):D(K2,K0+C1)=C0-D(K2,K0+C1)-D(K2,C6-C6*(K3=44)):NEXT K0:GOSUB 210
  89. 890 FOR K0=C5 TO C12:D(K4,K0)=(C1+C2*(K3=38))*D(K2-(K5-K2)*(K3=42),K0):NEXT K0
  90. 900 NEXT K2:NEXT K1:MID$(FLAG$,C2)="Y":RETURN
  91. 910 LPRINT " ERROR #";ERR;" OCCURRED IN LINE #";ERL;CHR$(C7):RESUME 2340
  92. 920 PRINT CHR$(7);"EXIT: Are you sure (Y/N)?":K0=ASC(INPUT$(1)):RETURN
  93. 930 INPUT "Disk directory:",FC$:IF FC$="" THEN RETURN
  94. 940 MID$(FLAG$,6)="N":ON ERROR GOTO 1050:CLS:PRINT "            DISK DIRECTORY"
  95. 950 FILES FC$:FOR K1=0 TO 20:W1=SCREEN(K1+3,1):IF W1=32 THEN 970
  96. 960 NEXT K1
  97. 970 MID$(FLAG$,6)="N":PRINT " Wouldst thou like a hard copy (Y/N)?";
  98. 980 LOCATE CSRLIN,1:C$=INPUT$(1):IF C$<>"Y" THEN RETURN
  99. 990 PRINT " Title                                 ";:LOCATE CSRLIN,C7
  100. 1000 INPUT L$:LOCATE CSRLIN-1,1:L$=L$+STRING$(39-LEN(L$)," ")
  101. 1010 ON ERROR GOTO 1040:LPRINT L$:FOR K0=1 TO 2+K1:FOR K3=1 TO 39
  102. 1020 K4=SCREEN(K0,K3):MID$(L$,K3)=CHR$(K4):NEXT K3:LPRINT L$
  103. 1030 L$=STRING$(39," "):NEXT K0:RETURN
  104. 1040 PRINT " PRINTER? WHAT PRINTER?               ";CHR$(7):RESUME 1100
  105. 1050 IF ERR=53 THEN PRINT CHR$(7);" FILE ";FC$;" NOT FOUND.";:RESUME 1100
  106. 1060 IF ERR=61 OR ERR=67 THEN PRINT CHR$(7);" DISKETTE IS FULL.  GET ANOTHER.      ";:RESUME 1100
  107. 1070 IF ERR=70 THEN PRINT CHR$(7);" DISKETTE IS WRITE PROTECTED.         ";:RESUME 1100
  108. 1080 IF ERR=71 THEN PRINT CHR$(7);" DISK DRIVE IS NOT READY.             ";:RESUME 1100
  109. 1090 PRINT CHR$(7);" UNSPECIFIED I/O ERROR.               ";:RESUME 1100
  110. 1100 FOR K0=1 TO 1000:FOR K3=1 TO 1000:IF INKEY$="" THEN NEXT K3:NEXT K0
  111. 1110 RETURN
  112. 1120 INPUT " Enter file name:",FC$:RETURN
  113. 1130 ON ERROR GOTO 1170:OPEN FD$ FOR INPUT AS #1:CLOSE #1
  114. 1140 PRINT CHR$(7);" Overwrite current ";FC$;" (Y/N)?";
  115. 1150 LOCATE CSRLIN,1:K0=ASC(INPUT$(1)):IF K0<>89 THEN RETURN
  116. 1160 CLOSE #1:OPEN FD$ FOR OUTPUT AS #1:K0=89:RETURN
  117. 1170 ON -(ERR<>53) GOTO 1050:RESUME 1160
  118. 1180 IF MID$(FLAG$,C2,C1)="Y" THEN 1220
  119. 1190 IF MID$(FLAG$,C1,C1)="N" THEN PRINT " CAN'T, NO NETWORK.";CHR$(C7):GOTO 2490
  120. 1200 IF MID$(FLAG$,C5,C1)="N" THEN PRINT " CAN'T, NO FREQUENCIES.";CHR$(C7):GOTO 2390
  121. 1210 PRINT "      PERFORMING RESPONSE ANALYSIS":GOSUB 330
  122. 1220 K5=C8:CLS:PRINT "            RESPONSE MENU":PRINT:PRINT"     1 -Reflection S-parameters":PRINT"     2 -Transmission S-parameters":PRINT"     3 -Input/output impedances"
  123. 1230 PRINT"     4 -Return/transmission losses":PRINT"     5 -Save S-parameters on disk":PRINT"     6 -Input stability circles":PRINT"     7 -Output stability circles":PRINT"     8 -Plot reflection parameters"
  124. 1240 PRINT "     9 -Plot return losses":PRINT "     0 -Plot transmission losses":PRINT "     RET -Return"
  125. 1250 CLOSE #1:ON ERROR GOTO 910:LOCATE 15,1:PRINT L$:PRINT L$:LOCATE 15,1:K0=ASC(INPUT$(1)):ON -(K0=13) GOTO 2340:IF K0=63 THEN GOSUB 930:GOTO 1220
  126. 1260 IF K0>47 THEN ON K0-47 GOSUB 2140,1300,1380,1340,1420,1450,1480,1480,1670,1940:GOTO 1220
  127. 1270 PRINT CHR$(7):GOTO 1250
  128. 1280 IF F(K1,C0)>=C1 THEN MID$(L$,C1,C7)=STR$(F(K1,C0)):RETURN
  129. 1290 MID$(L$,C2,C7)=MID$(STR$(F(K1,C0)+C1),C3):RETURN
  130. 1300 CLS:PRINT "  FREQ        S11            S22":PRINT " in GHz   MAG    ANGLE   MAG    ANGLE"
  131. 1310 FOR K1=C0 TO K9:FOR K2=C1 TO C7 STEP C6:W1=F(K1,K2):W2=F(K1,K2+C1):GOSUB 90
  132. 1320 K3=(15*K2+39)/C6:MID$(L$,K3,C6)=STR$(INT(CK*W1+.5)/CK)
  133. 1330 MID$(L$,K3+C8,C7)=STR$(INT(CC*W2*RD+.5)/CC):NEXT K2:GOSUB 1280:PRINT L$:L$=STRING$(C39," "):NEXT K1:GOTO 970
  134. 1340 CLS:PRINT "  FREQ            IMPEDANCES":PRINT" in GHz     INPUT           OUTPUT"
  135. 1350 FOR K1=C0 TO K9:GOSUB 1280:FOR K2=C1 TO C7 STEP C6:K3=(C8*K2+C19)/C3:W3=C1-F(K1,K2):W4=C0-F(K1,K2+C1):W1=5000*(C2-W3):W2=-5000*W4:GOSUB 60
  136. 1360 MID$(L$,K3,C6)=STR$(INT(W1+.5)/CC):MID$(L$,K3+C6,C2)="+j":IF SGN(W2)<C0 THEN MID$(L$,K3+C6,C2)="-j"
  137. 1370 MID$(L$,K3+C8,C6)=STR$(ABS(INT(W2+.5)/CC)):NEXT K2:PRINT L$:L$=STRING$(C39," "):NEXT K1:GOTO 970
  138. 1380 CLS:PRINT "  FREQ        S21            S12":PRINT " in GHz   MAG    ANGLE   MAG    ANGLE"
  139. 1390 FOR K1=C0 TO K9:GOSUB 1280:FOR K2=C3 TO C5 STEP C2:W1=F(K1,K2):W2=F(K1,K2+C1):GOSUB 90
  140. 1400 K3=(15*K2-27)/C2:MID$(L$,K3,C7)=STR$(INT(CK*W1+.5)/CK)
  141. 1410 MID$(L$,K3+C8,C7)=STR$(INT(CC*W2*RD+.5)/CC):NEXT K2:PRINT L$:L$=STRING$(C39," "):NEXT K1:GOTO 970
  142. 1420 CLS:PRINT  "  FREQ    S11     S21     S12     S22":PRINT " in GHz  in dB   in dB   in dB   in dB"
  143. 1430 FOR K1=C0 TO K9:GOSUB 1280:FOR K2=C1 TO C7 STEP C2:K3=C4*K2+C5:W1=F(K1,K2)*F(K1,K2)+F(K1,K2+C1)*F(K1,K2+C1):IF W1<9.999999E-21 THEN W1=9.999999E-21
  144. 1440 MID$(L$,K3,C7)=STR$(INT(CK*LOG(W1)/LOG(C10)+.5)/CC):NEXT K2:PRINT L$:L$=STRING$(C39," "):NEXT K1:GOTO 970
  145. 1450 GOSUB 1120:ON -(FC$="") GOTO 1250:FD$=FC$+".DAT":GOSUB 1130:ON -(K0<>89) GOTO 1250:ON ERROR GOTO 1250
  146. 1460 FOR K2=C0 TO K9:PRINT #C1,F(K2,C0):FOR K3=C1 TO C7 STEP C2:W1=F(K2,K3)
  147. 1470 W2=F(K2,K3+C1):GOSUB 90:PRINT #C1,W1:PRINT #C1,W2*RD:NEXT K3:NEXT K2:RETURN
  148. 1480 IF MID$(FLAG$,C3,C1)="Y" THEN 1590
  149. 1490 PRINT "    PERFORMING STABILITY ANALYSIS":FOR K1=C0 TO K9:W1=F(K1,C5):W2=F(K1,C6):W3=F(K1,C3):W4=F(K1,C4):GOSUB 50
  150. 1500 W7=W1:W8=W2:W9=W1*W1+W2*W2:W9=SQR(W9-9.999999E-21*(W9<9.999999E-21)):W1=F(K1,C1):W2=F(K1,C2):L1=W1:L2=W2:L3=L1*L1+L2*L2:W0=(W3*W3+W4*W4)*(C1-L3)
  151. 1510 W3=F(K1,C7):W4=F(K1,C8):L4=W3:L5=W4:L6=L4*L4+L5*L5:GOSUB 50:W3=W1-W7:W4=W2-W8:W8=W3*W3+W4*W4
  152. 1520 W1=L4:W2=C0-L5:GOSUB 50:W5=L3-W8-9.999999E-21*(L3=W8):L7=L1-W1:W1=L7/W5:L8=L2-W2:W2=L8/W5:W6=W3:GOSUB 90
  153. 1530 W3=W6:W6=SQR(L3):D(K1,C5)=(C1-W5-L6)/(C2*W9-9.999999E-21*(W9=C0))
  154. 1540 D(K1,C6)=W1:D(K1,C7)=-RD*W2:D(K1,C8)=ABS(W9/W5):MID$(FI$,K1+C1)=CHR$(73-C6*((W6<C1 AND W5>C0) OR (W6>C1 AND W5<C0)))
  155. 1550 W1=L1:W2=C0-L2:GOSUB 50:W5=L6-W8-9.999999E-21*(L6=W8):W1=(L4-W1)/W5:W2=(L5-W2)/W5:GOSUB 90:W6=SQR(L6)
  156. 1560 D(K1,C9)=W1:D(K1,C10)=-RD*W2:D(K1,C11)=ABS(W9/W5):MID$(FO$,K1+C1)=CHR$(73-C6*((W6<C1 AND W5>C0) OR (W6>C1 AND W5<C0)))
  157. 1570 IF D(K1,C5)>=C1 THEN W1=L1:W2=C0-L2:W3=L7:W4=L8:GOSUB 50:D(K1,C12)=C10*LOG(W0/(C1-L6+L3*(L3-W8)-C2*W1))/LOG(C10)
  158. 1580 FOR K2=C5 TO C12:D(K1,K2)=INT(CC*D(K1,K2)+.5)/CC:NEXT K2:NEXT K1:MID$(FLAG$,C3)="Y"
  159. 1590 IF K0<>54 THEN 1630
  160. 1600 CLS:PRINT "  FREQ    INPUT STABILITY CIRCLES  STAB":PRINT " in GHz   DIST  ANGLE  RADIUS I/O FACTOR";
  161. 1610 FOR K1=C0 TO K9:GOSUB 1280:FOR K2=C6 TO C8:K3=C7*K2-33:MID$(L$,K3,C6)=STR$(D(K1,K2)):NEXT K2
  162. 1620 MID$(L$,32,C1)=MID$(FI$,K1+C1):MID$(L$,34,C6)=STR$(D(K1,C5)):PRINT L$:L$=STRING$(C39," "):NEXT K1:GOTO 970
  163. 1630 CLS:PRINT "  FREQ   OUTPUT STABILITY CIRCLES  Gmax":PRINT" in GHz   DIST  ANGLE  RADIUS I/O in dB"
  164. 1640 FOR K1=C0 TO K9:GOSUB 1280:FOR K2=C9 TO C11:K3=C7*K2-54:MID$(L$,K3,C7)=STR$(D(K1,K2)):NEXT K2
  165. 1650 MID$(L$,32,C1)=MID$(FO$,K1+C1):IF D(K1,C5)>=C1 THEN MID$(L$,34,C6)=STR$(D(K1,C12))
  166. 1660 PRINT L$:L$=STRING$(C39," "):NEXT K1:GOTO 970
  167. 1670 W5=C1:FOR K1=CO TO K9:IF ABS(F(K1,C1))>1.6 THEN W5=ABS(F(K1,C1))/1.6
  168. 1680 IF ABS(F(K1,C2))>C1 THEN W5=ABS(F(K1,C2))
  169. 1690 IF ABS(F(K1,C7))>1.6 THEN W5=ABS(F(K1,C7))/1.6
  170. 1700 IF ABS(F(K1,C8))>C1 THEN W5=ABS(F(K1,C8))
  171. 1710 NEXT K1:CLS:SCREEN C1,C0:COLOR C0,C1:PRINT "PRESS ANY KEY              NORMALIZED TOTO RETURN                        50 OHMS"
  172. 1720 CIRCLE (160,100),100/W5,3,,,.9899999
  173. 1730 CIRCLE (160+100/W5,100*(1-1/W5)),100/W5,3,PI,248/RD,1
  174. 1740 CIRCLE (160+100/W5,100*(1+1/W5)),100/W5,3,112/RD,PI,1
  175. 1750 LINE (160-100/W5,100)-(160+100/W5,100),3
  176. 1760 CIRCLE (160+16/W5,100),83/W5,3,60/RD,300/RD,1
  177. 1770 CIRCLE (160+33/W5,100),67/W5,3,35/RD,325/RD,1
  178. 1780 CIRCLE (160+50/W5,100),50/W5,3,45/RD,315/RD,1
  179. 1790 CIRCLE (160+100/W5,100-50/W5),50/W5,3,142/RD,270/RD,1
  180. 1800 CIRCLE (160+100/W5,100+50/W5),50/W5,3,90/RD,218/RD,1
  181. 1810 CIRCLE (160+100/W5,100-19/W5),19/W5,3,113/RD,270/RD,1
  182. 1820 CIRCLE (160+100/W5,100+19/W5),19/W5,3,90/RD,247/RD,1
  183. 1830 CIRCLE (160+67/W5,100),33/W5,3,,,1
  184. 1840 CIRCLE (160+83/W5,100),17/W5,3,,,1
  185. 1850 CIRCLE (160+100/W5,100-200/W5),200/W5,3,218.5/RD,259/RD,1
  186. 1860 CIRCLE (160+100/W5,100+200/W5),200/W5,3,101/RD,141.5/RD,1
  187. 1870 CIRCLE (160+100/W5,100-500/W5),500/W5,3,245.5/RD,261.5/RD,1
  188. 1880 CIRCLE (160+100/W5,100+500/W5),500/W5,3,98.5/RD,114.5/RD,1
  189. 1890 PSET(160+100*F(0,1)/W5,100-100*F(0,2)/W5),3:IF K9>0 THEN FOR K1=1 TO K9:LINE -(160+100*F(K1,1)/W5,100-100*F(K1,2)/W5),3:NEXT K1
  190. 1900 LOCATE INT(12.5-11.5*F(K9,2)/W5),INT(20+12.5*F(K9,1)/W5):PRINT "S11";:IF K5<>8 THEN 1930
  191. 1910 PSET(160+100*F(0,7)/W5,100-100*F(0,8)/W5),3:IF K9>0 THEN FOR K1=1 TO K9:LINE -(160+100*F(K1,7)/W5,100-100*F(K1,8)/W5),3:NEXT K1
  192. 1920 LOCATE INT(12.5-11.5*F(K9,8)/W5),INT(20+12.5*F(K9,7)/W5):PRINT "S22";
  193. 1930 C$=INPUT$(1):SCREEN 0,0:RETURN
  194. 1940 W1=F(0,1):W2=F(0,2):W1=INT(100*LOG(W1*W1+W2*W2)/LOG(10))/10:W2=W1+.1
  195. 1950 W3=F(0,7):W4=F(0,8):W3=INT(100*LOG(W3*W3+W4*W4)/LOG(10))/10:W4=W3+.1
  196. 1960 FOR K1=1 TO K9:W5=INT(100*LOG(F(K1,1)*F(K1,1)+F(K1,2)*F(K1,2))/LOG(10))/10
  197. 1970 IF W5<W1 THEN W1=W5
  198. 1980 W5=W5+.1:IF W5>W2 THEN W2=W5
  199. 1990 W5=INT(100*LOG(F(K1,7)*F(K1,7)+F(K1,8)*F(K1,8))/LOG(10))/10
  200. 2000 IF W5<W3 THEN W3=W5
  201. 2010 W5=W5+.1:IF W5>W4 THEN W4=W5
  202. 2020 NEXT K1:W7=LOG(F(K9,0))/LOG(10):W7=10^(1+(W7<0)*INT(W7)):W5=INT(W7*F(0,0))/W7
  203. 2030 W6=INT(W7*F(K9,0)):W6=(W6-(W6<W7*F(K9,0)))/W7:W7=(W2-W1)/5:W8=(W4-W3)/5:W9=(W6-W5)/5
  204. 2040 CLS:SCREEN 1,0:COLOR 0,1:FOR K1=1 TO 11:PRINT "    .  .  .  .  .  .  .  .  .  .  .":PRINT:NEXT K1
  205. 2050 PSET (34,1):LINE -(34,166):LINE -(275,166):LINE -(275,1)
  206. 2060 FOR K1=0 TO 5:LOCATE K1*4+1,1:PRINT MID$(STR$(W2-K1*W7),2+((W2-K1*W7)<0),4)
  207. 2070 LOCATE K1*4+1,36:PRINT MID$(STR$(W4-K1*W8),2+((W4-K1*W8)<0),5):NEXT K1
  208. 2080 FOR K1=0 TO 5:LOCATE 22,K1*6+3:PRINT MID$(STR$(W5+K1*W9),2,5):NEXT K1
  209. 2090 W7=F(0,1):W8=F(0,2):PSET (35+INT(239*(F(0,0)-W5)/(W6-W5)),5+INT(160*(W2-10*LOG(W7*W7+W8*W8)/LOG(10))/(W2-W1)))
  210. 2100 FOR K1=1 TO K9:W7=F(K1,1):W8=F(K1,2):LINE -(35+INT(239*(F(K1,0)-W5)/(W6-W5)),5+INT(160*(W2-10*LOG(W7*W7+W8*W8)/LOG(10))/(W2-W1))):NEXT K1
  211. 2110 W7=F(0,7):W8=F(0,8):PSET (35+INT(239*(F(0,0)-W5)/(W6-W5)),5+INT(160*(W4-10*LOG(W7*W7+W8*W8)/LOG(10))/(W4-W3)))
  212. 2120 FOR K1=1 TO K9:W7=F(K1,7):W8=F(K1,8):LINE -(35+INT(239*(F(K1,0)-W5)/(W6-W5)),5+INT(160*(W4-10*LOG(W7*W7+W8*W8)/LOG(10))/(W4-W3))):NEXT K1
  213. 2130 LOCATE 23,1:PRINT " S11        Frequency in GHz       S22":PRINT "in dB   PRESS ANY KEY TO RETURN   in dB";:C$=INPUT$(1):SCREEN 0,0:RETURN
  214. 2140 W1=F(0,3):W2=F(0,4):W1=INT(100*LOG(W1*W1+W2*W2)/LOG(10))/10:W2=W1+.1
  215. 2150 W3=F(0,5):W4=F(0,6):W3=INT(100*LOG(W3*W3+W4*W4)/LOG(10))/10:W4=W3+.1
  216. 2160 FOR K1=1 TO K9:W5=INT(100*LOG(F(K1,3)*F(K1,3)+F(K1,4)*F(K1,4))/LOG(10))/10
  217. 2170 IF W5<W1 THEN W1=W5
  218. 2180 W5=W5+.1:IF W5>W2 THEN W2=W5
  219. 2190 W5=INT(100*LOG(F(K1,5)*F(K1,5)+F(K1,6)*F(K1,6))/LOG(10))/10
  220. 2200 IF W5<W3 THEN W3=W5
  221. 2210 W5=W5+.1:IF W5>W4 THEN W4=W5
  222. 2220 NEXT K1:W7=LOG(F(K9,0))/LOG(10):W7=10^(1+(W7<0)*INT(W7)):W5=INT(W7*F(0,0))/W7
  223. 2230 W6=INT(W7*F(K9,0)):W6=(W6-(W6<W7*F(K9,0)))/W7:W7=(W2-W1)/5:W8=(W4-W3)/5:W9=(W6-W5)/5
  224. 2240 CLS:SCREEN 1,0:COLOR 0,1:FOR K1=1 TO 11:PRINT "    .  .  .  .  .  .  .  .  .  .  .":PRINT:NEXT K1
  225. 2250 PSET (34,1):LINE -(34,166):LINE -(275,166):LINE -(275,1)
  226. 2260 FOR K1=0 TO 5:LOCATE K1*4+1,1:PRINT MID$(STR$(W2-K1*W7),2+((W2-K1*W7)<0),4)
  227. 2270 LOCATE K1*4+1,36:PRINT MID$(STR$(W4-K1*W8),2+((W4-K1*W8)<0),5):NEXT K1
  228. 2280 FOR K1=0 TO 5:LOCATE 22,K1*6+3:PRINT MID$(STR$(W5+K1*W9),2,5):NEXT K1
  229. 2290 W7=F(0,3):W8=F(0,4):PSET (35+INT(239*(F(0,0)-W5)/(W6-W5)),5+INT(160*(W2-10*LOG(W7*W7+W8*W8)/LOG(10))/(W2-W1)))
  230. 2300 FOR K1=1 TO K9:W7=F(K1,3):W8=F(K1,4):LINE -(35+INT(239*(F(K1,0)-W5)/(W6-W5)),5+INT(160*(W2-10*LOG(W7*W7+W8*W8)/LOG(10))/(W2-W1))):NEXT K1
  231. 2310 W7=F(0,5):W8=F(0,6):PSET (35+INT(239*(F(0,0)-W5)/(W6-W5)),5+INT(160*(W4-10*LOG(W7*W7+W8*W8)/LOG(10))/(W4-W3)))
  232. 2320 FOR K1=1 TO K9:W7=F(K1,5):W8=F(K1,6):LINE -(35+INT(239*(F(K1,0)-W5)/(W6-W5)),5+INT(160*(W4-10*LOG(W7*W7+W8*W8)/LOG(10))/(W4-W3))):NEXT K1
  233. 2330 LOCATE 23,1:PRINT " S21        Frequency in GHz       S12":PRINT "in dB   PRESS ANY KEY TO RETURN   in dB";:C$=INPUT$(1):SCREEN 0,0:RETURN
  234. 2340 CLS:LOCATE 1,15:PRINT "ALMOND MENU":PRINT:PRINT"          1 -Edit network":PRINT"          2 -Enter frequency"
  235. 2350 PRINT "          3 -Determine response":PRINT"          4 -Optimize network":PRINT "          5 -End program"
  236. 2360 LOCATE 16,13:PRINT "COPYRIGHT 1983":PRINT:PRINT "          MACADAMIA SOFTWARE"
  237. 2370 ON ERROR GOTO 910:LOCATE 11,1:PRINT L$:PRINT L$:LOCATE 11,1:K0=ASC(INPUT$(1))
  238. 2380 ON (K0>48)*(48-K0) GOTO 2490,2390,1180,4000,2480:PRINT CHR$(7):GOTO 2370
  239. 2390 INPUT "FIRST FREQUENCY  ";FC$:W1=VAL(FC$):ON -(W1=0) GOTO 2370:W3=0:K9=-1:MID$(FLAG$,2)="NNNYN"
  240. 2400 LOCATE 11,1:MID$(L$,1,14)= "LAST FREQUENCY":MID$(L$,19)=STR$(W1):PRINT L$
  241. 2410 L$=STRING$(39," "):PRINT L$:K9=K9+1:F(K9,0)=W1:IF K9<19 THEN 2430
  242. 2420 LOCATE 12,1:PRINT "LIMIT REACHED";CHR$(7);L$:GOSUB 1100:GOTO 2370
  243. 2430 IF W3>F(K9,0) AND W1+W2<=W3 THEN W1=W1+W2:GOTO 2400
  244. 2440 LOCATE 12,1:INPUT "NEXT FREQUENCY   ";FC$:W2=VAL(FC$):ON -(W2=0) GOTO 2370
  245. 2450 IF W2>W1 THEN W1=W2:GOTO 2400
  246. 2460 LOCATE 12,1:PRINT L$:LOCATE 12,1:INPUT "NEXT FREQUENCY   ";FC$:W3=VAL(FC$)
  247. 2470 ON 2+(W3=0) GOTO 2370,2430
  248. 2480 GOSUB 920:ON -(K0<>89 AND K0<>121) GOTO 2370:WIDTH 80:END
  249. 2490 GOSUB 1120:ON -(FC$="") GOTO 2540:ON ERROR GOTO 3070:OPEN FC$+".NET" FOR INPUT AS #C1:MID$(FLAG$,C1)="FNN":FILE$=STRING$(CC," "):K6=C0:K7=C0:K8=C0:L0=-C1
  250. 2500 ON ERROR GOTO 3100:FOR K8=C0 TO C19:INPUT #C1,K1,W1:D(K8,C1)=W1:IF K1<C2 OR K1=45 THEN 2530
  251. 2510 IF K1>C19 AND K1<24 THEN INPUT #C1,FC$:K6=K6+C2-C6*(K1=21):K7=K7+C1:D(K8,C2)=K7:MID$(FILE$,C10*K7-C9,C10)=FC$:GOTO 2530
  252. 2520 FOR K3=C1 TO C1-(K1<17 OR (K1>26 AND K1<40))-(K1<C8 OR (K1>32 AND K1<35)):INPUT #C1,W1:D(K8,K3+C1)=W1:NEXT K3
  253. 2530 D(K8,C0)=K1:NEXT K8
  254. 2540 K1=C0:IF MID$(FLAG$,C6,C1)="Y" THEN 2590
  255. 2550 CLS:LOCATE C1,C13:PRINT"NETWORK EDITOR":LOCATE C14,C14:PRINT "EDITOR MENU":PRINT
  256. 2560 PRINT " 1 -Add an element  6 -New network":PRINT " 2 -Modify element  7 -Edit data files"
  257. 2570 PRINT " 3 -Delete element  > -Page forward":PRINT " 4 -List network    < -Page backward"
  258. 2580 PRINT " 5 -Save network    RET -Return":MID$(FLAG$,C6)="Y"
  259. 2590 LOCATE C3,C1:MID$(L$,C2,C11)="LINE NUMBER":MID$(L$,C20,C3)=STR$(C1+K1):PRINT L$:L$=STRING$(39," "):MID$(L$,C2,C12)="ELEMENT TYPE":IF K1<K8 THEN K3=D(K1,C0):MID$(L$,21,C3)=MID$(E$,C3*K3+C1)
  260. 2600 PRINT L$:L$=STRING$(C39," "):MID$(L$,C2,C14)="ELEMENT NUMBER":IF K1<K8 THEN MID$(L$,C20,C3)=STR$(D(K1,C1))
  261. 2610 PRINT L$:L$=STRING$(C39," "):K2=C1:IF K1>=K8 OR K3<C2 OR K3=45 THEN 2650
  262. 2620 IF K3>C19 AND K3<24 THEN MID$(L$,C2,C9)="FILE NAME":MID$(L$,21,C10)=MID$(FILE$,C10*D(K1,C2)-C9):PRINT L$:L$=STRING$(C39," "):GOTO 2650
  263. 2630 FOR K2=C1 TO C1-(K3<17 OR (K3>26 AND K3<40))-(K3<C8 OR (K3>32 AND K3<35)):MID$(L$,C2,C11)="PARAMETER #"
  264. 2640 MID$(L$,C13,C2)=STR$(K2):MID$(L$,C20,C10)=STR$(INT(D(K1,K2+C1)*CK+.5)/CK):PRINT L$:L$=STRING$(C39," "):NEXT K2
  265. 2650 FOR K3=K2 TO C3:PRINT L$:NEXT K3
  266. 2660 CLOSE # C1:LOCATE C11,C1:PRINT L$:PRINT L$:LOCATE C11,C1:K0=ASC(INPUT$(C1)):IF K0=49 AND K8<C20 THEN 2760
  267. 2670 ON (K8>K1)*(K0>49)*(K0-49) GOTO 2930,2940:ON (K8>C0)*(K0>51)*(K0-51) GOTO 3110,3020
  268. 2680 ON (K0>53)*(53-K0) GOTO 3450,3460:ON (K0>59)*(59-K0) GOTO 2730,2700,2710,2750
  269. 2690 ON (K0=C13)*((K8>C0)+(MID$(FLAG$,C1,C1)<>"Y")) GOTO 3440,3180
  270. 2700 PRINT CHR$(C7):GOTO 2660
  271. 2710 IF K1>=K8 OR K1=C19 THEN K1=-C1
  272. 2720 K1=K1+C1:GOTO 2590
  273. 2730 IF K1=C0 THEN K1=K8-(K8=C0)
  274. 2740 K1=K1-C1:GOTO 2590
  275. 2750 GOSUB 930:GOTO 2540
  276. 2760 IF K1<K8 THEN FOR K3=C1 TO C2:LOCATE C3+K3,C19:PRINT "          ":NEXT K3:PRINT L$:PRINT L$:PRINT L$
  277. 2770 LOCATE C4,C19:INPUT C$: IF C$="" THEN 2590
  278. 2780 FOR K2=C0 TO 45:IF C$<>MID$(E$,C3*K2+C1,C3) THEN NEXT K2:GOTO 2920
  279. 2790 IF K1<K8 THEN FOR K3=K8-C1 TO K1 STEP -C1:FOR K4=C0 TO C4:D(K3+C1,K4)=D(K3,K4):NEXT K4:NEXT K3
  280. 2800 K8=K8+C1:D(K1,C0)=K2:L0=-C1:LOCATE C5,C19:INPUT FC$:ON -(FC$="") GOTO 3000:D(K1,C1)=INT(ABS(VAL(FC$)))
  281. 2810 IF MID$(FLAG$,C1,C1)<>"F" THEN MID$(FLAG$,C1)="N"
  282. 2820 LOCATE C6,C1:IF K2<C2 OR K2=45 THEN 2590
  283. 2830 IF K2<C20 OR K2>23 THEN 2880
  284. 2840 INPUT " FILE NAME        ";FC$:IF FC$="" THEN ON (K0-48) GOTO 3000,2590
  285. 2850 MID$(FLAG$,C1)="F":IF K0<> 50 THEN K7=K7+C1:D(K1,C2)=K7:D(K1,C3)=K6:K6=K6+C2-C6*(K2=21)
  286. 2860 MID$(FLAG$,C2)="NN":MID$(FILE$,C10*K7-C9,C10)="          ":MID$(FILE$,C10*K7-C9,C10)=FC$:IF K6<C20 THEN 2590
  287. 2870 LOCATE C11,C1:PRINT " DATA STORAGE LIMIT EXCEEDED.";CHR$(C7):GOTO 2940
  288. 2880 K3=C1-(K2<17 OR (K2>26 AND K2<40))-(K2<C8 OR (K2>32 AND K2<35))
  289. 2890 FOR K4=C1 TO K3:PRINT " PARAMETER #";K4;"   ";:INPUT FC$:IF FC$="" AND K0=49 THEN 3000
  290. 2900 IF FC$<>"" THEN MID$(FLAG$,C2)="NN":D(K1,K4+C1)=ABS(VAL(FC$)*(K2<35 OR (K2>38 AND K4>C1))-INT(VAL(FC$))*((K2>34)-(K2>38 AND K4>C1)))
  291. 2910 NEXT K4:GOTO 2590
  292. 2920 LOCATE C11,C1:PRINT " NOT A VALID ELEMENT TYPE.";CHR$(C7):GOSUB 1100:GOTO 2590
  293. 2930 K2=D(K1,C0):ON C1-(K2>C1)-((K2>34 AND K2<43) OR (K2>C19 AND K2<24)) GOTO 2700,2820,2810
  294. 2940 IF MID$(FLAG$,C1,C1)<>"F" THEN MID$(FLAG$,C1)="NNN"
  295. 2950 L0=-C1:IF D(K1,C0)<C20 OR D(K1,C0)>23 THEN 3000
  296. 2960 K3=D(K1,C2):IF K3=K7 THEN 2990
  297. 2970 FOR K2=C0 TO K8:K4=D(K2,C0):K5=D(K2,C2):D(K2,C2)=D(K2,C2)+(K4>C19 AND K4<24 AND K5>K3):NEXT K2
  298. 2980 MID$(FILE$,C10*K3-C9)=MID$(FILE$,C10*K3+C1)
  299. 2990 K7=K7-C1:K6=K6-C2+C6*(D(K1,C0)=21)
  300. 3000 IF K1<K8-C1 THEN FOR K2=K1 TO K8-C2:FOR K3=C0 TO C4:D(K2,K3)=D(K2+C1,K3):NEXT K3:NEXT K2
  301. 3010 K8=K8-C1:GOTO 2590
  302. 3020 GOSUB 1120:ON -(FC$="") GOTO 2660:FD$=FC$+".NET":GOSUB 1130:ON -(K0<>89) GOTO 2660:ON ERROR GOTO 3070
  303. 3030 FOR K2=C0 TO K8-C1:K3=D(K2,C0):IF K3<C20 OR K3>23 THEN 3050
  304. 3040 PRINT #C1,K3:PRINT #C1,D(K2,C1):PRINT #C1,MID$(FILE$,C10*D(K2,C2)-C9,C10):GOTO 3060
  305. 3050 FOR K3=C0 TO C2-(K3<17 OR (K3>26 AND K3<40))-(K3<C8 OR (K3>32 AND K3<35))+C3*(K3<C2)+(K3=45):PRINT #C1,D(K2,K3):NEXT K3
  306. 3060 NEXT K2:GOTO 2660
  307. 3070 GOSUB 1050:GOTO 2540
  308. 3080 RESUME 3220
  309. 3090 RESUME 3300
  310. 3100 RESUME 2540
  311. 3110 CLS:PRINT "    ELEMENT          PARAMETER":PRINT"   TYPE  NUM    #1      #2      #3":FOR K1=C0 TO K8-C1:MID$(L$,C1,C3)=STR$(C1+K1):ON ERROR GOTO 910
  312. 3120 K3=D(K1,C0):MID$(L$,C5,C3)=MID$(E$,C3*K3+C1):MID$(L$,C9,C3)=STR$(D(K1,C1)):IF K3<C2 OR K3=45 THEN 3160
  313. 3130 IF K3>C19 AND K3<24 THEN MID$(L$,16,C12)="FILE NAME = ":MID$(L$,28,C10)=MID$(FILE$,C10*D(K1,C2)-C9):GOTO 3160
  314. 3140 FOR K3=C1 TO C1-(K3<17 OR (K3>26 AND K3<40))-(K3<C8 OR (K3>32 AND K3<35))
  315. 3150 MID$(L$,C8*K3+C7,C7)=STR$(INT(D(K1,K3+C1)*CK+.5)/CK):NEXT K3
  316. 3160 IF K1=K2 AND MID$(FLAG$,C6,C1)="E" THEN COLOR C0,C7:PRINT CHR$(C7);
  317. 3170 PRINT L$:COLOR C7,C0:L$=STRING$(C39," "):NEXT K1:GOSUB 970:GOTO 2540
  318. 3180 L7=C0:FOR K2=C0 TO K8-C1:K1=D(K2,C0):ON -((K2=K8-C1)+(K1=45)) GOTO 3220
  319. 3190 K3=D(K2,C1):GOSUB 130:ON -(K1<35)*(C1-(K3=K2)) GOTO 3220,3250
  320. 3200 D(K2,C4)=K3:ON -(K1>35)-(K1=45)*(C1-(K3=K2)) GOTO 3230,3250,3220
  321. 3210 IF D(K2,C2)<D(K2,C3) THEN FOR K5=D(K2,C2) TO D(K2,C3):K3=K5:GOSUB 130:IF K3<K2 THEN NEXT K5:GOTO 3230
  322. 3220 MID$(FLAG$,C6)="E":GOTO 3110
  323. 3230 K3=D(K2,C2):GOSUB 130:D(K2,C13)=K3:IF K3>=K2 THEN 3220
  324. 3240 IF K1>35 AND K1<39 THEN K3=D(K2,C3):GOSUB 130:D(K2,C14)=K3:IF K3>=K2 THEN 3220
  325. 3250 NEXT K2:IF K7=C0 OR MID$(FLAG$,C1,C1)<>"F" THEN 3430
  326. 3260 ON ERROR GOTO 3080:FOR K2=C0 TO K8-C1:K1=D(K2,C0):IF K1>C19 AND K1<24 THEN FD$=MID$(FILE$,C10*D(K2,C2)-C9,C10):OPEN FD$+".DAT" FOR INPUT AS #C1:CLOSE #C1
  327. 3270 NEXT K2:FOR K2=C0 TO K8-C1:K1=D(K2,C0):IF K1<C20 OR K1>23 THEN 3420
  328. 3280 K4=C1-C6*(K1=21):FD$=MID$(FILE$,C10*D(K2,C2)-C9,C10):OPEN FD$+".DAT" FOR INPUT AS #C1
  329. 3290 ON ERROR GOTO 3090:FOR K3=C0 TO C19:INPUT #C1,W1:F(K3,C13)=W1:FOR K5=C0 TO K4:INPUT #C1,W1:D(K3,C5+K5)=W1:NEXT K5:NEXT K3
  330. 3300 ON ERROR GOTO 910:CLOSE #C1:L6=INT((K3+(K3>C6))/C2-(K3>C2)):D(K2,C3)=L6:D(K2,C4)=L7:IF K1=C20 OR K1=23 THEN 3320
  331. 3310 FOR L1=C0 TO K3-C1:FOR L2=C5 TO C5+K4 STEP C2:W1=D(L1,L2):W2=D(L1,L2+C1)/RD:GOSUB 80 :D(L1,L2)=W1:D(L1,L2+C1)=W2:NEXT L2:NEXT L1
  332. 3320 IF K3=C1 THEN FOR L1=C5 TO C5+K4:V(L7,C0)=D(C0,L1):L7=L7+C1:NEXT L1:GOTO 3420
  333. 3330 FOR L1=C5 TO C5+K4:FOR L2=C0 TO C2*L6-C1:F(L2,C14)=C0:NEXT L2:FOR L2=C0 TO L6:F(L2,L6+C1)=C0:NEXT L2
  334. 3340 FOR L2=C0 TO K3-C1:W1=C1:FOR L3=C0 TO C2*L6-C1:W1=W1*F(L2,C13):F(L3,C14)=F(L3,C14)+W1:NEXT L3
  335. 3350 F(C0,L6+C1)=F(C0,L6+C1)+D(L2,L1):W1=C1:FOR L3=C1 TO L6:W1=W1*F(L2,C13):F(L3,L6+C1)=F(L3,L6+C1)+W1*D(L2,L1):NEXT L3:NEXT L2
  336. 3360 F(C0,C0)=K3:FOR L2=C0 TO L6:FOR L3=C0 TO L6:IF L2+L3 THEN F(L2,L3)=F(L2+L3-C1,C14)
  337. 3370 NEXT L3:NEXT L2:FOR L2=C0 TO L6-C1:L4=L2+C1:L5=L2:FOR L3=L4 TO L6:IF ABS(F(L3,L2))>ABS(F(L5,L2)) THEN L5=L3
  338. 3380 NEXT L3:IF L5<>L2 THEN FOR L3=L2 TO L6+C1:W1=F(L2,L3):F(L2,L3)=F(L5,L3):F(L5,L3)=W1:NEXT L3
  339. 3390 FOR L3=L4 TO L6:W1=F(L3,L2)/F(L2,L2):FOR L5=L4 TO L6+C1:F(L3,L5)=F(L3,L5)-W1*F(L2,L5):NEXT L5:NEXT L3:NEXT L2
  340. 3400 V(L7,L6)=F(L6,L6+C1)/F(L6,L6):FOR L2=L6-C1 TO C0 STEP -C1:W2=C0:FOR L3=L2+C1 TO L6:W2=W2+F(L2,L3)*V(L7,L3):NEXT L3
  341. 3410 V(L7,L2)=(F(L2,L6+C1)-W2)/F(L2,L2):NEXT L2:L7=L7+C1:NEXT L1
  342. 3420 NEXT K2:MID$(FLAG$,C4)="NN"
  343. 3430 MID$(FLAG$,C1)="Y"
  344. 3440 MID$(FLAG$,C6)="N":GOTO 2340
  345. 3450 K6=0:K7=0:K8=0:L0=0:MID$(FLAG$,1)="NNN":FILE$=STRING$(CC," "):GOTO 2490
  346. 3460 MID$(FLAG$,C6)="N"
  347. 3470 PRINT" Will this be 2-port data (Y/N)?":K0=ASC(INPUT$(1)):ON -(K0=13 AND MID$(FLAG$,6)="Y") GOTO 3570:K2=0:K5=2-6*(K0=89 OR K0=121)
  348. 3480 GOSUB 1120:ON -(FC$="") GOTO 3500:ON ERROR GOTO 3820:OPEN FC$+".DAT" FOR INPUT AS #1:MID$(FLAG$,2)="NNSN"
  349. 3490 ON ERROR GOTO 3830:FOR K2=C0 TO C19:FOR K1=C0 TO K5:INPUT #C1,W1:F(K2,K1)=W1:NEXT K1:NEXT K2
  350. 3500 K1=C0:IF MID$(FLAG$,C6,C1)="N" THEN CLS:LOCATE C1,C11:PRINT "DATA FILE EDITOR"
  351. 3510 LOCATE C4,C1:MID$(FLAG$,C6)="Y":IF K5=C2 THEN PRINT " REAL               IMAG":PRINT" or ";CHR$(179);CHR$(226);CHR$(179);"             or /";CHR$(226);"          ":PRINT L$:PRINT L$:GOTO 3530
  352. 3520 PRINT " ";CHR$(179);"S11";CHR$(179);"              /S11 ":PRINT" ";CHR$(179);"S21";CHR$(179);"              /S21 ":PRINT" ";CHR$(179);"S12";CHR$(179);"              /S12":PRINT" ";CHR$(179);"S22";CHR$(179);"              /S22"
  353. 3530 LOCATE C13,C14:PRINT "EDITOR MENU":PRINT:PRINT"  1 -Insert data     6 -Start new file":PRINT"  2 -Modify data     7 -Plot data"
  354. 3540 PRINT"  3 -Delete data     > -Page forward":PRINT"  4 -List data file  < -Page backward":PRINT"  5 -Save data file  RET -Return"
  355. 3550 MID$(L$,C2)="LINE NUMBER":MID$(L$,C13,C3)=STR$(K1+C1):MID$(L$,C20)="FREQUENCY":IF K1<K2 THEN MID$(L$,30)=STR$(F(K1,C0))
  356. 3560 LOCATE C3,C1:PRINT L$:L$=STRING$(C39," ")
  357. 3570 FOR K3=C1 TO K5/C2:FOR K4=C0 TO C1:FD$=MID$(L$,C1,C11):IF K1<K2 THEN MID$(FD$,C2)=STR$(INT(CK*F(K1,C2*K3+K4-C1)+.5)/CK)
  358. 3580 LOCATE C3+K3,C7+18*K4:PRINT FD$:NEXT K4:NEXT K3
  359. 3590 CLOSE #C1:LOCATE C10,C1:PRINT L$:PRINT L$:PRINT L$:LOCATE C10,C1:K0=ASC(INPUT$(C1)):IF K0=49 AND K2<C20 THEN 3700
  360. 3600 ON (K0>49)*(K2>K1)*(K0-49) GOTO 3790,3840:ON (K0>51)*(K2>C0)*(K0-51) GOTO 3860,3800:ON (K0>53)*(53-K0) GOTO 3470,3960
  361. 3610 ON (K0>59)*(59-K0) GOTO 3670,3620,3650,3690
  362. 3620 IF K0<>13 THEN PRINT CHR$(7):GOTO 3590
  363. 3630 IF MID$(FLAG$,4,1)<>"S" THEN GOSUB 920:IF K0<>89 AND K0<>121 THEN 3590
  364. 3640 MID$(FLAG$,6)="N":GOTO 2540
  365. 3650 IF K1>=K2 OR K1=C19 THEN K1=-C1
  366. 3660 K1=K1+C1:GOTO 3550
  367. 3670 IF K1=C0 THEN K1=K2-(K2=C0)
  368. 3680 K1=K1-C1:GOTO 3550
  369. 3690 GOSUB 930:GOTO 3500
  370. 3700 IF K1<K2 THEN LOCATE C3,30:PRINT "          ":FOR K3=C1 TO K5/C2:FOR K4=C0 TO C1:LOCATE C3+K3,C7+C19*K4:PRINT "          ":NEXT K4:NEXT K3
  371. 3710 LOCATE 3,29:INPUT FC$:IF FC$="" THEN 3550
  372. 3720 IF K1<K2 THEN FOR K3=K2 TO K1+1 STEP -1:FOR K4=0 TO K5:F(K3,K4)=F(K3-1,K4):NEXT K4:NEXT K3
  373. 3730 K2=K2+1
  374. 3740 F(K1,C0)=ABS(VAL(FC$))
  375. 3750 MID$(FLAG$,2)="NNNN":FOR K3=1 TO K5/2:FOR K4=0 TO 1
  376. 3760 LOCATE 3+K3,7+18*K4:INPUT FC$:IF FC$="" AND K0=49 THEN 3840
  377. 3770 IF FC$<>"" THEN F(K1,2*K3+K4-1)=VAL(FC$)
  378. 3780 NEXT K4:NEXT K3:GOTO 3550
  379. 3790 LOCATE 3,29:INPUT FC$:ON 1-(FC$="") GOTO 3740,3750
  380. 3800 GOSUB 1120:ON -(FC$="") GOTO 3590:FD$=FC$+".DAT":GOSUB 1130:ON -(K0<>89) GOTO 3590:ON ERROR GOTO 3820
  381. 3810 FOR K3=0 TO K2-1:FOR K4=0 TO K5:PRINT #1,F(K3,K4):NEXT K4:NEXT K3:MID$(FLAG$,4)="S":GOTO 3590
  382. 3820 GOSUB 1050:GOTO 3500
  383. 3830 RESUME 3500
  384. 3840 IF K1<K2-C1 THEN FOR K3=K1 TO K2-C2:FOR K4=C0 TO K5:F(K3,K4)=F(K3+C1,K4):NEXT K4:NEXT K3
  385. 3850 K2=K2-C1:GOTO 3550
  386. 3860 IF K5=C2 THEN 3940
  387. 3870 CLS:PRINT "  FREQ        S11            S22":PRINT " in GHz   MAG    ANGLE   MAG    ANGLE":FOR K1=C0 TO K2-C1
  388. 3880 GOSUB 1280:FOR K4=C1 TO C7 STEP C6:K0=(15*K4+39)/C6:MID$(L$,K0,C7)=STR$(INT(CK*F(K1,K4)+.5)/CK)
  389. 3890 MID$(L$,K0+C8,C7)=STR$(INT(CC*F(K1,K4+C1)+.5)/CC):NEXT K4:PRINT L$:L$=STRING$(C39," "):NEXT K1:GOSUB 970
  390. 3900 CLS:PRINT" FREQ       S21             S12":PRINT" GHz    MAG    ANGLE    MAG    ANGLE":FOR K1=C0 TO K2-C1
  391. 3910 GOSUB 1280:FOR K4=C3 TO C5 STEP C2:K0=(15*K4-27)/C2:MID$(L$,K0+C8,C7)=STR$(INT(F(K1,K4+C1)*CK+.5)/CK)
  392. 3920 MID$(L$,K0,C7)=STR$(INT(F(K1,K4)*CC+.5)/CC-(F(K1,K4)<.01)):IF F(K1,K4)<.01 THEN MID$(L$,K0+C1,C1)="0"
  393. 3930 NEXT K4:PRINT L$:L$=STRING$(C39," "):NEXT K1:GOSUB 970:GOTO 3500
  394. 3940 CLS:PRINT"  FREQ    REAL  IMAGINARY":PRINT" in GHz  or";CHR$(179);CHR$(226);CHR$(179);"    or /";CHR$(226):FOR K1=C0 TO K2-C1:MID$(L$,C1,C7)=STR$(F(K1,C0))
  395. 3950 FOR K4=C1 TO C2:K0=C8*K4+C1:MID$(L$,K0,C7)=STR$(INT(CK*F(K1,K4)+.5)/CK):NEXT K4:PRINT L$:L$=STRING$(C39," "):NEXT K1:GOSUB 970:GOTO 3500
  396. 3960 ON -(K2<C2) GOTO 3620:K9=K2-C1:FOR K1=C0 TO K9:FOR K4=C1 TO K5/C2:W1=F(K1,K4*C2-C1):W2=F(K1,K4*C2)/RD:GOSUB 80
  397. 3970 F(K1,K4*C2-C1)=W1:F(K1,K4*C2)=W2:NEXT K4:NEXT K1:GOSUB 1670:IF K5=C8 THEN GOSUB 2140
  398. 3980 FOR K1=C0 TO K9:FOR K4=C1 TO K5/C2:W1=F(K1,K4*C2-C1):W2=F(K1,K4*C2):GOSUB 90
  399. 3990 F(K1,K4*C2-C1)=W1:F(K1,K4*C2)=W2*RD:NEXT K4:NEXT K1:MID$(FLAG$,C6,C1)="N":GOTO 3500
  400. 4000 CLS:LOCATE C1,C14:PRINT"OPTIMIZATION":PRINT:PRINT"    ELEMENT    PARAMETER      LOCAL"
  401. 4010 PRINT"   TYPE  NUM  NUM   VALUE    GRADIENT":LOCATE 17,C11:PRINT"OPTIMIZATION MENU":PRINT:PRINT" 1 -Add an element     5 -Optimization"
  402. 4020 PRINT" 2 -Reset an element   6 -Sensitivity":PRINT" 3 -Delete an element  7 -Objectives"
  403. 4030 PRINT" 4 -List elements      RET -Return"
  404. 4040 ON ERROR GOTO 910:LOCATE C6,C1:IF L0<C0 THEN 4070
  405. 4050 FOR K1=C0 TO L0:MID$(L$,C1,C2)=STR$(K1+1):MID$(L$,C5,C3)=MID$(E$,C3*D(O(K1,C0),C0)+C1):MID$(L$,C10,C3)=STR$(O(K1,C1)):MID$(L$,15,C2)=STR$(O(K1,C2)-C1)
  406. 4060 O(K1,C3)=D(O(K1,C0),O(K1,C2)):MID$(L$,C20,C9)=STR$(INT(CK*O(K1,C3)+.5)/CK):PRINT L$:L$=STRING$(C39," "):NEXT K1
  407. 4070 PRINT L$:PRINT L$:PRINT L$
  408. 4080 LOCATE C14,C1:PRINT L$:PRINT L$:LOCATE C14,C1:K0=ASC(INPUT$(C1)):IF K0=49 AND L0<5 THEN ON C1-(MID$(FLAG$,C1,C1)="N") GOTO 4110,1190
  409. 4090 ON -(K0=55) GOTO 4480:ON (L0>=0)*(K0>49)*(K0-49) GOTO 4240,4210,4260,4470,4470:IF K0=C13 THEN 2340
  410. 4100 PRINT CHR$(C7):GOTO 4080
  411. 4110 LOCATE L0+C7,C1:PRINT L$:LOCATE L0+C7,C1:PRINT C2+L0:LOCATE L0+C7,C9:INPUT FC$:ON -(FC$="") GOTO 4040:K2=VAL(FC$):K3=K2:GOSUB 130:IF K3<K8-C1 THEN 4140
  412. 4120 LOCATE C14,C0:PRINT "THAT ELEMENT DOESN'T EXIST.";CHR$(C7)
  413. 4130 GOSUB 1100:GOTO 4040
  414. 4140 K0=D(K3,C0):C$=MID$(E$,C3*K0+C1,C3):LOCATE L0+C7,C5:PRINT C$
  415. 4150 IF (K0>C1 AND K0<C8) OR (K0>C10 AND K0<C20) OR (K0>23 AND K0<35) THEN 4180
  416. 4160 LOCATE C14,C1:PRINT "YOU CAN'T OPTIMIZE ";C$;" ELEMENTS.";CHR$(C7):GOTO 4130
  417. 4170 LOCATE C14,C2:PRINT C$;" ELEMENTS DON'T HAVE":PRINT " A PARAMETER #";CHR$(C7);K4:GOTO 4130
  418. 4180 LOCATE L0+C7,C14:INPUT FC$:ON -(FC$="") GOTO 4040:K4=VAL(FC$):IF K4<C1 OR (((K0>C7 AND K0<17) OR (K0>26 AND K0<33)) AND K4>C2) THEN 4170
  419. 4190 IF ((K0<C8 OR K0>32) AND K4>C3) OR ((K0>16 AND K0<27) AND K4>C1) THEN 4170
  420. 4200 L0=L0+C1:O(L0,C0)=K3:O(L0,C1)=K2:O(L0,C2)=K4+C1:O(L0,C3)=D(K3,K4):GOTO 4040
  421. 4210 PRINT" Select element to be deleted (1";-L0-C1;"):";:K1=VAL(INPUT$(1)):IF K1<1 OR K1>L0+1 THEN 4080
  422. 4220 IF K1<=L0 THEN FOR K2=K1 TO L0:FOR K3=0 TO 3:O(K2-1,K3)=O(K2,K3):NEXT K3:NEXT K2
  423. 4230 L0=L0-1:GOTO 4040
  424. 4240 PRINT " Select element to be reset (1";-L0-1;"):";:K1=VAL(INPUT$(1))-1:IF K1<0 OR K1>L0 THEN 4080
  425. 4250 PRINT K1+1:LOCATE K1+6,19:INPUT FC$:ON -(FC$="") GOTO 4040:MID$(FLAG$,2)="NN":W1=VAL(FC$):O(K1,3)=ABS(W1):D(O(K1,0),O(K1,2))=ABS(W1):GOTO 4040
  426. 4260 K1=L0+6:GOSUB 1010:GOTO 4080
  427. 4270 DEL=4:PRINT " Listings of results (Y/N)? ";:C$=INPUT$(1):PRINT C$:IF C$=CHR$(13) THEN 4080
  428. 4280 PRINT" Number of random searches (0-9):";:FC$=INPUT$(1):ON -(FC$=CHR$(13)) GOTO 4080:L6=VAL(FC$):PRINT L6:ON ERROR GOTO 910
  429. 4290 IF DEL=CK THEN PRINT "    PERFORMING SENSITIVITY ANALYSIS"
  430. 4300 FOR L9=0 TO L0:O(L9,5)=O(L9,3)*(1-(L8>0)*(RND(1)-.5)/5):NEXT L9:L8=L8-L0-2:L6=-(L8>0)-L6
  431. 4310 GOSUB 240:IF W1>=E1 AND L8>0 AND L6>=0 THEN ON C1-(L6>0) GOTO 4390,4300
  432. 4320 LOCATE 6,1:FOR L9=0 TO L0:MID$(L$,1,2)=STR$(L9+1):MID$(L$,5,3)=MID$(E$,3*D(O(L9,0),0)+1):MID$(L$,10,3)=STR$(O(L9,1))
  433. 4330 MID$(L$,15,2)=STR$(O(L9,2)-1):MID$(L$,20,9)=STR$(INT(1000*O(L9,5)+.5)/1000):MID$(L$,30,9)=STR$(INT(1000*O(L9,6)*W1/O(L9,5)+.5)/1000)
  434. 4340 PRINT L$:L$=STRING$(39," "):NEXT L9:PRINT:IF L8>0 THEN PRINT " ITERATION #";L8;" ";
  435. 4350 PRINT "  ERROR =";INT(10*W1+.5)/10;"    ":IF C$="Y" THEN K1=L0+6:GOSUB 1010:ON ERROR GOTO 910
  436. 4360 L6=ABS(L6):IF W1>C0 THEN IF E1/(E1-W1)<CC AND DEL<CC THEN E1=W1:GOTO 4430
  437. 4370 L8=(Q$="Q"):IF W1>E0 THEN FOR L9=0 TO L0:O(L9,5)=O(L9,3):NEXT L9:GOSUB 320
  438. 4380 ON C1-L8 GOTO 4080,4040
  439. 4390 W2=0:FOR K1=0 TO L0:W2=W2+O(K1,4)*O(K1,4):O(K1,5)=O(K1,3):NEXT K1:W2=SQR(W2)*DEL
  440. 4400 W3=0:W4=0:FOR K1=0 TO L0:W5=0:FOR K2=0 TO L0:F(K2,K1+1)=(K1=K2)*O(K1,4)-O(K1,4)*O(K2,4)/W2
  441. 4410 W5=W5+F(K2,K1+1)*O(K2,3):NEXT K2:W3=W3+O(K1,4)*W5:W4=W4+O(K1,6)*W5:NEXT K1:W5=3*(E0-W1)/W2+W3+W4
  442. 4420 W6=SQR(W5*W5-W3*W4):W2=W2/DEL:DEL=DEL/(1-(W4+W6-W5)/(W4-W3+2*W6)):W2=W2*DEL:GOTO 4450
  443. 4430 W2=0:FOR K1=0 TO L0:W3=O(K1,6):W2=W2+W3*W3:IF L8=0 OR E1<=E0 THEN O(K1,3)=O(K1,5):O(K1,4)=W3:E0=E1
  444. 4440 NEXT K1:W2=DEL*SQR(W2):FOR K1=0 TO L0:FOR K2=0 TO L0:F(K2,K1+1)=(K1=K2)*O(K1,6)-O(K1,6)*O(K2,6)/W2:NEXT K2:NEXT K1
  445. 4450 FOR K1=0 TO L0:F(L0+1,K1+1)=O(K1,5):FOR K2=0 TO L0:F(K2,K1+1)=-(K1=K2)+F(K2,K1+1)/W2:NEXT K2:NEXT K1
  446. 4460 FOR L9=0 TO L0:W1=0:FOR K2=0 TO L0:W1=W1+F(K2,L9+1)*F(L0+1,K2+1):NEXT K2:O(L9,5)=W1:NEXT L9:GOTO 4310
  447. 4470 C$="N":L8=0:DEL=CK:E1=C0:ON (MID$(FLAG$,4,1)="Y")*(52-K0) GOTO 4270,4290:PRINT " CAN'T, NO OBJECTIVES.";CHR$(7)
  448. 4480 IF MID$(FLAG$,4,1)="N" THEN K9=-1
  449. 4490 GOSUB 1120:ON -(FC$="") GOTO 4510:ON ERROR GOTO 4810:OPEN FC$+".OBJ" FOR INPUT AS #1:MID$(FLAG$,2)="NNNN"
  450. 4500 ON ERROR GOTO 4820:FOR K9=-1 TO 18:INPUT #1,W1:F(K9+1,0)=W1:FOR K2=9 TO 14:INPUT #1,W1:F(K9+1,K2)=W1:NEXT K2:NEXT K9
  451. 4510 K1=0:IF MID$(FLAG$,6,1)="Y" THEN 4570
  452. 4520 CLS:LOCATE 2,12:PRINT"OBJECTIVES EDITOR":PRINT:PRINT
  453. 4530 PRINT CHR$(179);"S11";CHR$(179);" dB           WEIGHTING":PRINT CHR$(179);"S22";CHR$(179);" dB           WEIGHTING":PRINT CHR$(179);"S21";CHR$(179);" dB           WEIGHTING"
  454. 4540 LOCATE 13,15:PRINT"EDITOR MENU":PRINT:PRINT" 1 -Add an objective  6 -Start new file"
  455. 4550 PRINT " 2 -Modify objective  > -Page forward":PRINT " 3 -Delete objective  < -Page backward"
  456. 4560 PRINT " 4 -List objectives   RET -Return":PRINT " 5 -Save objectives":MID$(FLAG$,6)="Y"
  457. 4570 MID$(L$,2,11)="LINE NUMBER":MID$(L$,13,3)=STR$(1+K1):MID$(L$,20,9)="FREQUENCY":IF K1<=K9 THEN MID$(L$,32)=STR$(F(K1,0))
  458. 4580 LOCATE 4,1:PRINT L$:L$=STRING$(39," "):FOR K3=1 TO 3:FOR K4=0 TO 1:FC$=MID$(L$,1,8):IF K1<=K9 THEN MID$(FC$,2)=STR$(F(K1,2*K3+K4+7))
  459. 4590 LOCATE 4+K3,10+21*K4:PRINT FC$:NEXT K4:NEXT K3
  460. 4600 ON ERROR GOTO 4630:CLOSE #1:LOCATE 10,1:PRINT L$:PRINT L$:LOCATE 10,1:K0=ASC(INPUT$(1)):IF K0=49 AND K9<19 THEN 4690
  461. 4610 ON (K9>=K1)*(K0>49)*(K0-49) GOTO 4780,4830:ON (K9>-1)*(K0>51)*(K0-51) GOTO 4850,4790:IF K0=54 THEN K9=-1:GOTO 4490
  462. 4620 ON (K0>59)*(59-K0) GOTO 4660,4630,4640,4680:IF K0=13 THEN MID$(FLAG$,4)=CHR$(89+11*(K9<0)):MID$(FLAG$,5)=MID$(FLAG$,4,1):MID$(FLAG$,6)="N":GOTO 4000
  463. 4630 PRINT CHR$(7):GOTO 4600
  464. 4640 IF K1>K9 OR K1=19 THEN K1=-1
  465. 4650 K1=K1+1:GOTO 4570
  466. 4660 IF K1=0 THEN K1=K9+1-(K9=-1)
  467. 4670 K1=K1-1:GOTO 4570
  468. 4680 GOSUB 930:GOTO 4510
  469. 4690 LOCATE 4,31:PRINT "       ":FOR K3=1 TO 3:FOR K4=0 TO 1:LOCATE 4+K3,10+21*K4:PRINT "       ":NEXT K4:NEXT K3
  470. 4700 LOCATE 4,31:INPUT FC$:IF FC$="" THEN 4570
  471. 4710 IF K1<=K9 THEN FOR K3=K9 TO K1 STEP -1:FOR K4=0 TO 14:F(K3+1,K4)=F(K3,K4):NEXT K4:NEXT K3
  472. 4720 K9=K9+1
  473. 4730 MID$(FLAG$,2)="NNNNY":F(K1,0)=ABS(VAL(FC$))
  474. 4740 FOR K3=1 TO 3:FOR K4=0 TO 1:LOCATE 4+K3,10+21*K4:INPUT FC$:IF FC$="" AND K0=49 THEN 4830
  475. 4750 IF FC$<>"" THEN F(K1,2*K3+K4+7)=VAL(FC$)
  476. 4760 NEXT K4:NEXT K3
  477. 4770 FOR K3=9 TO 12:F(K1,K3)=(1+2*(K3/2<>INT(K3/2)))*ABS(F(K1,K3)):NEXT K3:GOTO 4570
  478. 4780 LOCATE 4,31:INPUT FC$:ON 1-(FC$="") GOTO 4730,4740
  479. 4790 GOSUB 1120:ON -(FC$="") GOTO 4600:FD$=FC$+".OBJ":GOSUB 1130:ON -(K0<>89) GOTO 4600:ON ERROR GOTO 4810
  480. 4800 FOR K3=0 TO K9:PRINT #1,F(K3,0):FOR K4=9 TO 14:PRINT #1,F(K3,K4):NEXT K4:NEXT K3:GOTO 4600
  481. 4810 GOSUB 1050:GOTO 4510
  482. 4820 RESUME 4510
  483. 4830 IF K1<K9 THEN FOR K3=K1 TO K9-1:FOR K4=0 TO 14:F(K3,K4)=F(K3+1,K4):NEXT K4:NEXT K3
  484. 4840 MID$(FLAG$,2)="NNNNY":K9=K9-1:GOTO 4570
  485. 4850 CLS:PRINT "    FREQ     S11       S22       S21":PRINT"   in GHz  dB   WGT  dB   WGT  dB   WGT":FOR K1=0 TO K9:MID$(L$,1,3)=STR$(K1+1)
  486. 4860 MID$(L$,4,6)=STR$(F(K1,0)):FOR K3=9 TO 14:K4=(K3-9)*5+11:MID$(L$,K4,4)=STR$(F(K1,K3)):NEXT K3
  487. 4870 PRINT L$:L$=STRING$(39," "):NEXT K1:GOSUB 970:GOTO 4510
  488.