DECLARE SUB LineIT (P1!, P2!) DECLARE SUB EL2alt () DECLARE SUB PIRNT (a$) DECLARE SUB DoTel (a$, PreKey$) DECLARE SUB HangUp () DECLARE SUB LoadLine (a$, mine, NewF, abt!) DECLARE SUB GetTel () DECLARE SUB Resource (sw!) DECLARE SUB PRa (a$, p$) DECLARE SUB PR2N (a!, p$) DECLARE SUB NewScrn (d$, c!, d!) DECLARE SUB ReadHdr () DECLARE SUB GridCap (mmx) DECLARE SUB JustONE (drw!, Tmp$) DECLARE SUB Cprint (a$, c!, i) DECLARE SUB Xmscat () DECLARE SUB Counties (NML!) DECLARE SUB RangeRings (r!, rng) DECLARE SUB Bline (c!) DECLARE SUB NTSsend () DECLARE SUB SavPos (Pos$, TY$) DECLARE SUB MapMenu (Drings!, Fill!, new!, MapA!, LockM!, MyID$, Ovrly!, RingSel!, b$, GotoN!) DECLARE SUB FPrint () DECLARE SUB HSPtest () DECLARE SUB PL2 (a$, c!) DECLARE SUB IncPrd (Decay!, F!, M!, k!, Nxt!) DECLARE SUB UnCmprs (a$, x%, y%) DECLARE SUB Gamebox () DECLARE SUB D3andCUR () DECLARE SUB HkMap () DECLARE SUB AddPos (LL$, Pos$, a!) DECLARE SUB OverlayPos () DECLARE SUB PL25 (a$, c!) DECLARE SUB TraTr () 'DECLARE SUB DoSATS (pt!, a$) DECLARE SUB HkStep (NxP!) DECLARE SUB MouseB (bx%, cx%, DX%, ZOOM!, a$, LL$, CYT!) DECLARE SUB PL118 (z$, c!) DECLARE SUB PR23 (a$, b$, p$, N) DECLARE SUB Noise (a!) DECLARE SUB HSPsw (a!) DECLARE SUB WxMenu (a, N) DECLARE SUB GetBrng (a$, Pos$, BH$) DECLARE SUB RightCall (Call$) DECLARE SUB DigiDo (a) DECLARE SUB NMEAtoHST (a$) DECLARE SUB Xmit (a, a$) DECLARE SUB OutGGA (Pp!, a) DECLARE SUB PL1 (z$, c!) DECLARE SUB PL24 (a$, c!) DECLARE SUB ReadPage (Lin) DECLARE SUB ClrScn () DECLARE SUB Do3D (x!, y!) DECLARE SUB FileRead (a) DECLARE SUB Telm (F) DECLARE SUB InitVGA (a$) DECLARE SUB Clearbuf () DECLARE SUB DoNMEA (a$, k!, Call$, Pos$) DECLARE SUB DoRcvPkt (a$, Pos$, EndB) DECLARE SUB WXalarms () DECLARE SUB DXall () DECLARE SUB FadePlot (MyID$) DECLARE SUB FadeKey (MyID$, LL$, Pos$) DECLARE SUB ChannelCap (CntrT!, Pcntr!) DECLARE SUB AddBL (a$) DECLARE SUB ParseA (a$, TY$, LA!, LO!, sym$) DECLARE SUB Validsub (Val$) DECLARE SUB FindCall (a!, b!) DECLARE SUB InitMore () DECLARE SUB Digipath (a$) DECLARE SUB DFrings (a) DECLARE SUB PosChange (p$, a$) DECLARE SUB PwrAnt (a, Pos$) DECLARE SUB CommTalk (Astr$) DECLARE SUB CommTNC (a$, Astr$, c$) DECLARE SUB ControlsMEN (a$) DECLARE SUB Bltns () DECLARE SUB CkRS (sym$) DECLARE SUB Drawunit (r, p, Tmp$, cc, Live, O) DECLARE SUB SendObject (i!) DECLARE SUB HelpMenu () DECLARE SUB DShell (a$) DECLARE SUB CmptCENTER (LA, LO, rng) DECLARE SUB ShowSetup () DECLARE SUB PR (a$, T$) DECLARE SUB SETUP (a$, Oprd) DECLARE SUB SaveFile () DECLARE SUB SendPos () DECLARE SUB CkFilter (Pos$, LA, LO, a!) DECLARE SUB DoCalls (x!, y!, sym$, Del!, Px$, UN$) DECLARE SUB BorderTxt () DECLARE SUB LoadFile (a) DECLARE SUB SaveName () DECLARE SUB LoadName () DECLARE SUB Page (b$, CYT, a, Ext$) DECLARE SUB DoLabels (x!, y!, a$, a, c) DECLARE SUB CfigPRINT (Val$, Mbln) DECLARE SUB CfigINPUT (Val$, Mbln) DECLARE SUB ShowBorders (LON!, LAT!, MapMax!, MapName$, Fill) DECLARE FUNCTION Xval (x) DECLARE FUNCTION Yval (x) DECLARE SUB Query () DECLARE SUB AltBText () DECLARE SUB GetConfig () DECLARE SUB DoLPcur (M!, CYT!, Strt!, Ptr!) DECLARE SUB PrintP (StrtP!, EndP!) DECLARE SUB PrintL (StrtL!, EndL!) DECLARE SUB SetSubDir (SbDr$, e$) DECLARE SUB JustPosits (Tmp$) DECLARE SUB Traffic () DECLARE SUB AddP (a$) DECLARE SUB AddL (a$) DECLARE SUB DispALL (a$) DECLARE SUB DispDigi (js$) DECLARE SUB ReCntr (r, ZA!, ZO!) DECLARE SUB MapBorders (a!) DECLARE SUB CalcPWD () DECLARE SUB GetDF (a$, Del, p) DECLARE SUB Print25th (a, a$) DECLARE SUB KillMsg () DECLARE SUB SendaMsg () DECLARE SUB EraseCMD (j!) DECLARE SUB AskCfigEXT (a$) DECLARE SUB TooBad () DECLARE SUB ViewPkts (v$(), vp) DECLARE SUB DispWX (j!) DECLARE SUB ReplayText (k$, Pse, pt) DECLARE SUB DeletePOS (p) DECLARE SUB DeleteLTST () DECLARE SUB AskLL (LL$) DECLARE SUB HookedDisp (c!) DECLARE SUB Weather () DECLARE SUB ShowFeatures () DECLARE SUB GetWX (a$) DECLARE SUB SendMsgs (a$) DECLARE SUB GridSQ (x, y, GdSq$, p) DECLARE SUB NextHR () DECLARE SUB ZeroLnP () DECLARE SUB FindL (a$) DECLARE SUB FindP (a$) DECLARE SUB SetPage (a, b, c) DECLARE SUB SymType (a$) DECLARE SUB GetDTG () DECLARE SUB ToGo () DECLARE SUB BeamHeading (Pos$) DECLARE SUB OverWrite (a$, b$, FirstLine) DECLARE SUB NewQTH (a) DECLARE SUB InitVar (Cfig$, LoadB) DECLARE SUB AllList (b, c) DECLARE SUB PlotCur (LL$) DECLARE SUB ControLine () DECLARE SUB SendCW (a$) DECLARE SUB AllHdr () DECLARE SUB HearDisp (Tmp$) DECLARE SUB LTSTdisp () DECLARE SUB ReplayTxt (d) DECLARE SUB POSIThdr () DECLARE SUB OrderLTST () DECLARE SUB Bye (a$, Fault) DECLARE SUB InitTNC (a) DECLARE SUB Pause (T!) COMMON SHARED AC AS STRING * 1 COMMON SHARED LS() AS STRING * 80 COMMON SHARED BL() AS STRING * 80 COMMON SHARED PS() AS STRING * 80 COMMON SHARED DG() AS STRING * 50 'COMMON SHARED DP() AS STRING * 64 COMMON SHARED HP() AS STRING * 16 COMMON SHARED HL() AS STRING * 23 COMMON SHARED GC() AS STRING * 24 COMMON SHARED BN() AS STRING * 86 COMMON SHARED ML() AS STRING * 12 COMMON SHARED DX() AS STRING * 70 COMMON SHARED Mail() AS STRING * 80 COMMON SHARED Msg$(), Mst$(), Dup(), Hrain%(), Drain%(), Sy$(), ToAd$ COMMON SHARED Strt, Borders, WPM, LnR, Prings, es$, LastALL$, Crsr(), F$ COMMON SHARED LineL, lineP, LineB, Ogga, Hooked, LM, PM, LogW, GetGPStime COMMON SHARED Dwx, HF, Ver$, Key$, Display$, Ignet, LogF, FiLoff, BLsave COMMON SHARED Ycen, Yfg, yft, yfc, Bfac, Sfac, Hfac, Lfac, RS, ReDrw, HrdMe COMMON SHARED CDX, CDY, CPX, CPY, CUX, CUY, LAT$, LON$, ScrnType, HFa$, MY$ COMMON SHARED Allon, TagsON, LblsC, LdrsON, RdsON, WtrON, LinsON, OnlyBCNS COMMON SHARED XMTon, TNCon, Upload, DRon, Vusr, CWon, PBvia$, DXon, JustW COMMON SHARED L01, L02, L03, Lm9, L05, FgC, Bgc, Auto, NewWX, Wrr, Pon, Grid$ COMMON SHARED L18, L19, L21, L22, L23, L24, L24B, L25, BlnX, SSvr, Lok, Doz COMMON SHARED SLAT$, SLON$, UTC, Zulu, ZTG$, Pmax, Lmax, EndL, DGPSon, ALIAS$ COMMON SHARED StrtL, StrtP, StrtB, ID, nmg, nsl, R0MIR$, MLC, Dual, Gfltr, Mgrp$ COMMON SHARED DTG$, DTGs$, HR, GPSprd, PPP, MaxTime, CWfreq, Space, Tagn$, Twn COMMON SHARED NxBCN, NxPos, NxOBJ, NxMsg, SAREXtime, Beamtime, NxWx, Modem COMMON SHARED NxOBJ(), DcayO%(), OBJ, NxMsg(), DecayM(), STSon, Oprt, GRP$ COMMON SHARED DecayM, GPSon, WXon, DFon, MsgsAre, Ofn, Rain, KAM, Junk, TelNo$ COMMON SHARED DecayB, DecayP, CapGd, DimCol, NewRead, NewUser, SPM, BEEPSoff COMMON SHARED Uid$, Port$, TNCcom$, GPScom$, TNCbaud, GPSbaud, TNC, hsp, DGGA COMMON SHARED StrtD, LineD, LinB, BestLON, BestLAT, BestRNG, NewBltn, LstPkt COMMON SHARED Gval, Dval, Wval, Sval, MagVar, Fade, FadeTime, Wind, Ignore COMMON SHARED Rnav, mss, ReDrwT, Htemp, Ltemp, Ralarm, Metric, Wrng, NoGPS COMMON SHARED Enet$, Qstr$, Qc, s25$, Ptime, Bln, MSp, CSp, MapFile$, HSPonGPS COMMON SHARED hspp, GotP, Pdone, Astr$, LastGPS, DoPOS, DoTEMP, DoLTST, DoNOW COMMON SHARED Ptemp$, Pnow$, PpmP, PpmT, PpmN, Nbltn, ZipLan, ReDoM, QRX, Alarm COMMON SHARED Ofw, MyLAT, MyLON, Cy1, Cy2, Cy3, Cx1, In3D, War, Nlog, AGL COMMON SHARED AltNet$, Game, Unstr$, MyMove, HisMove, ALtPath$(), AltT(), LastPkt COMMON SHARED NewVia$, Via$, DFSP, DFhdg, Success, SucTime, NoSPD, Gdfmt, Dots COMMON SHARED MScat, MS, MSectr, NewPkt, LineTH, NetPath$, SavPrd, MapSize COMMON SHARED G, Mla(), MLo(), Mr(), County, ViewD, LocFil, CmpFmt, NewE, Dsave COMMON SHARED LineH, LineR, LineDX, OnLine, CalActy, NoTel, DST, Palias$, Vcnty COMMON SHARED ACK$, ACall$, Wpts, Trial, PCT$(), NewMsg, WPP, WPS, PtsLoc$ ' 'this is assumed to be the last version of APRSdos that I can find. It was 'marked as 852 and was dated September 2001 at the time of PCSAT Launch. 'I am taking it anew as of 26 Nov 2003 to make it free of validation Ver$ = "864" '800 ECHO/RELAY always for KAMS 'Not seeing DIGIPEAT? chnged >18 to >23 'Mscatt still in Primary table only ]$[ 'Receives ?CQ? as of 8.0 (1dec97) '819 SEND NEW. 826 Sends new OBJ '819 RECEIVES COMPRESSED /YYYYXXXX$csT '845 fixed TLM scroll ' Changed SETUP to TOGGLE SPM and HSP. ' Trial=10 mins ' Global replace of (Gval OR Trial) with Trial=-1 for FREE GPS OPTION BASE 0 Hmax = 25 Pmax = 101: Lmax = 79 'fm 79 in 76x, 136 up to 818. 112 to 826 Mx = 2 'Max maps (3=>4) mss = 40 'Max Screen Size NM = 170 ' since 603 REM $DYNAMIC DIM MapName(NM) AS STRING * 21 DIM LatCEN(NM), LonCEN(NM), MapMax(NM)'map list DIM ArrayName$(Mx), LATa(Mx), LONa(Mx) '4 maps (0+3) in memory DIM ppd(Mx), Usd(Mx) DIM NML(Mx) DIM Msg$(mss), Dup(mss)'Incoming msgs & dupe cntr DIM Mst$(mss) 'Message Send Text. Nml is number 'MLC is msg line counter mod 99 DIM NxMsg(mss), DecayM(mss) 'Send Timers DIM LS(Lmax + 1) AS STRING * 80 DIM PS(Pmax + 1) AS STRING * 80 DIM DG(Pmax + 1) AS STRING * 50 DIM BL(Lmax + 1) AS STRING * 80 DIM HL(Pmax + 2) AS STRING * 23 DIM DX(9) AS STRING * 70 DIM v$(14) 'View buffer 'DIM DP(12) AS STRING * 64 'Digipaths DIM GC(37) AS STRING * 24 'CAP Grid DIM BN(mss + 1) AS STRING * 86 'BULLETINS DIM Mail(mss) AS STRING * 80 'Read-Mail DIM NxOBJ(Pmax), DcayO%(Pmax) DIM TH(160) AS STRING * 80 'HST log to LineTH 199>190 in 809,170 in 811 DIM PosS AS STRING * 80 DIM ML(Mx, 210) AS STRING * 12 'map labels (99 in v302) 199 in 68c DIM Mla(Mx, 210), MLo(Mx, 210), Mr(Mx, 199)'Labels,La,Lo,Range DIM TmpCall$(9) 'Temp calls for outgoing msgs DIM Hrain%(7) 'Stores rain every 10 mins DIM Drain%(26) DIM Sy$(36) 'Symbols for Overlay Chars 'DIM ALtPath$(3), AltT(3) b = 3000 ' in 601, had been 1500. DIM x%(Mx, b), y%(Mx, b)'Aux MAP coordinates DIM PCT$(1) MouseStuff: TYPE RegType ax AS INTEGER bx AS INTEGER cx AS INTEGER DX AS INTEGER BP AS INTEGER SI AS INTEGER DI AS INTEGER FLAGS AS INTEGER DS AS INTEGER es AS INTEGER END TYPE DIM RegsIN AS RegType, RegsOUT AS RegType INIT: CLS : Display$ = "OTHR": PLAY ("MB") Bln = 43: Mbln = 25: ScrnType = 9 'was =25 Ycen = 175: Yfg = 1: yft = 1: yfc = 14 * yft 'Multiply screen values 0-350 by yfg 'Multiply line number N *yfc to get screen (0-350) ' REM only Yfc varies according to 25/43 line mode ON ERROR GOTO ScrnEGA SCREEN 9: PALETTE 6, 6: IF ScrnType = 9 THEN GOTO ScnOK Ycen = 100: Yfg = 200 / 350: yft = 200 / 350: yfc = 14 * yft ON ERROR GOTO ScrnCGA SCREEN 8: IF ScrnType = 8 THEN GOTO ScnOK SCREEN 2 ScnOK: ON ERROR GOTO WdthTST Mbln = 43: yfc = 8 * yft: WIDTH 80, Mbln: PALETTE 6, 6'moved WIDTH 80,25 ON ERROR GOTO ScrnTST MSp = 1: SCREEN , , 1, 1 ' MapScreenPage CSp = 0: SCREEN , , 0, 0 ' CurrentScreenPage RegsIN.ax = &H0 CALL Interrupt(&H33, RegsIN, RegsOUT) IF RegsOUT.ax = &HFFFF THEN MouseD = -1 Cy1 = Ycen: Cy2 = 700 * yft * 350 * yft / 4: Cy3 = 700 * yft' cy1 was .5*350 Cx1 = 320 / Ycen ' for 3D DIM Crsr(16) CIRCLE (4, 3), 4, 14 GET (0, 0)-(8, 6), Crsr ON ERROR GOTO ErrorTrap CALL InitVar(Cfig$, LoadB): Strt = L22 CK = 1: NETCYCLE = 15 * 60'sec ppd(0) = 600'prevents %by0 error LockM = -1 Config: Vusr = 0: Fault = 0: GOSUB LoadCFG IF Fault <> 0 THEN Fault = 0: CALL GetConfig IF CDX = 0 AND CDY = 0 THEN new = -1: LoadB = 0 ELSE new = 0 GOSUB LdMapLst MapSize = RS IF LoadB THEN F$ = "BACKUP.BK": GOSUB LDB: NewMap = -1 IF WXon THEN MID$(PS(0), 38) = "No WX data" 'IF SPM OR GPSon THEN ' MID$(PS(0), 19) = "0000.00" ' MID$(PS(0), 28) = "00000.00" ' GOSUB Posits: NewMap = -1 'ELSEIF Display$ <> "READ" THEN GOSUB DrwMap IF Display$ <> "READ" THEN GOSUB DrwMap 'END IF Hooked = -1'Means NONE CALL InitMore: CALL Clearbuf: IF NoTel = 0 THEN GOSUB DrwMap KeyTime = TIMER IF Enet$ = "M" THEN LastSave = TIMER ' OPEN "Testfile.txt" FOR OUTPUT AS #6 Main: F$ = "COMM" ' for error trap DO 'forever Fault = 0 IF ABS(TIMER - TimTik) > 4.5 THEN GOSUB NexTime IF Ptime AND TIMER - Ptime > 2.3 THEN PM = PpmT: PpmT = -1: PosS = Ptemp$ Ptime = 0: GotP = 0: GOSUB LogP CALL OverWrite(PS(PM), " Pos", StrtP) END IF IF Modem OR TNCon THEN IF LOC(1) > 5 AND Port$ = "TNC" THEN GOSUB RcvPKT a$ = "" IF MouseD THEN RegsIN.ax = &H3: CALL Interrupt(&H33, RegsIN, RegsOUT) bx% = RegsOUT.bx: cx% = RegsOUT.cx: DX% = RegsOUT.DX CALL MouseB(bx%, cx%, DX%, ZOOM, a$, LL$, CYT) IF a$ = "c" THEN a$ = "": GOSUB Mcen END IF GOSUB Kbd IF GPSon AND Trial AND NoGPS = 0 THEN a$ = INPUT$(LOC(2), 2) 'new 825 'IF LOC(2) > 40 AND ABS(TIMER - LastGPS) > GPSprd THEN 'new 825 IF ABS(TIMER - LastGPS) > GPSprd THEN 'new 825 CALL PL1("Getting NMEA fix... ", 10) 'DO WHILE LOC(2) > 500: a$ = INPUT$(250, #2): LOOP 'new 825 Pdone = 0: GotP = 0: Clock = TIMER DO UNTIL Pdone OR ABS(TIMER - Clock) > 3' OR LOC(2) < 40 'new 825 'Skip if nothing left to INPUT! LINE INPUT #2, a$: IF LEFT$(a$, 1) < " " THEN a$ = MID$(a$, 2) IF LEFT$(a$, 1) = "$" THEN PM = 0 Call$ = LEFT$(PS(0), 9) DoPOS = 0: CALL DoNMEA(a$, 0, Call$, PosS) IF DoPOS THEN GOSUB LogP END IF LOOP GOSUB NexTime 'ELSEIF Display$ = "SATS" THEN CALL DoSATS(2, a$): a$ = "" removed 861 END IF ELSEIF hsp AND Trial AND NoGPS = 0 THEN CALL HSPtest END IF IF Wval OR DFon THEN 'was Dval Del = ABS(TIMER - LastWxDf) IF (WXon OR DFon) THEN a = LOC(2) IF DFon THEN L = 1 ELSE L = 14 IF a > 160 THEN x$ = INPUT$(LOC(2), 2) 'added this about 793? 'LINE INPUT #2, X$ 'was causing lockup? ELSEIF (a > L OR WXon < -3) AND Del > GPSprd AND NoGPS = 0 THEN LastWxDf = TIMER PM = 0: PosS = PS(0) IF WXon THEN CALL GetWX(PosS) ELSE CALL GetDF(PosS, Del, 2) GOSUB LogP IF WXon THEN CALL DispWX(0) END IF ELSEIF DFSP = 55 THEN IF (INP(hspp + 2) AND 32) = 0 THEN PM = 0: PosS = PS(0) CALL Pause(4) CALL GetDF(PosS, Del, 1)' Looks on TNC port(1) PM = 0: GOSUB LogP END IF IF DoHSP AND (INP(hspp + 2) AND 32) THEN LastGPS = 0: DoHSP = 0 END IF END IF 'IF STSon AND ABS(TIMER - LastGPS) > GPSprd THEN ' GOSUB Streets 'Also in LOG for new posits. ' LastGPS = TIMER 'END IF RegsIN.ax = &H1680: CALL Interrupt(&H2F, RegsIN, RegsOUT) LOOP SYSTEM Kbd: IF a$ = "" THEN a$ = INKEY$ IF PreKey$ <> "" THEN a$ = PreKey$: PreKey$ = "" IF a$ = "" THEN RETURN RndMin = INT(RND * 240) a$ = UCASE$(a$): Key$ = a$: Flg$ = "": b$ = MID$(a$, 2, 1) IF a$ = " " THEN Tmp$ = "": Borders = 0: Fill = 0: MapSize = RS 'xnrml=-1 Prings = 0: Drings = 0 IF Doz THEN Doz = 0: SCREEN ScrnType IF NewMap = 0 AND MSp AND CSp = 0 THEN SCREEN , , 1, 1: CSp = 1: Display$ = " MP" IF NewRead THEN CALL ReadPage(Lin) ELSE GOSUB DrwMap: NewRead = 0 END IF ELSEIF a$ = CHR$(13) THEN GOSUB Hook 'can return with Cancel, Delete, Edit, List-Log, Move, ENTER/unhook, Send, Weps" END IF IF LEN(a$) = 2 THEN GOSUB CkPage 'PAGE UP/DOWN commands SELECT CASE b$ 'CASE "R" 'INSERT ' IF Hooked > -1 THEN CALL PlotCur(LL$): PM = Hooked: GOSUB POSCOR REM CK/Yfactr moves cursor x2 on laptops CASE "M": Xinc = 5: Yinc = 0: GOSUB Kcur CASE "K": Xinc = -5: Yinc = 0: GOSUB Kcur CASE "H": Xinc = 0: Yinc = -5: GOSUB Ycur 'Up arrow CASE "P": Xinc = 0: Yinc = 5: GOSUB Ycur CASE "O": CDX = BestLON: CDY = BestLAT: RS = BestRNG: GOSUB DrwMap 'END CASE CHR$(18): IF Display$ = "BLTN" THEN LinB = 0: CALL Bltns'alt-E CASE CHR$(49): CALL NTSsend CASE CHR$(46): FOR i = 1 TO lineP IF LEFT$(DG(i), 1) = "*" THEN MID$(DG(i), 1, 1) = " " NEXT i: GOSUB Digis 'CASE CHR$(20): CALL PR(a$, "Use new LIST-TELEMETRY command") 'alt-T CASE CHR$(31): CALL SETUP(a$, Oprd): Fault = 0 'alt-S IF a$ = "SAVE" THEN CALL Validsub(Val$): GOSUB SaveCFG IF a$ = "DoPos" THEN GOSUB Posits: CALL ControLine CASE CHR$(59): CALL HelpMenu 'F1 IF Display$ = "CD" THEN MapF = 0: MapName(0) = "CD.MAP": GOSUB Dmap CASE CHR$(60): CALL SendaMsg 'F2 CASE CHR$(63): CALL FadeKey(MyID$, LL$, PosS) 'F5 CALL AddP(LEFT$(PosS, 9)) GOSUB LogP 'No longer skips Filter CASE CHR$(64): NoSPD = NOT NoSPD: CALL ControLine 'F6 CASE CHR$(65): IF Bln = Mbln THEN Bln = 25: yfc = 14 * yft ELSE Bln = Mbln: yfc = 8 * yft IF Mbln = 43 THEN CALL InitVGA(PreKey$): NewMap = -1 'F7 CASE CHR$(66): LastGPS = 0 'F8 CASE CHR$(67): CALL CmptCENTER(CDY, CDX, RS): IF Doz = 0 THEN GOSUB DrwMap'F9 CASE CHR$(68): IF Doz THEN GOSUB DrwMap ELSE Doz = -1: SCREEN 0 'F10 END SELECT ELSEIF Hooked > 0 THEN 'can return with Cancel, Delete, Edit, Height, List-Log, Move, Send, Weps" SELECT CASE a$ CASE "C": MID$(PS(Hooked), 10, 1) = " ": Alarm = -1 PM = Hooked: Hooked = -1 CALL HookedDisp(PM) CASE "D": CALL DeletePOS(Hooked): GOSUB DrwMap CASE "E", "M": CALL PlotCur(LL$): PM = Hooked: GOSUB POSCOR'was INSERT CASE "L": CALL AllList(EndB, 1) CASE "E": CALL EL2alt CASE "S": CALL SendaMsg END SELECT ELSEIF LEN(a$) = 1 THEN a = VAL(a$) IF (a + 1) / 2 = INT((a + 1) / 2) THEN IF SvLAT(a) = 0 THEN RS = INT(2 ^ ((9 - a) * 3 / 2 + 1)) PM = 0: GOSUB CenternDrw ELSE CDY = SvLAT(a): CDX = SvLON(a) RS = SvRNG(a): MapSize = RS GOSUB DrwMap END IF a$ = "" END IF SELECT CASE a$ 'CASE "A": CALL PR(a$, "Use new LIST-LOG command") CASE "B": CALL Bltns CASE "C": CALL ControlsMEN(a$) IF a$ = "D" OR a$ = "F" THEN GOSUB PlotUnits IF a$ = "P" THEN GOSUB Posits CASE "D": GOSUB Digis CASE "E": CALL EraseCMD(j) CASE "F": GOSUB FileCMDs CASE "G": PM = 0 FOR i = 1 TO lineP IF MID$(PS(i), 10, 1) = "T" THEN PM = i NEXT IF Display$ <> " MP" THEN Key$ = " ": IF RS > 32 THEN RS = 32 GOSUB CenternDrw CASE "H": GOSUB WhenHrd CASE "?": CALL HelpMenu CASE "I": IF Lok = 0 THEN GOSUB Inputs CASE "J": CALL JustONE(drw, Tmp$): IF drw THEN GOSUB DrwMap CASE "K": CALL KillMsg CASE "L": CALL PR(a$, "LIST: DX, Log, PCsatTLM, Resources, Status, Telemetry") SELECT CASE a$ CASE "L": CALL AllList(EndB, 1) CASE "D", "R": CALL NewScrn("DXlst", 10, 9) PRINT " APRS Resources or DX spots": PRINT FOR i = 0 TO 9: LOCATE , 4: PRINT DX(i): NEXT CASE "S": GOSUB Latest CASE "T": CALL Telm(1) CASE "P": CALL Telm(99) END SELECT CASE "M": GOSUB MapCMDs CASE "N": CALL Weather CASE "O": GOSUB Operations CASE "P": GOSUB Posits CASE "Q": CALL PR(a$, "Use new FILE-QUIT command") CASE "T": CALL Traffic CASE "S": CALL SendaMsg CASE "R": CALL ReadHdr: CALL ReadPage(Lin): REM Key$ = "" CASE "U": Display$ = "VIA" F$ = "UNPROTO2.sys": CALL FileRead(0) GOSUB ViaChange CASE "V": CALL ViewPkts(v$(), vp) CASE "W": CALL WxMenu(r, NML(G)): IF r THEN GOSUB DrwMap CASE "X": GOSUB Transmit CASE "Y": In3D = NOT In3D: GOSUB DrwMap CASE "Z": CASE "+", ">", ".": NxP = NxP + 1: CALL HkStep(NxP) CASE "-", "<", ",": NxP = NxP - 1: CALL HkStep(NxP) CASE "]": MapSize = MapSize / 2: GOSUB ShowMaps 'F3 CASE "[": MapSize = MapSize * 2 IF Borders THEN GOSUB ShowMaps ELSE GOSUB DrwMap 'F4 CASE "6": CPX = CPX - 20 / CK: CALL PlotCur(LL$)'SHIFT Cursor by 4 CASE "4": CPX = CPX + 20 / CK: CALL PlotCur(LL$) CASE "8": CPY = CPY + 20 / CK: CALL PlotCur(LL$) CASE "2": CPY = CPY - 20 / CK: CALL PlotCur(LL$) CASE CHR$(14): GOSUB ToggleNetCon: 'ctrl-N CASE CHR$(9): IF Doz = 0 THEN CALL ShowSetup CASE CHR$(27): CPX = CDX: CPY = CDY: CALL PlotCur(LL$) END SELECT a$ = "": REM Key$ = "" END IF IF KyActy > 1800 THEN DecayP = 60: NxPos = TIMER 'Refreshes Pos timer on new acty KeyTime = TIMER IF Cnctd THEN CALL PL118("YOU MAY BE STILL CONNECTED...", 14) IF NetCon THEN z$ = " *** CAUTION! NETCON is enabled! You control ALL POSITS! (^N to cancel) ***" CALL PL24(z$, 12) END IF IF Doz THEN LOCATE 2, 4 PRINT " SCREEN is DOZing... Hit SPACE-BAR for map or 'L,P,H,D,R,T' to restore" Display$ = "DOZ" END IF IF LEFT$(Display$, 3) <> " MP" THEN Hooked = -1: Borders = 0: Fill = 0: Tmp$ = "": ' xNrml = -1'un hook if not map IF Game THEN CALL Gamebox IF NewBltn OR QRX THEN IF ABS(TIMER - LastBeep) > 10 THEN CALL PL118("NEW BULLETIN! CK B-PAGE", 13) IF QRX THEN CALL PL118("NET MINIMIZED! Overide with C-X)", 14) CALL SendCW("B") LastBeep = TIMER END IF END IF Key$ = "" RETURN Transmit: CALL PR(a$, "XMT: All, Bltns, CQ, LastACK, Msgs, Objects, Posit, Query, Resource, Status") d = INT(ABS(TIMER - LXmt)) IF d > 8 THEN Key$ = "X": LXmt = TIMER IF a$ = "A" AND NOT Space THEN GOSUB CkPakTime ELSEIF a$ = "B" THEN CALL SendMsgs("B") ELSEIF a$ = "C" THEN CALL DigiDo(0): CALL Xmit(1, "Ping! CQ") ELSEIF a$ = "L" THEN Twn = 31 'will do twice ELSEIF a$ = "S" THEN GOSUB SendBCN ELSEIF a$ = "P" THEN CALL SendPos ELSEIF a$ = "O" THEN GOSUB SendAllObjs ELSEIF a$ = "Q" THEN CALL Query ELSEIF a$ = "R" THEN CALL Resource(0) ELSEIF a$ = "M" THEN CALL PR(a$, "Which MSG line"): a = VAL(a$) NxMsg(a) = TIMER: DecayM(a) = 8 CALL SendMsgs("") ELSE LXmt = 0 END IF 'LXmt = TIMER ELSE CALL PL25(" Transmitting too rapidly. (Wait" + STR$(8 - d) + " secs)...", 14) END IF RETURN SaveMAP: CALL PR(a$, "(USA is in 1). SAVE CURRENT MAP IN 3, 5, 7, or 9") a = VAL(a$) IF INSTR("3579", a$) > 0 THEN SvLAT(a) = CDY: SvLON(a) = CDX: SvRNG(a) = RS END IF: RETURN FileCMDs: CALL PR(a$, "FILE: Appnd, DOS, Ethrnet, Load, New, Print>, Quit(ESC), Replay, Save, sOrt") SELECT CASE a$ CASE "A", "L": CALL LoadName IF F$ <> "" THEN IF a$ = "L" THEN CALL ZeroLnP GOSUB LDB: IF Display$ <> "READ" THEN GOSUB DrwMap END IF CASE "D": CALL DShell(PreKey$): NewMap = -1 'CASE "G": CALL GetTel: NewMap = 0 'CASE "H": CALL HangUp CASE "O": CALL OrderLTST CASE CHR$(27): SYSTEM 'ESC CASE "Q": GOSUB Logoff CASE "R": CALL ReplayTxt(d): GOSUB Replay CASE "S": GOSUB SaveCMD CASE "N": CALL ZeroLnP: NewMap = -1: GOSUB Latest CASE "P": CALL FPrint CASE "E" IF Vusr THEN CALL PR(Enet$, "Master, Slave, or None") IF Enet$ = "M" OR Enet$ = "S" THEN CALL PR23(NetPath$, a$, "Path for NETWORK file (example D:)", 1) NetPath$ = a$ CALL PR2N(SavPrd, "Enter update periodicity in Seconds") ELSE NetPath$ = "" END IF ELSE CALL TooBad END IF END SELECT RETURN Mcen: RegsIN.ax = &H4: RegsIN.cx = 320: RegsIN.DX = Ycen CALL Interrupt(&H33, RegsIN, RegsOUT) RETURN Inputs: CALL PR(a$, "INPUT: AddOBJ, DF, EL-angle, MYdata>, PwrHtGain, Resource, Save-pos, Up-pos") IF a$ = "A" THEN CALL AddPos(LL$, PosS, a): IF a THEN GOTO Posin PM = 0: PosS = PS(PM) IF a$ = "P" THEN CALL PwrAnt(1, PS(0)) 'ELSEIF a$ = "E" AND Hooked > 0 THEN CALL EL2alt 'moved to HOOK ELSEIF a$ = "R" THEN CALL Resource(1) ELSEIF a$ = "D" THEN CALL BeamHeading(PosS): GOSUB LogP: CALL PlotCur(LL$) ELSEIF a$ = "M" THEN CALL PR(a$, "INPUT MY: BLTNgroups, I/O, MSGgroups, Heading, Posit, Radar, Status") SELECT CASE a$ CASE "I": a = INP(888): CALL PR2N(a, "Enter I/O"): OUT 888, a CASE "P": CALL AskLL(LL$): GOSUB POSCOR CASE "B": CALL PR23(GRP$, a$, "Enter BULLETIN Groups separated by commas", 1): GRP$ = a$ CASE "M": CALL PR23(Mgrp$, a$, "Enter MSG groups separated by commas", 1): Mgrp$ = a$ CASE "H": CALL PR23(H$, a$, "Vehicle heading (End with M for magnetic)", 1): H$ = a$ IF H$ <> "" THEN CALL GetBrng(H$, PS(0), BH$): MID$(PS(0), 38) = BH$ DFhdg = VAL(BH$) END IF CASE "R": a = 70 * Ralrm: CALL PR2N(a, "Radar range in miles (0 disables)") Ralrm = a / 70: TimTik = 0 CALL PR(a$, "Alarm on RADAR stations only (R), ALL (A) or only NEW [ENTER]") RadrR = 0: RadrALL = 0 IF a$ = "R" THEN RadrR = -1 IF a$ = "A" THEN RadrALL = -1 CASE "S": CALL AltBText END SELECT ELSEIF a$ = "S" THEN CALL SavPos(PosS, " *"): GOSUB LogP ELSEIF a$ = "U" THEN CALL SavPos(PosS, " +"): GOSUB LogP END IF RETURN MapCMDs: CALL PL1(ArrayName$(MapA), 15) CALL MapMenu(Drings, Fill, new, MapA, LockM, MyID$, Ovrly, RingSel, b$, GotoN) SELECT CASE GotoN CASE 1: GOSUB DrwMap CASE 2: GOSUB PlotUnits CASE 3: GOSUB PlotLabls CASE 4: GOSUB CkPage CASE 5: CASE 6: GOSUB ShowMaps CASE 7: SWAP MapF, MapE: GOSUB Dmap CASE 8: GOSUB SaveMAP CASE 9: GOSUB LdMapLst: CALL ShowSetup CASE 10: Tmp$ = "none": GOSUB DrwMap: Tmp$ = "": CALL TraTr END SELECT RETURN Digis: CALL DispDigi("") CXT = 76: GOSUB Tcur RETURN Operations: CALL PR(a$, "OPERATIONS: ALARMSclear, COMM, Find, ReplayTrks, Unproto") SELECT CASE a$ CASE "A": IF Alarm > -1 THEN MID$(PS(Alarm), 10, 1) = " " Alarm = -1 CASE "F": CALL FindCall(Fa, Box): Key$ = "G" ON Fa GOSUB Latest, WhenHrd, Digis, Posits, CenternDrw, DrwMap IF Fa = 6 THEN CALL GridSQ(CPX, CPY, GdSq$, 1) Fa = 0 'CASE "D": CALL Digipath(a$) 'returns "E" CASE "P", "Q": CALL PRa("", "Ping/Query now in XMT menu") CASE "R": Ans$ = "": d = 0: GOSUB Trace 'CASE "U": a$ = "E" CASE "C": CALL PR(a$, "GPS, WX, DF or TNC port") IF Lok THEN ELSEIF a$ = "T" OR a$ = "" THEN CALL CommTNC(a$, Astr$, "Entering CMD: mode...") ELSEIF (a$ = "G" AND SPM <> 0) OR (a$ = "D" AND DFSP) THEN CALL CommTNC(a$, Astr$, "Entering HSP: mode...") ELSE CALL CommTalk(Astr$) END IF CALL InitVGA(PreKey$) END SELECT IF a$ = "F" THEN 'ELSEIF a$ = "E" THEN GOSUB ViaChange ELSE CALL ShowSetup END IF CALL PL25("", 0) RETURN CkPage: CALL Page(b$, CYT, a, Ext$) IF a THEN ELSEIF Key$ = "L" THEN GOSUB Latest ELSEIF Key$ = "D" THEN CALL DispDigi("") ELSEIF Key$ = "H" THEN GOSUB WhenHrd ELSEIF Key$ = "P" THEN GOSUB Posits ELSEIF Key$ = "A" THEN CALL AllList(EndB, 1) ELSEIF Key$ = "C" THEN GOSUB CenternDrw ELSE GOSUB CurDrwMap 'includes HOME END IF RETURN ToggleNetCon: IF NetCon THEN NetCon = 0: CALL PL24("", 0) ELSE NetCon = 1 CALL PR2N(NetCycTm, "Enter cycle period") END IF: RETURN LoadCFG: F$ = Cfig$: OPEN F$ FOR INPUT AS #3 IF Fault = 53 THEN RETURN CALL CfigINPUT(Val$, Mbln) IF Val$ = "UNREG" THEN Fault = 1 FOR i = 3 TO 9 STEP 2: INPUT #3, SvLAT(i), SvLON(i), SvRNG(i): NEXT CLOSE #3: RETURN SaveCFG: IF Fault <> 0 THEN RETURN IF NOT Vusr THEN CALL TooBad: RETURN CALL AskCfigEXT(Cfig$): F$ = Cfig$ CALL PRa(F$, " Saving Config") OPEN F$ FOR OUTPUT AS #3 CALL CfigPRINT(Val$, Mbln) FOR i = 3 TO 9 STEP 2: WRITE #3, SvLAT(i), SvLON(i), SvRNG(i): NEXT CLOSE #3 CALL ShowSetup RETURN Logoff: 'CALL PR(a$, "Quit with changes, eXit and save, ESC with no saves, any key to resume") 'IF a$ = CHR$(27) THEN SYSTEM 'IF a$ <> "Q" AND a$ <> "X" THEN RETURN F$ = "SYSTEM\RESTORE.TNC": OPEN F$ FOR INPUT AS #3 IF Fault <> 0 THEN LOCATE Bln - 4, 2: PRINT "File "; F$; " not found!..." CALL Bye(a$, Fault) IF a$ = "Q" THEN F$ = "BACKUP.BK": GOSUB SaveSub ELSE F$ = "BAKS\BACKUP.BK": GOSUB SaveNet END IF SYSTEM NexTime: 'Trial = Trial - 4.5: IF Trial < 0 THEN Trial = 0 TimTik = TIMER + RND(Pline): CALL GetDTG RANDOMIZE (TIMER) IF QRX AND ABS(TIMER - QRX) > 400 + PM THEN QRX = 0: XMTon = -1 IF TIMER - LstPkt > 9 THEN GotP = 0 IF INSTR("MS", Enet$) > 0 AND ABS(TIMER - LastSave) > SavPrd THEN LastSave = TIMER F$ = NetPath$ + "\BACKUP.BK" IF Enet$ = "M" THEN GOSUB SaveNet' This is for ethernet IF Enet$ = "S" THEN CALL ZeroLnP: GOSUB LDB: GOSUB DrwMap END IF IF NetCon AND TIMER - LstNet > NetCycTm THEN NetCon = NetCon + 1: IF NetCon > lineP THEN NetCon = 1 FOR i = NetCon TO lineP IF MID$(PS(i), 11, 1) = "*" THEN Key$ = "X": CALL SendObject(i): i = lineP: Key$ = "" END IF NEXT i LstNet = TIMER END IF IF VAL(MID$(DTG$, 3, 2)) <> ASC(HL(0)) - 32 THEN CALL NextHR IF Alarm >= 0 THEN CALL Noise(14) IF Alarm <> AlarmL THEN AlarmL = Alarm: PM = Alarm: GOSUB CenternDrw CALL PL118("HOOK or hit OPS-ALARMclear to silence ALARM", 14) END IF KyActy = ABS(TIMER - KeyTime) IF SSvr AND KyActy > 300 THEN CLS : PRINT "ScrnSaved..." AC = MID$(PS(0), 26, 1) IF KyActy < 600 THEN AC = LCASE$(AC) ELSE AC = UCASE$(AC) MID$(PS(0), 26, 1) = AC IF Doz = 0 AND KyActy > 9999 AND MID$(DATE$, 4, 2) <> "01" THEN KeyTime = TIMER: IF lineP > 16 THEN CALL OrderLTST: Alarm = -1 'sorts list after 3 hours if not 1st of month END IF GOSUB CkPakTime CALL ToGo IF HF THEN Bfac = 2 ELSE Bfac = 1 'x2 cuz no digis IF Twn THEN Twn = Twn + 5 IF Twn > 32 THEN CALL DigiDo(1): CALL Xmit(1, Tagn$) IF Twn = 36 THEN Twn = 2 ELSE Twn = 0 'Will do twice and stop END IF END IF IF BLsave THEN BLsave = 0: GOSUB SaveBL IF ABS(TIMER - CntrT) > 15 THEN CALL ChannelCap(CntrT, Pcntr) IF ABS(TIMER - FadeTime) > 7200 THEN Fade = 80 'IF ABS(TIMER - CalActy) > 33 AND OnLine > 0 THEN CALL HangUp IF Success = 0 AND Auto AND ABS(TIMER - SAREXtime) < 9 AND TIMER > 10 THEN SAREXtime = 0 DecayB = 4: NxBCN = TIMER + 15 * RND(TIMER) ELSEIF TIMER > 600 AND ABS(TIMER - SucTime) > 600 THEN Success = 0 END IF IF MScat AND XMTon THEN CALL Xmscat RETURN LDB: CALL SetSubDir("BAKS", "BK") IF NetPath$ <> "" THEN CALL PL1("Getting " + F$, 10) Fault = 0: OPEN F$ FOR INPUT AS #3: IF Fault <> 0 THEN RETURN IF RIGHT$(F$, 9) <> "BACKUP.BK" THEN Fade = 0: FadeTime = TIMER CALL LoadFile(3) IF MSp THEN SCREEN , , 1, 0: CLS : CSp = 0: NewMap = -1: SCREEN , , 0, 0 IF nmg + nsl > 0 THEN PreKey$ = "R": 'Display$ = "READ": CALL ReadPage(Lin) Fault = 0 RETURN SaveCMD: F$ = "BK" + DTG$ + ".BK": Req = -1 SaveSub: CALL PL25("", 0): CALL SaveName IF RIGHT$(F$, 9) <> "BACKUP.BK" THEN Req = -1 SaveNet: IF F$ <> "BAKS\" THEN LOCATE Bln - 2: PRINT " SAVING "; F$; OPEN F$ FOR OUTPUT AS #3: IF Fault = 76 THEN RETURN CALL SaveFile CLOSE #3 'IF RIGHT$(F$, 9) <> "BACKUP.BK" THEN Req = -1 'moved 831 GOSUB SaveTH GOSUB SaveBL Req = 0 END IF IF Nlog THEN Nlog = 0: CLOSE #4 RETURN SaveTH: F$ = "TK" + DTG$: IF LineTH < 1 THEN RETURN IF LogF OR Req THEN LOCATE Bln - 2, 25: PRINT " Saving "; F$; : CALL SetSubDir("HSTS", "HST") OPEN F$ FOR OUTPUT AS #3: IF Fault = 76 THEN RETURN FOR i = 1 TO LineTH: PRINT #3, RTRIM$(TH(i)): NEXT i CLOSE #3 LineTH = 0 ELSE LineTH = LineTH - 10 FOR i = 1 TO LineTH: TH(i) = TH(i + 10): NEXT END IF CALL Noise(2) RETURN SaveBL: IF LineB < 1 THEN RETURN F$ = "BL" + DTG$ IF LogF OR Req THEN LOCATE Bln - 2, 50: PRINT " Saving "; F$; : CALL SetSubDir("LOGS", "LOG") OPEN F$ FOR OUTPUT AS #3: IF Fault = 76 THEN RETURN FOR i = 1 TO LineB: PRINT #3, RTRIM$(BL(i)): NEXT i CLOSE #3: LastALL$ = BL(LineB - 1) END IF CALL Noise(2) RETURN ScrnTST: IF ERR = 5 THEN MSp = 0: RESUME NEXT WdthTST: IF ERR = 5 THEN Mbln = 25: Bln = 25: WIDTH 80, 25: yfc = 14 * yft: RESUME NEXT ScrnEGA: IF ERR = 5 THEN ScrnType = 8: RESUME NEXT ScrnCGA: IF ERR = 5 THEN ScrnType = 2: RESUME NEXT 'was CGA ScrnBW: IF ERR = 5 THEN ScrnType = 2: RESUME NEXT ErrorTrap: Fault = ERR: LOCATE 1, 61 Ercntr = Ercntr + 1 IF ERR = 57 THEN PRINT "I/O-glitch-"; : RESUME IF ERR = 69 AND NOT GPSon THEN PRINT "Comm-buffer-overflow"; IF ERR = 69 AND es$ = "TNCcomms" THEN es$ = "": RESUME NEXT IF ERR = 69 THEN RESUME NEXT CALL SendCW("EH") IF ERR > 23 AND ERR < 28 THEN PRINT "*DEVICE FAULT* ": RESUME NEXT IF ERR = 53 THEN PRINT F$; "NotFnd": CLOSE #3: RESUME NEXT IF ERR = 52 THEN PRINT F$; "-Bad #": CLOSE #3: CLOSE #5: RESUME NEXT IF ERR = 64 THEN PRINT F$; "BadNme": CLOSE #3: RESUME NEXT IF ERR = 62 THEN RESUME NEXT IF ERR = 2 THEN PRINT "SYNTAX-error" IF ERR = 76 THEN PRINT "ERROR! Check your APRS SUBDIRECTORIES": RESUME NEXT CLOSE #3: CLOSE #4 PRINT : PRINT "***" LOCATE 13, 1: LINE (0, 11 * yfc)-(640, 17 * yfc), 12, BF 'was 18* IF ERR = 7 THEN PRINT "OUT OF MEMORY! TRY ELIMINATING SOME TSR's..." ELSE 'PRINT "LM,PM:"; LM, PM PRINT "A$:"; a$ PRINT "C$:"; c$ PRINT "ES$"; es$ GotP = 0 END IF PRINT "ERROR"; ERR; " See TROUBLE.TXT. Hit ENTER to resume or Q to Quit"; now = TIMER DO UNTIL ABS(TIMER - now) > 10 a$ = UCASE$(INKEY$): IF a$ <> "" THEN EXIT DO LOOP: Ect = Ect + 1 LINE (380, 12 * yfc)-(620, 16 * yfc), 2, BF'was 18* LOCATE 14, 50: PRINT "Error #"; Ect; "ignored and resumed" IF UCASE$(a$) <> "Q" THEN Fault = 0: RESUME Main SYSTEM LdMapLst: Fault = 0: F$ = "MAPLISTS\MAPLIST." + MapFile$: OPEN F$ FOR INPUT AS #3 IF Fault = 53 AND (CDX OR CDY) THEN CLS : PRINT "FILE NOT FOUND": MapFile$ = "USA": RETURN IF Fault = 53 THEN CLS : PRINT "Can't run without MAPLIST."; MapFile$; "!": STOP IF Fault <> 0 THEN PRINT "Can't find MAP or MAPS directory": RETURN i = 1 INPUT #3, y: LINE INPUT #3, a$ SvLAT(1) = y: IF INSTR(a$, "DEFAULT") > 14 THEN Dflt = -1 INPUT #3, x: LINE INPUT #3, a$: SvLON(1) = x INPUT #3, M1rs: LINE INPUT #3, a$ SvRNG(1) = 2 ^ INT(.000001 + LOG(M1rs) / LOG(2)) INPUT #3, a: LINE INPUT #3, a$ WHILE a$ <> "* BEGIN *": LINE INPUT #3, a$: WEND WHILE NOT EOF(3) AND i <= UBOUND(MapName) INPUT #3, MapName(i), LatCEN(i), LonCEN(i), MapMax(i) LINE INPUT #3, a$' IGNORE comments a$ = LEFT$(MapName(i), 1) IF a$ > " " AND a$ <> "*" THEN NumMaps = i: i = i + 1 WEND: CLOSE #3 IF i >= UBOUND(MapName) - 1 THEN CLS : LOCATE 12, 25: PRINT "Too many MAPS in MAPLIST.map" Pause (4) END IF REM CPX = X: CPY = Y: CALL PlotCur(LL$) 'DONT AUTOCENTER IF new THEN new = 0: CDX = x: CDY = y: RS = SvRNG(1) ELSE CALL PL25(" Hit HOME to redraw map at new MAPLIST default or ESC to return cursor here. ", 14) END IF 'RS = 2 ^ INT(.000001 + LOG(RS) / LOG(2))'Rng is intgr power of 2 (dupe) RETURN ShowMaps: IF In3D THEN GOSUB D3: RETURN IF Fill THEN x = -1: GOSUB LoopBrdrs x = 0: GOSUB LoopBrdrs CALL BorderTxt IF NOT Borders THEN GOSUB PlotLabls: CALL Bline(0) RETURN LoopBrdrs: FOR i = 1 TO NumMaps CALL ShowBorders(LonCEN(i), LatCEN(i), MapMax(i), MapName$(i), x) NEXT i RETURN LoadAux: 'Load into another dim of array until full (AyPtr starts at 0) IF AyPtr > UBOUND(Usd) THEN 'Replace Least used one Minv = 9999 FOR i = 0 TO UBOUND(Usd) IF Usd(i) < Minv THEN Minv = Usd(i): AyPtr = i NEXT i: FOR i = 0 TO UBOUND(Usd): Usd(i) = 1: NEXT i END IF 'If new, zero usage counters to 1 for fairness Fault = 0 F$ = MapName(MapF): CALL SetSubDir("MAPS", "MAP") CALL PL25(" Spinning up disk...", 12) OPEN F$ FOR INPUT AS #3 IF Fault = 53 THEN Fault = 0: MapA = 0: Pause (1): RETURN IF Fault <> 0 THEN PRINT "Maps or MAPS directory not found!": RETURN MapsOK = -1: Fault = 0 INPUT #3, LATa(AyPtr): LINE INPUT #3, a$ INPUT #3, LONa(AyPtr): LINE INPUT #3, a$ INPUT #3, ppd(AyPtr): LINE INPUT #3, a$ INPUT #3, LatCEN: LINE INPUT #3, a$ INPUT #3, LongCen: LINE INPUT #3, a$ INPUT #3, MapRng: LINE INPUT #3, a$ INPUT #3, MinRng: LINE INPUT #3, a$ i = 0: G = AyPtr LINE INPUT #3, a$ IF a$ = "Compressed" THEN Comp = -1: ELSE Comp = 0 IF a$ = "LineFormat" THEN Comp = 9 T$ = " *** LOADING (" + RTRIM$(MapName(MapF)) + ") INTO RAM. FORMAT is " + a$ CALL PL25(T$, 12) DO WHILE NOT EOF(3) i = i + 1 IF Comp = -1 THEN LINE INPUT #3, a$ IF a$ = " 0,0" THEN x%(G, i) = 0: y = 0 ELSEIF a$ = " 0,-1" THEN x%(G, i) = 0: y = -1 ELSE CALL UnCmprs(a$, x%(G, i), y%(G, i)) END IF ELSEIF Comp = 9 THEN x%(G, i) = 0 INPUT #3, y%(G, i): LINE INPUT #3, a$ IF y%(G, i) = -1 THEN GOSUB LoadLabels: EXIT DO FOR z = 1 TO LEN(a$) STEP 3 i = i + 1 CALL UnCmprs(MID$(a$, z, 3), x%(G, i), y%(G, i)) NEXT ELSE INPUT #3, x%(G, i), y: y%(G, i) = y * Yfg END IF IF x%(G, i) = 0 AND NOT EOF(3) AND Comp <> 9 THEN ' Get color & store with x=0 INPUT #3, y%(G, i): LINE INPUT #3, a$ ' Ignore line name IF y = -1 THEN GOSUB LoadLabels END IF LOOP: NMPa(AyPtr) = i CLOSE #3: ArrayName$(AyPtr) = MID$(F$, 6) ' Skips "MAPS\" MapA = AyPtr: AyPtr = AyPtr + 1 a$ = "": b$ = "": RETURN LoadLabels: k = 0 DO WHILE NOT EOF(3) k = k + 1: INPUT #3, ML(G, k), Mla(G, k), MLo(G, k), Mr(G, k) LOOP: NML(G) = k RETURN CurDrwMap: CDX = CPX: CDY = CPY DrwMap: Display$ = " MP": NewMap = 0: Lredrw = TIMER IF JustW THEN Tmp$ = "DoW" 'xnrml=0 Lfac = COS(CDY / 57.296) IF LockM = -1 THEN 'meaning NONE locked MapF = 1 FOR i = 1 TO NumMaps IF ABS(CDX - LonCEN(i)) * 45 * Lfac + RS < MapMax(i) THEN IF ABS(CDY - LatCEN(i)) * 60 + RS < MapMax(i) THEN MapE = MapF: MapF = i END IF END IF NEXT i END IF: REM MapF is pointer in the MAPLIST.xxx file Dmap: Ignet = 0 MapO = MapA: MapA = -1' Entry point for ALTmap (mapE) FOR i = 0 TO UBOUND(ArrayName$)'see if mapF is in array? IF MapName(MapF) = ArrayName$(i) THEN MapA = i NEXT i IF MapA <> MapO AND NOT Borders THEN MapSize = RS IF MapA = -1 THEN GOSUB LoadAux IF NOT MapsOK THEN PRINT "Can't find MAPS! Did you use PKUNZIP -d when you installed APRS???" STOP END IF IF RS > 8192 THEN RS = 8192 IF RS < .125 AND ppd(G) < 2400 THEN RS = .125 IF RS < .03125 THEN RS = .03125 REM IF NOT In3D AND RS > MapSize THEN MapSize = RS GOSUB PlotLines: REM MapA is index in the TEMPORARY array GOSUB ShowMaps IF CapGd <> 2 THEN CALL GridCap(MapMax(MapF)) IF Drings THEN CALL DFrings(RingSel) 'Also sets Prings=3 IF PreKey$ = "" THEN GOSUB PlotUnits IF Hooked > -1 THEN CALL HkMap IF NewUser THEN CALL NewQTH(Dflt) IF Temp$ <> "" THEN CALL PL118("Displaying ONLY SELECTED Symbols", 14)'not Xnrml D3: CALL D3andCUR CPX = CDX: CPY = CDY: CALL PlotCur(LL$) GOSUB Mcen IF RS < 128 AND Ext$ <> "" THEN LOCATE Bln - 1, 2: PRINT Ext$; LINE (0, L23)-(288, L24B), 15, B END IF CALL LineIT(WPS, WPP) RETURN PlotLines: IF Ovrly = 0 THEN IF MSp AND CSp = 0 THEN SCREEN , , 1, CSp: CSp = 1 CLS : CUX = 0: CUY = 0 IF MSp THEN SCREEN , , 1, 1 END IF IF LockM <> -1 THEN MapA = LockM IF Allon = 0 THEN CALL RangeRings(1, rng) G = MapA Sfac = 50 * 200 / RS 'if NOT 50 then CHG Mile Line, 196 above, & X/Yval Hfac = 1.3714 * Lfac' (640 / 350) * (3 / 4) * Lfac CK = Sfac * Yfg 'used in cursor key lines IF Ralrm THEN yo = Sfac * Ralrm xo = yo * 1.3714 'Hfac above 1.37 = 70/51???? c = 8: IF RadrR THEN c = 14 IF RadrALL THEN c = 12 IF Doz = 0 THEN x1 = Xval(MyLON) y1 = Yval(MyLAT) LINE (x1 - xo, y1 - yo)-(x1 + xo, y1 + yo), c, B IF ScrnType >= 8 THEN PAINT (x1, y1), 8, c END IF END IF YF = Sfac / ppd(G) XF = Sfac / ppd(G) * Hfac xo = Xval(LONa(G) + Ofw / 120000) yo = Yval(LATa(G) + Ofn / 120000) CALL PL1(ArrayName$(MapA), 15) CALL GetDTG IF Allon = 0 OR RS < 900 / ppd(MapA) OR Ovrly = 1 THEN GOTO Skpp'Was or P/Drings IF RS > M1rs / 2 THEN CIRCLE (Xval(SvLON(1)), Yval(SvLAT(1))), Sfac * M1rs / 51, 1 IF County THEN CALL Counties(NML(G)) stst = TIMER es$ = "in PltLines" FOR i = 0 TO NMPa(G) - 1 x1 = XF * x%(G, i + 1) + xo y1 = YF * y%(G, i + 1) + yo IF In3D THEN CALL Do3D(x1, y1) IF x%(G, i + 1) <> 0 THEN IF DoIt THEN LINE -(x1, y1), LColor, , Style ELSE LColor = y%(G, i + 1): i = i + 1 DoIt = -1 SELECT CASE LColor CASE 4, 7, 12: IF NOT RdsON THEN DoIt = 0 CASE 3: IF NOT WtrON THEN DoIt = 0 CASE 6: IF NOT LinsON THEN DoIt = 0 CASE IS > 8: IF Borders OR DimCol THEN LColor = LColor - 8 END SELECT x = XF * x%(G, i + 1) + xo y = YF * y%(G, i + 1) + yo IF In3D THEN CALL Do3D(x, y) PSET (x, y), LColor Style = -1: IF LColor = 8 THEN Style = 255: IF Wrr THEN LColor = 7 PreKey$ = INKEY$: IF PreKey$ <> "" THEN i = NMPa(G) - 1 END IF NEXT i Skpp: Ovrly = 0 Usd(G) = Usd(G) + 1 CALL ShowFeatures IF LockM <> -1 THEN LINE (1, 1)-(639, L24), 15, B RETURN PlotLabls: Lfactr = RS / MapSize FOR i = 1 TO NML(G) x = Xval(MLo(G, i)) y = Yval(Mla(G, i)) r = Mr(G, i) * Lfactr a$ = RTRIM$(ML(G, i)) a = -1: IF In3D THEN CALL Do3D(x, y): IF y < 238 * yft THEN a = 0 c = LblsC IF MID$(a$, 3, 1) = "_" THEN c = 6: r = r / 2: a$ = MID$(a$, 4)'Counties IF RS > r THEN a = 0 IF a AND c THEN CALL DoLabels(x, y, a$, 0, c) NEXT i es$ = "PlotLabels>" RETURN PlotUnits: FOR i = 0 TO lineP CALL Drawunit(0, i, Tmp$, 0, 0, O)'(r, Pp, Tmp$, cc, Live, ons) NEXT i RETURN Tcur: CYT = 4.5 * yfc: CurInc = 0 IF Fa > 0 AND Fa <= 4 THEN CurInc = Box - 4 LINE (0, Box * yfc)-(639, (Box + 1) * yfc), 14, B GOSUB Kcur IF Fa = 1 THEN GOSUB HKltst ELSEIF Fa <= 4 THEN GOSUB HKpos END IF ELSE GOSUB Kcur END IF RETURN Ycur: CurInc = SGN(Yinc) Kcur: IF INSTR("LS HE PO", LEFT$(Display$, 2)) AND Display$ <> "POS-J" THEN IF a$ = CHR$(0) + "G" THEN a$ = CHR$(0) + CHR$(81)' Convert right mouse button to PgDn ELSE CYT = CYT + CurInc * L01 CIRCLE (CPXT, CPYT), 4, 0 ' Erase old cur on L/Plists CPYT = CYT: CPXT = CXT: CIRCLE (CXT, CYT), 4, 14 ' draw new END IF IF CYT > (Bln - 3) * L01 THEN b$ = "Q": GOSUB CkPage IF CYT < 4.5 * yfc THEN b$ = "I": GOSUB CkPage ELSE CPY = CPY - Yinc / CK CPX = CPX - Xinc / CK CALL PlotCur(LL$) END IF RETURN Hook: IF LEFT$(Display$, 2) = "PO" THEN GOSUB HKpos IF LEFT$(Display$, 2) = "LS" THEN GOSUB HKltst IF LEFT$(Display$, 3) = " MP" THEN CALL HkMap IF PM > -1 THEN CALL OutGGA(PM, 0) RETURN HKltst: CALL DoLPcur(LM, CYT, StrtL, Ptr) IF LM < 0 OR LM > LineL THEN RETURN FindP (LEFT$(LS(LM), 9)): IF PM > -1 THEN CALL HookedDisp(PM) CALL PR(c$, "L-LIST HOOKED COMMANDS: All packets, Create posit, Delete, HOMEmap, Send") IF c$ = "S" AND PM > -1 THEN Hooked = PM: CALL SendaMsg IF c$ = "D" AND LM > 0 THEN CALL DeleteLTST LOCATE Ptr, 1 IF Display$ = "LSL" THEN CALL PrintL(LM, EndL) CYT = CYT - CurInc * L01: GOSUB Kcur END IF Call$ = LEFT$(LS(LM), 9): CALL FindP(Call$) IF (c$ = "H" OR c$ = CHR$(0) + "G") AND PM <> -1 THEN GOTO CenternDrw IF c$ = "A" THEN CALL AllHdr: CALL DispALL(LS(LM)) IF c$ = "C" THEN IF PM <> -1 THEN GOTO CenternDrw 'OOOPS! No return to this IF... CALL AddP(Call$): GOSUB DrwMap GOSUB Hookit END IF a$ = "": CALL PL25("", 0) RETURN CenternDrw: CALL HookedDisp(PM) CALL PlotCur(LL$) 'CALL ParseA(PS(PM), TY$, LA, LO, sym$) 'IF LO <> 0 AND LA <> 0 THEN CPX = LO: CPY = LA IF Key$ <> "G" THEN CDX = CPX: CDY = CPY: GOSUB DrwMap CALL HookedDisp(PM) RETURN HKpos: CALL DoLPcur(PM, CYT, StrtP, Ptr) IF LEFT$(Display$, 2) <> "PO" OR PM < 0 OR PM > lineP THEN RETURN CALL HookedDisp(PM) CALL PR(c$, "Alarm, Delete, Edit, HOME, Move, Purge, Radar, Special, Track, UPlink, WayPT") CurInc = 1 ' So cursor incs down after CALL ParseA(PS(PM), TY$, LA, LO, sym$) c = 15: Px$ = MID$(PS(PM), 10, 1) IF c$ = "M" THEN GOSUB DrwMap: GOTO Hookit IF c$ = "H" OR c$ = CHR$(0) + "G" THEN CALL CkRS(sym$): GOTO CenternDrw SELECT CASE c$ CASE "P": BEEP: CALL PR(a$, "Are you Sure (Y)") IF a$ = "Y" THEN StrtP = 0: FOR i = 1 TO PM: CALL DeletePOS(1): NEXT: Ptr = 0 CASE "E": LL$ = MID$(PS(PM), 19, 18): CALL AskLL(LL$): GOSUB POSCOR CASE "U": IF TY$ = "+" THEN TY$ = "*" ELSE TY$ = "+": c = 14 IF Upload THEN DcayO%(PM) = 8: NxOBJ(PM) = TIMER END IF MID$(PS(PM), 11, 1) = TY$ CASE "A", "S", "T", "R", "W", "I": Alarm = -1 IF Px$ <> c$ THEN Px$ = c$ ELSE Px$ = " " CASE "D" IF PM > 0 THEN CALL DeletePOS(PM): IF EndP > lineP THEN EndP = lineP IF Ptr THEN LOCATE Ptr, 1 IF Display$ = "POS" THEN CALL PrintP(PM, EndP) IF Display$ = "POH" THEN CALL HearDisp("") IF Display$ = "POD" THEN CALL DispDigi("") CYT = CYT - CurInc * L01 END IF END IF END SELECT a$ = "": CALL PL25("", 0) MID$(PS(PM), 10, 1) = Px$ IF Ptr THEN LOCATE Ptr, 1: ' GOSUB Kcur IF Display$ = "POS" THEN CALL Cprint(PS(PM), 13, 0)'was 78 GOSUB Kcur ELSE GOSUB Posits END IF RETURN Hookit: Hooked = PM: CALL HookedDisp(PM) RETURN POSCOR: REM Have PM; and LL$ from PlotCur PosS = PS(PM): adj$ = MID$(PosS, 27, 1) IF LL$ <> "" THEN MID$(PosS, 19) = LL$ MID$(PosS, 27) = adj$ IF a$ <> "M" THEN CALL PosChange(PosS, a$): IF a$ <> "Y" OR Lok THEN RETURN IF PM > 0 THEN MID$(PosS, 11, 1) = "+" IF PM = 0 AND NewUser THEN NewUser = 0 Posin: 'PM must be pointing to new one GOSUB LogP DcayO%(PM) = 5: NxOBJ(PM) = TIMER IF PM = 0 THEN DecayP = 5: NxPos = TIMER Hooked = -1: CALL HookedDisp(PM) RETURN Replay: Fault = 0: Ans$ = "F": Prings = 0: Drings = 0 IF Nlog THEN CALL PRa("", "Close NMEA LOG first."): RETURN OPEN F$ FOR INPUT AS #4: pt = .15: Display$ = "none" IF Fault <> 0 THEN CALL PRa("", "FILE ERROR!"): RETURN IF d = -1 THEN DO UNTIL LEFT$(r$, 2) = "p," 'skip over LATEST to posits LINE INPUT #4, r$ LOOP END IF Trace: DRwas = DRon CALL PR23("", Rcall$, "Enter one Call to TRACK, or hit ENTER to see all", 0) IF MSp THEN SCREEN , , 1, 1: CSp = 1 ELSE GOSUB DrwMap Display$ = " MP" k$ = "": OK = 1: j = 0: pt = .4: Pse = 0: CALL ReplayText(k$, Pse, pt) DO WHILE OK IF Fault <> 0 THEN LOCATE Bln - 10, 40: PRINT "MAP not FOUND!" IF Pse = 0 THEN IF Ans$ = "F" THEN LINE INPUT #4, r$: IF d = -1 AND LEFT$(r$, 2) <> "p," THEN EXIT DO IF d = -1 THEN r$ = MID$(r$, 3) 'IF D = 13 THEN CALL NMEAtoHST(r$) 'removed in 728 IF MID$(r$, 30, 1) = "." THEN r$ = LEFT$(r$, 10) + MID$(r$, 18) ELSE j = j + 1: IF j >= LineTH THEN OK = 0 ELSE r$ = RTRIM$(TH(j)) END IF ELSE LOCATE 1, 51: PRINT " PAUSE! Hit (P) to continue " END IF IF UCASE$(LEFT$(r$, LEN(Rcall$))) = Rcall$ THEN LOCATE Bln, 1: PRINT LEFT$(r$ + " ", 79); CALL ParseA(r$, TY$, LA, LO, sym$) IF LEN(Rcall$) > 1 THEN CALL ReCntr(r, LA, LO): IF r THEN GOSUB DrwMap DRon = 0 PS(Pmax) = r$ CALL Drawunit(1, Pmax, Tmp$, 0, 0, O)' r=1 => erase old leader k$ = UCASE$(INKEY$) IF k$ <> "" THEN CPX = LO: CPY = LA: b$ = MID$(k$, 2): GOSUB CkPage CALL ReplayText(k$, Pse, pt) IF k$ = " " THEN GOSUB DrwMap IF k$ = "D" THEN Dots = NOT Dots IF k$ = "R" THEN RCntr = -1 END IF Pause (pt) END IF IF Ans$ = "F" THEN OK = NOT EOF(4) IF k$ = "Q" THEN OK = 0 LOOP CLOSE #4: c = Bgc: CALL PL24("", c) CPX = CDX: CPY = CDY DRon = DRwas: Dots = 0 GOTO NexTime MoreLong: T = 4: GOTO More MoreShort: T = 1 More: j = 1: a = 0: Strtime = TIMER DO WHILE j > 0 AND a = 0 IF ABS(TIMER - Strtime) >= T THEN j = 0: a$ = Astr$: Astr$ = "": EXIT DO a = INSTR(Astr$, CHR$(13)) IF a > 0 THEN a$ = LEFT$(Astr$, a - 1): Astr$ = MID$(Astr$, a + 1): EXIT DO IF LOC(1) > 0 THEN Astr$ = Astr$ + INPUT$(LOC(1), 1) LOOP DO WHILE LEFT$(a$, 1) < " " AND LEN(a$) > 0 IF LEFT$(a$, 1) = CHR$(2) THEN EXIT DO a$ = MID$(a$, 2) LOOP RETURN Latest: CALL LTSTdisp CXT = 131: GOSUB Tcur RETURN Posits: CALL POSIThdr CALL SetPage(StrtP, lineP, EndP) CALL PrintP(StrtP, EndP) CXT = 75: GOSUB Tcur' cursorTXT origin RETURN WhenHrd: CALL HearDisp("") CXT = 76: GOSUB Tcur RETURN ViaChange: PRINT #1, CHR$(3); : Pause (.5) 'new 843 CALL ShowSetup GOSUB GetUN CALL PR23(PBvia$, c$, "Enter a new path", 1) IF LEFT$(c$, 2) = " V" THEN CALL PIRNT(Unstr$ + c$) ELSEIF c$ = "" THEN 'OR MScat THEN CALL PIRNT(Unstr$) ELSEIF c$ <> "" THEN CALL PIRNT(Unstr$ + " VIA " + c$) END IF Pause (.2 + .003 * LEN(c$)): GOSUB GetUN Pause (.02): CALL PIRNT("conv") CALL ShowSetup CALL Clearbuf RETURN GetUN: CALL Clearbuf: Astr$ = "" CALL PIRNT("UN"): GOSUB MoreShort IF LEN(a$) < 8 THEN GOSUB MoreShort v = INSTR(7, UCASE$(a$), "VIA") - 1 IF v > 11 AND v < 21 THEN PBvia$ = MID$(a$, v) ELSE PBvia$ = "" RETURN CkPakTime: IF TIMER < Ltime THEN ' Fix at MIDNITE! NxBCN = DecayB: NxPos = DecayP FOR i = 1 TO mss: NxMsg(i) = DecayM(i): NEXT FOR i = 1 TO lineP: NxOBJ(i) = DcayO%(i): NEXT i IF Dsave THEN F$ = "BAKS\MN" + RIGHT$(DATE$, 2) F$ = F$ + MID$(DATE$, 1, 2) + MID$(DATE$, 4, 2) + ".BK" GOSUB SaveNet END IF END IF Ltime = TIMER IF XMTon OR Key$ = "X" THEN GOSUB SendBCN CALL SendPos GOSUB SendAllObjs CALL SendMsgs("") END IF: Key$ = "" IF NewMsg = 0 AND ReDrw AND ABS(TIMER - Lredrw) > ReDrwT AND Display$ = " MP" THEN GOSUB DrwMap RETURN SendAllObjs: NxOBJ = TIMER + 600: OBJ = 0 FOR i = 1 TO lineP IF INSTR("+_", MID$(PS(i), 11, 1)) THEN CALL SendObject(i) NEXT i RETURN SendBCN: IF TIMER > NxBCN OR Key$ = "X" THEN IF Space OR Gdfmt THEN 'CALL Xmit(1, ">" + Grid$ + " " + MID$(LS(0), 26)) CALL Xmit(1, ">" + Grid$ + MID$(PS(0), 37, 1) + " " + MID$(LS(0), 26)) 'CALL Xmit(1, "]" + MID$(PS(0), 37, 1) + "[" + MID$(LS(0), 26)) ELSEIF UCASE$(MID$(LS(0), 26, 4)) = "NONE" THEN ELSE IF Key$ <> "X" AND ZipLan = 0 THEN PRINT #1, CHR$(3); : Pause (.1) GOSUB MoreShort IF a$ = "" THEN CALL PIRNT(""): GOSUB MoreShort IF RIGHT$(a$, 4) <> "cmd:" THEN CALL PL1("TNC not responding ", 12) CALL PIRNT("MYCALL " + RTRIM$(LEFT$(PS(0), 9))): GOSUB MoreShort CALL PIRNT("D"): GOSUB MoreShort CALL PIRNT("BT !" + RTRIM$(MID$(PS(0), 19, 19)) + "APRS QRT @" + ZTG$) CALL Pause(.1) GOSUB MoreShort CALL PIRNT(Unstr$ + PBvia$): CALL Pause(.1): Via$ = PBvia$ CALL PIRNT("conv") END IF CALL Xmit(2, MID$(LS(0), 18)) END IF CALL IncPrd(DecayB, 2.1, 1, 1, NxBCN) END IF RETURN RcvPKT: 'DO WHILE LOC(1) > 0 'new 825 IF LOC(1) > 0 THEN IF hsp AND Trial AND NoGPS = 0 THEN CALL HSPtest 'new 825 IF WXon THEN b$ = INPUT$(LOC(2), 2) NewPkt = 0: DoPOS = 0: DoLTST = 0: DoTEMP = 0: REM Forces TEMP on VTG s25$ = "Hrd:" GOSUB MoreShort a = -1: LstPkt = TIMER DO WHILE a <> 0 a = INSTR(a$, CHR$(10)) IF a THEN a$ = LEFT$(a$, a - 1) + MID$(a$, a + 1) LOOP 'IF SPM <> 0 AND Display$ = "SATS" THEN 'removed 861 ' CALL DoSATS(1, a$) '" 'ELSEIF Modem THEN CALL DoTel(a$, PreKey$) IF a = 24637 THEN 'never true ELSE IF LEN(a$) > 2 THEN v$(vp) = a$: vp = vp + 1: IF vp > 12 THEN vp = 0 PpmN = -1: Pcntr = Pcntr + 1 CALL DoRcvPkt(a$, Pos$, EndB) PpmP = PM 'save it since may need to do Pnow, Ptemp and Ppos as same time IF PpmN > -1 THEN PM = PpmN: PpmN = -1: PosS = Pnow$: GOSUB LogP IF DoTEMP THEN PM = PpmT: PpmT = -1: GotP = 0: PosS = Ptemp$: Ptime = 0: GOSUB LogP IF DoPOS AND PpmP > -1 THEN PM = PpmP: PpmP = -1: PosS = Pos$: GOSUB LogP REM had been if PpmP>0 to protect your own posit.... IF PM = WPP OR PM = WPS THEN CALL LineIT(WPS, WPP) END IF 'LOOP 'new 825 END IF RETURN LogP: IF PM < 0 THEN RETURN DoPOS = 0 b = INSTR(11, PosS, "%") 'This IS NOT WORKING! ERROR IS BEFORE HERE c = INSTR(11, PosS, "&") IF (b > 0 AND b < 37) OR (c > 0 AND c < 37) THEN RETURN CALL ParseA(PosS, TY$, LA, LO, sym$) CALL CkFilter(PosS, LA, LO, acf) IF PM = 0 THEN MyLAT = LA: MyLON = LO ELSEIF Ralrm = 0 THEN ELSEIF ABS(MyLAT - LA) < Ralrm AND ABS(MyLON - LO) < Ralrm / Lfac THEN IF RadrR = 0 OR (RadrR AND MID$(PS(PM), 10, 1) = "R") THEN IF NewPkt OR RadrALL THEN Alarm = PM: MID$(PS(PM), 10) = "A" END IF END IF IF (LEFT$(Display$, 3) = " MP" OR MSp) AND Doz = 0 THEN IF MSp THEN SCREEN , , 1, CSp IF ScrnType <> 2 THEN CALL Drawunit(0, PM, Tmp$, 0, 2, O)' 2=> old plots blue IF MID$(PS(PM), 10, 1) = "T" THEN CALL ReCntr(r, LA, LO) IF r THEN GOSUB DrwMap: CALL PL118(" AUTO-TRACK MODE IS ON", 14) END IF PS(Pmax) = PosS CALL Drawunit(0, Pmax, Tmp$, 0, 1, O)' 1=> Live plots red IF MSp THEN SCREEN , , CSp, CSp END IF IF Ignet AND O = 0 THEN LOCATE Bln, 2: PRINT "Ignr"; : RETURN REM Now save in PM (since compare in CkFilter needed PM) MID$(PS(PM), 1) = LEFT$(PosS, 9) IF MID$(PosS, 10, 1) <> "%" THEN MID$(PS(PM), 11) = RTRIM$(MID$(PosS, 11)) ELSE MID$(PS(PM), 11) = MID$(PosS, 11) ' except for Px$ END IF IF acf THEN 'POSCOR and rawUII bypass? IF LineTH >= UBOUND(TH) - 1 THEN GOSUB SaveTH LineTH = LineTH + 1: TH(LineTH) = PS(PM) END IF IF Display$ = "POS" OR MSp THEN IF MSp THEN SCREEN , , 0, CSp 'es$ = "D=" + Display$ + "|" + STR$(PM) + "|" + STR$(StrtP) CALL OverWrite(PS(PM), " Pos", StrtP) IF MSp THEN SCREEN , , CSp, CSp END IF 'IF STSon THEN GOSUB Streets: LastGPS = TIMER OWPL = 0: IF MID$(PS(PM), 10, 1) = "W" THEN OWPL = -1 IF Ogga OR OWPL THEN CALL OutGGA(PM, OWPL) RETURN 'Streets: ' CALL PL118("*** outputing STREETS.GPS ***", 11) ' OPEN "temp.pos" FOR OUTPUT AS #3 ' j = 0: IF LineP > 49 THEN j = LineP - 49 ' FOR i = j TO LineP ' CALL ParseA(PS(i), TY$, LA, LO, sym$) ' IF LA <> 0 AND LO <> 0 THEN ' PRINT #3, LA, -LO, " Type"; RIGHT$(sym$, 1); " "; LEFT$(PS(i), 9) ' END IF ' NEXT i ' CLOSE #3 ' SHELL "del STREETS.GPS" ' SHELL "ren Temp.pos STREETS.GPS" 'was cpy tmp sts ' RETURN END