1420 CLS:PRINT " FREQ S11 S21 S12 S22":PRINT " in GHz in dB in dB in dB in dB"
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
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
3220 MID$(FLAG$,C6)="E":GOTO 3110
3230 K3=D(K2,C2):GOSUB 130:D(K2,C13)=K3:IF K3>=K2 THEN 3220
3240 IF K1>35 AND K1<39 THEN K3=D(K2,C3):GOSUB 130:D(K2,C14)=K3:IF K3>=K2 THEN 3220
3250 NEXT K2:IF K7=C0 OR MID$(FLAG$,C1,C1)<>"F" THEN 3430
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
3270 NEXT K2:FOR K2=C0 TO K8-C1:K1=D(K2,C0):IF K1<C20 OR K1>23 THEN 3420
3280 K4=C1-C6*(K1=21):FD$=MID$(FILE$,C10*D(K2,C2)-C9,C10):OPEN FD$+".DAT" FOR INPUT AS #C1
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
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
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
3320 IF K3=C1 THEN FOR L1=C5 TO C5+K4:V(L7,C0)=D(C0,L1):L7=L7+C1:NEXT L1:GOTO 3420
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
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
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
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)
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
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
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
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
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)
3480 GOSUB 1120:ON -(FC$="") GOTO 3500:ON ERROR GOTO 3820:OPEN FC$+".DAT" FOR INPUT AS #1:MID$(FLAG$,2)="NNSN"
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
3500 K1=C0:IF MID$(FLAG$,C6,C1)="N" THEN CLS:LOCATE C1,C11:PRINT "DATA FILE EDITOR"
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
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)
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"
3930 NEXT K4:PRINT L$:L$=STRING$(C39," "):NEXT K1:GOSUB 970:GOTO 3500
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))
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
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
3970 F(K1,K4*C2-C1)=W1:F(K1,K4*C2)=W2:NEXT K4:NEXT K1:GOSUB 1670:IF K5=C8 THEN GOSUB 2140
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
4000 CLS:LOCATE C1,C14:PRINT"OPTIMIZATION":PRINT:PRINT" ELEMENT PARAMETER LOCAL"
4010 PRINT" TYPE NUM NUM VALUE GRADIENT":LOCATE 17,C11:PRINT"OPTIMIZATION MENU":PRINT:PRINT" 1 -Add an element 5 -Optimization"
4020 PRINT" 2 -Reset an element 6 -Sensitivity":PRINT" 3 -Delete an element 7 -Objectives"
4030 PRINT" 4 -List elements RET -Return"
4040 ON ERROR GOTO 910:LOCATE C6,C1:IF L0<C0 THEN 4070
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)
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
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
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
4630 PRINT CHR$(7):GOTO 4600
4640 IF K1>K9 OR K1=19 THEN K1=-1
4650 K1=K1+1:GOTO 4570
4660 IF K1=0 THEN K1=K9+1-(K9=-1)
4670 K1=K1-1:GOTO 4570
4680 GOSUB 930:GOTO 4510
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
4700 LOCATE 4,31:INPUT FC$:IF FC$="" THEN 4570
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
4720 K9=K9+1
4730 MID$(FLAG$,2)="NNNNY":F(K1,0)=ABS(VAL(FC$))
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
4750 IF FC$<>"" THEN F(K1,2*K3+K4+7)=VAL(FC$)
4760 NEXT K4:NEXT K3
4770 FOR K3=9 TO 12:F(K1,K3)=(1+2*(K3/2<>INT(K3/2)))*ABS(F(K1,K3)):NEXT K3:GOTO 4570