📄 pats.bas
字号:
DECLARE SUB GetFBR (CenAgl&, FBRAglAre%, FBR!)
DECLARE SUB CALGAIN (Gain!)
DECLARE SUB PCIRCLE (X!, Y!, R!)
DECLARE SUB PPOLDIS (CenAgl&, AmpAre%)
DECLARE SUB WrtTxt (TXT$)
CONST DCL = &H14
CONST SPE = &H18
CONST SPD = &H19
CONST PPU = &H15
CONST EGET = &H8
CONST GTL = &H1
CONST PPC = &H5
CONST SDC = &H4
CONST TCT = &H9
CONST MLA = &H20
CONST MTA = &H40
CONST MSA = &H60
CONST PPE = &H60
CONST PPD = &H60
CONST UNL = &H3F
CONST LLOK = &H11
CONST iepon = &H0 '
CONST crst = &H2 ' 芯片复位 */
CONST rrfd = &H3 ' 释放RFD */
CONST trig = &H4 ' 触发 */
CONST rtl = &H5 ' 返回至本地消息产生 */
CONST seoi = &H6 ' 发送 EOI 消息 */
CONST nvld = &H7 ' 非有效(接收OSA),释放DAC封锁 */
CONST vld = &HF ' 有效(MSA 接收,CPT,DEC,DET),释放DAC 闭锁 */
CONST sppf0 = &H1 ' 复位并行查询标志 */
CONST sppf1 = &H9 ' 置位并行查询标志 */
CONST gts = &H10 ' 进入准备 */
CONST tca = &H11 ' 异步取控 */
CONST tcs = &H12 ' 同步取控 */
CONST tcse = &H1A ' 同步取控结束 */
CONST ltn = &H13 ' 本地听取 */
CONST ltnc = &H1B ' 连续方式听 */
CONST lun = &H1C ' 本地不听 */
CONST epp = &H1D ' 执行并行查询 */
CONST sifc0 = &H16 ' 复位 IFC */
CONST sifc1 = &H1E ' 置位 IFC */
CONST sren0 = &H17 ' 复位 REN */
CONST sren1 = &H1F ' 置位 REN */
CONST dsc = &H14 ' 系统控制抑制 */
' UPD7210 写寄存器组 */
CONST BytOut = &H310
CONST INTMASK1 = &H311
CONST INTMASK2 = &H312
CONST SrlSplMod = &H313
CONST AddrMod = &H314
CONST AuxCmd = &H315
CONST AddrSpf = &H316
CONST StrEnd = &H317
' UPD7210 读寄存器组 */
CONST BytInp = &H310
CONST IntSta1 = &H311
CONST IntSta2 = &H312
CONST SrlSpl = &H313
CONST AddrSta = &H314
CONST CmdPas = &H315
CONST AddrRtn0 = &H316
CONST AddrRtn1 = &H317
CONST SysCon = &H318
CONST NULL = &H1F
DIM IntMap1 AS INTEGER
DIM IntMap2 AS INTEGER
DECLARE SUB INIT (SysAddr%)
DECLARE SUB REMOTE (ObjAddr%)
DECLARE SUB RETLCL (ObjAddr%)
DECLARE SUB SEND (ObjAddr%, TranChrStr$)
DECLARE SUB DELAY (DlyTim!)
DECLARE FUNCTION CmdOut% (CmdByt%)
DECLARE SUB GetChrFrmGPIB (GetChr$)
DECLARE SUB SentMsgToGPIB (TranChr$)
DECLARE SUB TIMEOUT (TimOvf!)
DIM SysAddr AS INTEGER
DIM SHARED TIMEOVER
DECLARE SUB PBOX (LftX!, BtmY!, RgtX!, TopY!)
DECLARE SUB PLINE (FstX!, FstY!, SndX!, SndY!)
DECLARE SUB PWINDOW (W1!, w2!, W3!, W4!)
DECLARE SUB ChangePen (PN%)
DECLARE SUB PVW (VW1 AS ANY)
DECLARE SUB PVIEW (V1!, V2!, V3!, V4!)
DECLARE SUB PDRAW (X!, Y!)
DECLARE FUNCTION XE$ (X!)
DECLARE FUNCTION YE$ (Y!)
DECLARE SUB PMOVE (X!, Y!)
TYPE VW
V1 AS SINGLE
V2 AS SINGLE
V3 AS SINGLE
V4 AS SINGLE
W1 AS SINGLE
w2 AS SINGLE
W3 AS SINGLE
W4 AS SINGLE
A8 AS SINGLE
A9 AS SINGLE
B8 AS SINGLE
B9 AS SINGLE
END TYPE
CONST PltAddr = 5
DIM CrntVW AS VW
TYPE PntParOpt
InsMdl AS INTEGER
Dte AS INTEGER
Tim AS INTEGER
FilNam AS INTEGER
Gain AS INTEGER
HlfPwrWid AS INTEGER
SidLobLvl AS INTEGER
MaxLvl AS INTEGER
Freq AS INTEGER
Pst AS STRING * 2
FBR AS INTEGER
END TYPE
TYPE Grp
DisMde AS INTEGER
DisArea AS INTEGER
LvlSpn AS INTEGER
CenAglOpt AS INTEGER
FBRAglAre AS INTEGER
XdBwidth AS SINGLE
END TYPE
TYPE FilType
Drv AS STRING * 3
Path AS STRING * 20
FilNam AS STRING * 8
END TYPE
DECLARE FUNCTION LkfForMaxLvl% (FstAgl&, SndAgl&)
DECLARE FUNCTION XIELU! (CrngAgl&, NextAgl&, LD%)
DECLARE SUB LokForSLL (Agl&, LLLA&, LL!, RLLA&, RL!)
DECLARE SUB SaveCfgFil (P1 AS ANY, P2 AS ANY, P3 AS ANY)
DECLARE SUB ReadCfgFil (P1 AS ANY, P2 AS ANY, P3 AS ANY)
DECLARE SUB ProOpt (P1 AS PntParOpt, P2 AS Grp, P3 AS FilType)
DECLARE FUNCTION LOG10! (BYVAL Var!)
DECLARE FUNCTION EXP10! (BYVAL Var!)
DECLARE FUNCTION IncAgl& (BYVAL Agl&)
DECLARE FUNCTION DecAgl& (BYVAL Agl&)
DECLARE SUB REDRAW (CenAgl AS ANY, AglAre AS ANY, MaxLvl AS ANY, MinLvl AS ANY, LblLvl AS ANY)
DECLARE SUB PREDRAW (CenAgl AS ANY, AglAre AS ANY, MaxLvl AS ANY, MinLvl AS ANY, LblLvl AS ANY)
DECLARE SUB ReadFil (P3 AS ANY)
DECLARE SUB HlfPwrWid (HPW!, PL)
DECLARE SUB CALDIRCOE (D!)
DECLARE SUB POLDIS (Agl&, Area%)
CONST NoLvl = 32767
DIM ParOpt AS PntParOpt
DIM GrpDis AS Grp
DIM GetFil AS FilType
DIM Lvl%(18432)
DIM PLTPAR(12) AS STRING * 26
DIM Xscl(9) AS STRING * 4
INIT 0
Xscl(0) = "20.0"
Xscl(1) = "10.0"
Xscl(2) = "6.67"
Xscl(3) = " 5.0"
Xscl(4) = " 4.0"
Xscl(5) = " 2.5"
Xscl(6) = " 2.0"
Xscl(7) = " 1.0"
Xscl(8) = " 0.5"
ReadCfgFil ParOpt, GrpDis, GetFil
GetFil.FilNam = COMMAND$
MainLoop:
ProOpt ParOpt, GrpDis, GetFil
IF GetFil.FilNam <> MapFil$ THEN
ReadFil GetFil
HPWT% = 0
GainT% = 0
SLLT% = 0
FBRT% = 0
IVDAGL& = MaxAgl& + 1
END IF
IF FE% THEN
GetFil.FilNam = ""
GOTO MainLoop
END IF
MapFil$ = GetFil.FilNam
'
'Select angle display area
'
SELECT CASE GrpDis.DisArea
CASE 1 TO 5
AglDisArea& = (MaxAgl& + 1) / GrpDis.DisArea
CASE 6
AglDisArea& = (MaxAgl& + 1) / 8
CASE 7
AglDisArea& = (MaxAgl& + 1) / 10
CASE 8
AglDisArea& = (MaxAgl& + 1) / 20
CASE 9
AglDisArea& = (MaxAgl& + 1) / 40
CASE ELSE
GrpDis.DisArea = 1
AglDisArea& = (MaxAgl& + 1) / GrpDis.DisArea
END SELECT
'
'Select center angle
'
SELECT CASE GrpDis.CenAglOpt
CASE 0
IF SpfyAgl& > 0 THEN
CenAgl& = SpfyAgl&
ELSE
CenAgl& = MaxLvlAgl&
END IF
CASE 1
CenAgl& = MaxLvlAgl&
CASE 2
IF NOT (HPWT%) THEN
HlfPwrWid HPW, 3
IF CT% THEN
HPWT% = -1
END IF
END IF
IF HPWT% AND HPW <> IVDAGL& THEN
CenAgl& = CenAglOf3dB&
ELSE
CenAgl& = MaxLvlAgl&
END IF
CASE ELSE
BEEP
END SELECT
'
'
'
IF GrpDis.LvlSpn = 0 THEN
LvlSpn% = FIX(ABS((MaxLvl% - MinLvl%) / 1000) + .9) * 10
IF LvlSpn% < 10 THEN LvlSpn% = 10
ELSE
LvlSpn% = GrpDis.LvlSpn
END IF
IF GrpDis.DisMde% THEN
LowLvl% = MaxLvl% - LvlSpn% * 100
CALL REDRAW(CenAgl&, AglDisArea&, MaxLvl%, LowLvl%, GrpDis.XdBwidth * 100)
ELSE
POLDIS CenAgl&, LvlSpn%
END IF
IF GrpDis.DisMde THEN
Crntcol% = 2
IF ParOpt.Pst = "LU" THEN Crntcol% = 65
LOCATE 2, Crntcol%: PRINT USING "X:##.#
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -