DECLARE SUB LineIT (P1!, P2!) DECLARE SUB ComputeDelT (T$, Del!) DECLARE SUB PIRNT (a$) DECLARE SUB HangUp () DECLARE SUB GetPorts () DECLARE SUB PL4 (a$, c!) DECLARE FUNCTION LocOK! (y!, yo!, x!, xo!, a$) DECLARE SUB PRa (a$, p$) DECLARE SUB PR2N (a!, p$) DECLARE SUB NewScrn (d$, c!, d!) DECLARE SUB Calldisp () DECLARE SUB DispDigi (js$) DECLARE SUB Format (Pos$, fs$) DECLARE SUB POScolr (a$, c!) DECLARE SUB Cprint (a$, c!, i) DECLARE SUB RdMail (a$, k!, Call$, Tcall$) DECLARE SUB CountyDo (s, L!, a$, Colr!, NML!) DECLARE SUB NxtComma (a$, k!, B$) DECLARE SUB BLNinc (Tcall$, lno) DECLARE SUB DeleteLTST () DECLARE SUB RangeRings (r!, rng) DECLARE SUB SendLine (To$, a$, m$, lno) DECLARE SUB NTSdisp (B, N!, T) DECLARE SUB SavPos (Pos$, TY$) DECLARE SUB GetDTG () DECLARE SUB ViewBox (c!) DECLARE SUB Traffic () DECLARE SUB IncPrd (Decay!, F!, m!, k!, Nxt!) DECLARE FUNCTION Valu (a$, a) DECLARE SUB HEXDEC (a$, a!, N!, d!) DECLARE SUB PL25 (a$, c!) DECLARE SUB PHrdLN (i!, d$, a) DECLARE SUB Bline (c!) DECLARE SUB DoDFpos (AZ!, nQ!, Q!, DF$, Pos$) DECLARE SUB Pwx (a$, cs$, T$, r$, br$) DECLARE SUB OutGGA (pp!, a) DECLARE FUNCTION LzN$ (a!, N) DECLARE SUB PL118 (z$, c!) DECLARE SUB PR23 (a$, B$, p$, N) DECLARE SUB HookedDisp (p!) DECLARE SUB Noise (a!) DECLARE SUB DigiDo (a) DECLARE SUB DigiFind (a$, x) DECLARE SUB LOBcal (cse!, Dist!, LO, LA, LaO!, LoO!) DECLARE SUB Xmit (a, a$) DECLARE SUB SetSubDir (SbDr$, e$) DECLARE SUB PL1 (z$, c!) DECLARE SUB PL24 (a$, c!) DECLARE SUB ReadPage (Lin) DECLARE SUB ClrScn () DECLARE SUB FileRead (a) DECLARE SUB FindP (a$) DECLARE SUB HookDspLM (c, p) DECLARE SUB ShowSetup () DECLARE SUB InitTNC (a) DECLARE SUB ParseA (a$, TY$, LA!, LO!, sym$) DECLARE SUB DeletePOS (p!) DECLARE SUB GridCap (mmx) DECLARE SUB AddBL (a$) DECLARE SUB Drawunit (r, p, Tmp$, cc, live, O) DECLARE SUB AddP (Call$) DECLARE SUB BLTNSin (a$, k!, Call$, Tcall$) DECLARE SUB SendCW (a$) DECLARE SUB OverWrite (a$, B$, FirstLine!) DECLARE SUB DoDFstring (AZ!, s!, NS!, EW!, nQ!, AZQ$) DECLARE SUB PR (a$, T$) DECLARE SUB ParseWX (p, WX$, WXrpt$, Rain, Rmt) DECLARE SUB DoLabels (x!, y!, a$, a, c) DECLARE FUNCTION Xval (x) DECLARE FUNCTION Yval (x) DECLARE SUB GridSQ (x, y, GdSq$, p) DECLARE SUB BText () DECLARE SUB SetPosRate () DECLARE SUB MailHdr () DECLARE SUB TooBad () DECLARE SUB SetPage (a, B, c) DECLARE SUB PlotCur (LL$) DECLARE SUB ControLine () DECLARE SUB GetChar (a$) DECLARE SUB GpWxVal (val$, B) DECLARE SUB DoDF (a$, AZQ$) DECLARE SUB BoxTOline (c!, p$, N) DECLARE SUB EraseCMD (j!) DECLARE SUB EraseMSG (j!) DECLARE SUB SendMsgs (a$) DECLARE SUB DrawSymbol (sym$, cse, SPD, x!, y!, c!, w) DECLARE SUB Pause (T!) DECLARE SUB FindL (a$) DECLARE SUB DispWX (j) 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$ END SUB AddBL (Sa$) Bend = UBOUND(BL) - 1 LineB = LineB + 1 IF LineB >= Bend THEN IF LastALL$ = BL(1) OR LastALL$ = "" THEN BLsave = -1 IF LastALL$ = BL(2) THEN BLsave = -1 REM also save a new LastALL in SAVEBL LineB = Bend - 1 FOR ij = 1 TO LineB - 1 BL(ij) = BL(ij + 1) NEXT ij END IF BL(LineB) = Sa$: TY$ = MID$(Sa$, 18, 1) '"ABOSPQ" SELECT CASE TY$ CASE ":" IF (Pon AND 2) = 0 THEN ELSEIF INSTR(5, Sa$, ">B") <> 0 THEN 'can b >B1, >BN1, >BLN1, > BLN1 ELSEIF INSTR(5, Sa$, " B") <> 0 THEN ELSE LPRINT RTRIM$(Sa$) END IF CASE ">", "@", "/": IF Pon AND 8 THEN LPRINT RTRIM$(Sa$) END SELECT a = INSTR(19, Sa$, " %") IF a THEN Blnk = INSTR(a + 3, Sa$, " ") - 2 IF Blnk <= a THEN Blnk = LEN(Sa$) - 1 s$ = MID$(Sa$, a + 2, Blnk - a) CALL SendCW(s$) END IF END SUB SUB AddL (Call$) S25$ = "Add:" LineL = LineL + 1 IF LineL >= Lmax THEN LineL = Lmax: LM = 1: CALL DeleteLTST LM = LineL LS(LM) = Call$ + " " + DTGs$ + " " END SUB SUB AddP (Call$) STATIC Donit NewPkt = -1 LineP = LineP + 1 'IF MID$(S25$, 4, 1) <> "-" THEN S25$ = "Add:" IF LineP >= Pmax THEN LineP = Pmax T$ = MID$(PS(2), 11, 8): CALL ComputeDelT(T$, Del) IF MID$(PS(2), 10, 1) <> " " OR Del < 1.4 THEN CALL DeletePOS(999): PS(LineP) = PS(1) END IF CALL DeletePOS(999) IF LocFil < 41 AND LocFil > 22 THEN LocFil = .97 * LocFil IF NOT Donit AND DOZ = 0 THEN LOCATE Bln - 3, 2 PRINT "Arrays full. Beginning to overwrite old stns. Use APRSmax.EXE for more room." LINE (0, L21)-(639, L22), 14, B END IF Donit = -1 ELSE CALL SendCW("N") END IF PM = LineP PS(PM) = Call$ + " @" + ZTG$ + "0000.00N/00000.00W/" HL(PM) = " " + SPACE$(22) DG(PM) = " " NxOBJ(PM) = 0: DcayO%(PM) = 8 END SUB SUB AltBText CALL BText: p$ = "Enter your STATUS text" CALL PR23("", a$, p$, 1) 'p$ for LCase IF p$ <> "" AND Lok = 0 THEN MID$(LS(0), 1, 17) = Uid$ + " " + DTGs$ MID$(LS(0), 18) = ">" + ZTG$: REM was only if not grid ] MID$(LS(0), 26) = p$ + SPACE$(53) CALL BText: DecayB = 8: NxBCN = TIMER LM = 0: CALL OverWrite(LS(0), " Bcn", StrtL) CALL AddBL(LS(0)) END IF END SUB SUB AskCfigEXT (Cfig$) LOCATE Bln - 1, 1 PRINT " You may specify a 3 char extension to your CFIG filename so that when you"; LOCATE Bln, 1 PRINT " invoke APRS from DOS, you can use a /XXX switch to choose your CFIG file."; LINE (0, L23)-(639, L25), 14, B CALL PR23("APR", a$, "Enter an alternate CFIGfile extension (ie, GPS,WX,HF,MOB, etc)", 0) IF LEFT$(a$, 1) = "/" THEN a$ = MID$(a$, 2) a = INSTR(Cfig$, ".") Cfig$ = LEFT$(Cfig$, a) + LEFT$(a$ + " ", 3) END SUB SUB AskLL (LL$) IF RS >= 4 THEN MID$(LL$, 7) = " ": MID$(LL$, 17) = " " IF RS >= 32 THEN MID$(LL$, 6) = " ": MID$(LL$, 16) = " " IF RS >= 256 THEN MID$(LL$, 4) = " . ": MID$(LL$, 14) = " . " IF RS >= 2048 THEN MID$(LL$, 3) = " . ": MID$(LL$, 13) = " . " DO CALL PR23(LEFT$(LL$, 8), a$, "Latitude", 0) IF a$ <> "" THEN MID$(LL$, 1) = "00 . ": MID$(LL$, 1) = a$ CALL PR23(MID$(LL$, 10), a$, "Longitude", 0) IF a$ <> "" THEN MID$(LL$, 10) = "000 . ": MID$(LL$, 10) = a$ IF INSTR("EW", RIGHT$(LL$, 1)) = 0 THEN GOTO Skpl: IF LEN(LL$) = 18 AND VAL(MID$(LL$, 10, 1)) < 2 THEN EXIT DO Skpl: CALL PRa("", "BAD FORMAT! Include leading zeros... and N/S or E/W" + CHR$(7)) CALL Pause(2) LOOP END SUB SUB BLNinc (Tcall$, lno) IF LEFT$(Tcall$, 3) = "BLN" THEN lno = 0 MID$(Tcall$, 4) = CHR$(ASC(MID$(Tcall$, 4, 1)) + 1) IF MID$(Tcall$, 4, 1) > "Z" THEN MID$(Tcall$, 4, 1) = "0" END IF END SUB SUB BoxTOline (c, p$, N) LOCATE Bln - 3 - nmg, 1 PRINT p$; LINE (296, Strt)-(464, Strt + L01 * nsl), 7, B LINE (0, Strt)-(639, Strt + L01 * nsl), c, B CALL Noise(2) LOCATE Bln - 3 - nmg, N END SUB SUB BText CALL PL24(" Status Text is: " + LEFT$(MID$(LS(0), 18), 63), 10) END SUB SUB CalcPWD END SUB SUB ControLine LOCATE Bln - 1, 1 IF TNCon = 0 THEN XMTon = 0 IF XMTon THEN PRINT " XMT "; ELSE PRINT " xmt "; IF LogF THEN a$ = "| LOG " ELSE a$ = "| log " IF NoSPD THEN PRINT "| QRT "; ELSE PRINT a$; IF Upload THEN PRINT "|UP"; ELSE PRINT "|up"; a$ = "|..." IF CmpFmt = 3 THEN a$ = "|3rd" IF CmpFmt = -1 THEN PRINT "|CMP"; ELSE PRINT a$; IF DRon THEN PRINT "|DR"; ELSE PRINT "|dr"; IF CWon THEN a$ = "| CW " ELSE a$ = "| cw " IF CWfreq THEN PRINT "|FREQ"; ELSE PRINT ; a$; IF Filoff THEN PRINT "|pfl"; ELSE PRINT "|PFL"; IF Ignore THEN a$ = "|*SPCL*" ELSE a$ = "| APRS " IF OnlyBcns = 0 OR Space OR MScat THEN a$ = "| OTHR " IF war THEN a$ = "| WAR! " PRINT a$; IF HF THEN a$ = "HF ": ELSE a$ = "VHF " IF Dual THEN PRINT "| 2*"; a$; ELSE PRINT "| "; a$; IF Fade THEN PRINT "|FADE"; ELSE PRINT "|fade"; a$ = PBvia$: IF ZipLan = -1 THEN a$ = " ON ZIPLAN" PRINT "|"; MID$(a$ + " ", 2, 28); LINE (0, L23)-(639, L24B), 12, B END SUB SUB ControlsMEN (a$) CALL ControLine CALL PR(a$, "CONTROLS: Bands>, Cw, DR, Filters>, Metric, Log, Xmt, Uplnks, War!") SELECT CASE a$ CASE "W": war = NOT war CASE "F" CALL PR(a$, "FILTERS: Fade-gray, HFgate, Ignore, Junk, Limit, PosFltr, Other/APRS, WayPTS") SELECT CASE a$ CASE "A": OnlyBcns = -1 CASE "I": Ignet = -1 CASE "J" Junk = NOT Junk IF Junk THEN CALL PRa("", "The JUNK filter will slow packet processing. May be a problem on slow PC's...") CASE "L": CALL PR2N(LocFil, "LIMIT Digi Path length (4 to 62, but 21-40 Auto-adjusts))") CALL DispDigi("") CASE "F": CALL PR2N(Fade, "Enter Fade time (80 minutes is standard)") IF Fade = 0 THEN FadeTime = TIMER CASE "P": Filoff = NOT Filoff CASE "H": Gfltr = NOT Gfltr: CALL ShowSetup CASE "O": OnlyBcns = NOT OnlyBcns CASE "W": Wpts = NOT Wpts END SELECT CASE "M": Metric = NOT Metric CASE "D": DRon = NOT DRon CASE "L": LogF = NOT LogF CASE "U": Upload = NOT Upload CASE "X": XMTon = NOT XMTon: IF XMTon THEN QRX = 0 CASE "C" CALL PR(B$, "CW COMMANDS: Enable, Disable, Setspeed, Test") IF B$ = "E" THEN CWon = -1 IF B$ = "D" THEN CWon = 0 IF B$ = "T" THEN CALL SendCW("test de " + RTRIM$(LEFT$(PS(0), 9))) IF B$ = "S" THEN CALL ShowSetup CALL PR2N(WPM, "Speed in WPM") CALL ShowSetup END IF CASE "B" CALL PR(a$, "BANDS: 2PORT, HF, VHF") IF a$ = "H" THEN HF = -1: a = 0 IF MID$(PBvia$, 6, 5) = "RELAY" THEN PBvia$ = "": a = 1 IF KAM OR TNC = -1 OR a THEN CALL InitTNC(0) ELSEIF a$ = "V" THEN HF = 0: a = 0 IF PBvia$ = "" THEN PBvia$ = " VIA RELAY": a = 1 IF KAM OR TNC = -1 OR a THEN CALL InitTNC(0) ELSEIF a$ = "2" THEN Dual = NOT Dual END IF END SELECT CALL ShowSetup END SUB SUB Counties (NML) 'in DoLabels: IF MID$(a$, 3, 1) = "_" THEN a$ = MID$(a$, 4) 'Counties 'This in RdMail: 'X$ = "!WARN ?WATCH+ADVIS-CANCL=TEST *DRILL" 'Counties 'a = INSTR(X$, MID$(a$, k + 5, 5)) 'IF a THEN MID$(Mail(Lnr), 12, 1) = MID$(X$, a - 1, 1) a$ = "!04?06+02*05=01-00" c = Lnr FOR i = 1 TO mss c = c + 1: IF c > mss THEN c = 1 a = INSTR(a$, MID$(Mail(c), 12, 1)) IF a AND MID$(Mail(c), 13, 6) > DTG$ THEN Colr = VAL(MID$(a$, a + 1, 2)) k = 13 FOR j = 1 TO 7 'was 5 for counties only CALL NxtComma(Mail(c), k, Cty$) L = LEN(Cty$) IF MID$(Cty$, 3, 1) = "_" THEN CALL CountyDo(1, L, Cty$, Colr, NML) NEXT j END IF NEXT i END SUB SUB CountyDo (s, L, a$, Colr, NML) IF MID$(a$, 4, 5) = "STATE" THEN a$ = LEFT$(a$, 3): L = 3' 4 state warn TS$ = LEFT$(a$, 3) + "STATE" 'for big maps FOR z = 1 TO NML IF MID$(ML(g, z), s, L) = a$ OR LEFT$(ML(g, z), 8) = TS$ THEN x = Xval(Mlo(g, z)) y = Yval(Mla(g, z)) r = Mr(g, z) / 2 CIRCLE (x, y), Sfac * r / 51, Colr IF ScrnType <> 2 THEN PAINT (x, y), Colr END IF NEXT z END SUB SUB Cprint (a$, c, i) a = INSTR("WTASR", MID$(a$, 10, 1)) IF a AND LEN(a$) > 36 THEN c = a + 9 IF ScrnType >= 8 THEN COLOR c IF RIGHT$(a$, 4) = " " AND i THEN PRINT LEFT$(a$, 75); i ELSE PRINT a$ END IF IF ScrnType >= 8 THEN COLOR FGC END SUB SUB DeleteLTST LineL = LineL - 1: IF EndL > LineL THEN EndL = LineL FOR i = LM TO LineL LS(i) = LS(i + 1) NEXT i END SUB SUB DeletePOS (p) IF p = 999 THEN p = 1 ELSEIF MID$(PS(p), 11, 1) = "+" THEN CALL PR(a$, "KILL from everyone elses screen too (Y/N) [N]") END IF IF a$ = "Y" THEN MID$(PS(p), 11, 1) = "_": DcayO%(p) = 8: NxOBJ(p) = TIMER ELSE LineP = LineP - 1 FOR i = p TO LineP PS(i) = PS(i + 1) DG(i) = DG(i + 1) HL(i) = HL(i + 1) DcayO%(i) = DcayO%(i + 1) NxOBJ(i) = NxOBJ(i + 1) NEXT i IF NxWx = p THEN NxWx = -1 IF NxWx > p THEN NxWx = NxWx - 1 IF PpmT > p THEN PpmT = PpmT - 1: IF PpmT = 0 THEN PpmT = -1 IF WPP > p THEN WPP = WPP - 1 IF WPS > p THEN WPS = WPS - 1 Hooked = -1 END IF END SUB SUB DispALL (a$) LINE (136, 28 * Yft)-(384, (28 * Yft) + 4), 10, BF LOCATE 2, 22: PRINT "ONLY FROM THE STATION "; LEFT$(LS(LM), 9); LOCATE 6, 1 FOR i = 1 TO LineB IF LEFT$(BL(i), 9) = LEFT$(a$, 9) THEN PRINT RTRIM$(BL(i)) NEXT i: PRINT END SUB SUB DispDigi (js$) CALL NewScrn("POD", 6, 6) PRINT " DIGI-PATH/Header. Use JUST command to search. alt-C to clear *'s" LOCATE 4, 1: PRINT "* FROM >TO..,DIGI-1,DIGI-2,DIGI-3*....: |<= Memory truncated here" LOCATE 5, 1: PRINT "-------------------------------------------------------|------------------------"; CALL SetPage(StrtP, LineP, EndX) Strt = StrtP IF js$ <> "" THEN Strt = 1: EndX = LineP ELSE DA = -1 FOR i = Strt TO EndX DS = 0: a = INSTR(DG(i), ">") LC$ = UCASE$(LEFT$(DG(i), 1)) IF LEN(js$) > 1 AND INSTR(DG(i), js$) THEN DS = -1 ELSEIF js$ = "H" AND INSTR("HG1", LC$) THEN DS = -1 ELSEIF js$ = LC$ THEN DS = -1 END IF IF a THEN IF DA OR DS THEN PRINT LEFT$(DG(i), 1); " "; MID$(LEFT$(DG(i), a - 1) + " ", 2, 10); PRINT RTRIM$(MID$(DG(i), a, 69)) END IF ELSE PRINT "" END IF NEXT Colr = 10: IF LocFil > 40 OR LocFil < 21 THEN Colr = 12 IF ScrnType > 2 THEN COLOR Colr DL = INT(19 + LocFil) 'was 18 IF DL < 81 THEN LOCATE 6, DL IF LocFil < 40 THEN 'was 41 PRINT " <= CNTRL-FLTR-LMIT"; ELSEIF LocFil < 54 THEN PRINT " 2 THEN COLOR FGC LINE (DL * 8 - 1, L05)-(DL * 8, L23), Colr, B CALL ControLine CALL Bline(6) END SUB SUB DispWX (j) a$ = MID$(PS(j), 37) REM Wx$ = "_000/000/T000/R00o/Ultmtr-II(auto)" REM output is ccc:ss MPH 076dF x.x in B000 z$ = LEFT$(PS(j), 9) CALL Pwx(a$, cs$, T$, r$, br$) IF cs$ <> "" THEN x$ = cs$ + T$ + r$ + br$ ELSE x$ = "No WX reported" CALL PL118(z$ + x$, 9) END SUB SUB DoCalls (x, y, sym$, Del, Px$, UN$) es$ = "indocalls" 'IF y > yfc AND y < (Bln - 2) * yfc AND x > 8 AND x < 616 THEN ' yl = (y + 1) / yfc ' IF LEFT$(sym$, 1) <> "/" AND sym$ <> "\m" THEN yl = yl + 1 ' LOCATE yl, (x / 8) + 3 ' IF sym$ = "/ " OR sym$ = "\ " OR (Key$ = "J" AND Del > 2) THEN ' ELSEIF Px$ = " " AND Key$ = "*" THEN ' supresses all but # ' ELSE PRINT LEFT$(RTRIM$(UN$), (616 - x) / 8); ' END IF 'END IF IF LEFT$(sym$, 1) <> "/" AND sym$ <> "\m" THEN yo = 1 IF LocOK(y + 1, yo, x, 3, UN$) THEN IF Px$ = " " AND Key$ = "*" THEN ' supresses all but # ELSE PRINT UN$ END IF END IF END SUB SUB DoDFpos (AZ, nQ, Q, DF$, Pos$) r = INT(.00001 + LOG(RS) / LOG(2)): r$ = MID$(STR$(r), 2, 1) AZ = DFhdg + AZ ' Add to vehicle HEADING IF AZ > 360 THEN AZ = AZ - 360 IF AZ = 0 THEN AZ = 1 AZQ$ = LzN$(AZ, 3) + "/" AZQ$ = AZQ$ + MID$(STR$(nQ), 2, 1) + r$ + MID$(STR$(Q), 2, 1) MID$(Pos$, 37) = "\" MID$(Pos$, 45) = "/" + AZQ$ + DF$ CALL PL118("DF Bearing and Hits-Quality = " + AZQ$, 13) IF SPM AND VAL(MID$(Pos$, 42, 3)) <> 0 THEN CALL SavPos(Pos$, " *") END SUB SUB DoLabels (x, y, a$, F, c) es$ = "in dolabels" REM f is an offset of 1 for labels for boxes (maps and grids) REM to move them up a little (off the bottom line) x$ = LEFT$(a$, 1) IF x$ = "$" THEN xc = 3: MID$(a$, 1) = "/"'Pri symbol IF x$ = "#" THEN xc = 4 'Alt symbol IF xc THEN c$ = MID$(a$, xc, 1) IF c$ >= "A" AND c$ <= "F" THEN c = ASC(c$) - 55 ELSE c = VAL(c$)'color IF c = 0 THEN c = 7 CALL DrawSymbol(MID$(a$, xc - 2, 2), 0, 0, x, y, c, 0) a$ = MID$(a$, xc + 1) END IF IF LocOK(y, -F, x, -LEN(a$), a$) THEN CALL Cprint(a$, c, 0) 'IF y > 2 * yfc AND y < (Bln - 2) * yfc THEN 'IF x < 632 AND x > 8 * (LEN(a$) + 1) THEN 'LOCATE y / (yfc) - F, (x / 8) - LEN(a$) 'CALL Cprint(a$, c,0) 'END IF 'END IF END SUB SUB DoLPcur (m, CYT, Strt, Ptr) m = Strt - 1 + INT((CYT - 4.5 * yfc + 2) / (L01)) Ptr = 6 + m - Strt: IF Ptr < 6 OR Ptr > Bln - 3 THEN m = -2 REM M of -2 is just meant to abort the whole thing END SUB SUB EraseCMD (j) IF Lok = 0 THEN CALL ReadPage(Lin) 'moved to here in 864 from end of this routine LOCATE Lin, 1: FOR i = 1 TO nsl: PRINT i: NEXT 'Numbers them IF RIGHT$(Display$, 4) = "READ" OR Key$ = "S" THEN 'OR ScrnType = 2 THEN FOR j = 1 TO nsl ' Find next ACK a$ = UCASE$(MID$(Mst$(j), 13, 6)) IF a$ = "*ACK* " OR MID$(Mst$(j), 4, 3) = "LOG" THEN CALL EraseMSG(j): j = 99 END IF NEXT j IF j < 99 AND nsl >= 1 AND Key$ <> "S" THEN CALL PR23("", a$, "Erase which OUTGOING line number", 0) IF a$ <> "" THEN CALL EraseMSG(VAL(a$)): CALL SendMsgs("") END IF END IF ' CALL ReadPage(Lin) ' LOCATE Lin, 1: FOR i = 1 TO nsl: PRINT i: NEXT 'Numbers them END IF END SUB SUB EraseMSG (j) IF j THEN nsl = nsl - 1 FOR i = j TO nsl Mst$(i) = Mst$(i + 1) NxMSG(i) = NxMSG(i + 1): DecayM(i) = DecayM(i + 1) NEXT Ln = Bln - 3 - nmg - nsl IF Ln > 0 THEN LOCATE Ln, 1: PRINT SPACE$(80); END IF END SUB SUB FindL (Call$) LM = -1 FOR i = 0 TO LineL IF Call$ = LEFT$(LS(i), 9) THEN LM = i: i = LineL NEXT i END SUB SUB FindP (a$) PM = -1 FOR i = 0 TO LineP IF a$ = LEFT$(PS(i), 9) THEN PM = i: i = LineP NEXT i END SUB SUB GetConfig MY$ = "xx\Name: Your name\Addr: Your addr\City: Your city state zip\Phone: Your phone\" R0MIR$ = "RS0ISS,W5RRR,PCSAT,W3ADO" CALL PL1(" ", 14) Again: CALL PR23("NOCALL", Uid$, "Radio CALLSIGN", 0) IF LEN(Uid$) < 3 THEN GOTO Again Uid$ = LEFT$(UCASE$(Uid$) + " ", 9) TNCbaud = 9600: Port$ = "TNC": GPSbaud = 4800 CALL GetPorts UTC = -5: Zulu = 0 CALL PR(a$, "PC clock in (Z)ulu or (L)ocal? [L]") IF a$ = "Z" THEN Zulu = -1 CALL PR2N(UTC, "Time Zone (-5 if EST, -8 if PST etc)") CALL PR(a$, "Daylight Savings (y/N)"): IF a$ = "Y" THEN DST = -1 CALL GetDTG Display$ = " MP": CALL PlotCur(LL$)'get L/L of scrn center PS(0) = Uid$ + " @" + ZTG$ + "0000.00N/00000.00W/PHG5230" 'PHG vs Newuser in 860 LS(0) = LEFT$(PS(0), 10) + DTGs$ + ">" + ZTG$ + "NONE" CDX = 76.48: CDY = 38.98: RS = 1 'Before 864 was 0,0,8192 to Force MAPLIST default NewUser = -1: Qc = 1 'query REM new user stuff at end of POSCOR END SUB SUB GetDF (Pos$, Del, p) DO UNTIL LOC(p) < 254: a$ = INPUT$(80, p): LOOP' get buffer down to size IF LOC(p) < 8 THEN Pause (1) s = 0: NS = 0: EW = 0: R90 = 90 / 57.3 'IF DFhdg <> 0 THEN IF DFon >= 98 THEN DF$ = "/DSInc DF" strtime = TIMER DO UNTIL LOC(p) < 6 OR TIMER - strtime > 2 LINE INPUT #p, a$ a = INSTR(a$, "%") IF a = 0 THEN AZ = VAL(a$) ELSE AZ = VAL(MID$(a$, a + 1)) IF AZ < 361 THEN AZ = R90 - AZ / 57.3 NS = NS + SIN(AZ) EW = EW + COS(AZ) s = s + 1 END IF LOOP nQ = INT(4 * s / GPSprd) REM at 2 per second, this gives 8 if you get them all. ELSE DF$ = "/N7LUE DF" a$ = INPUT$(LOC(p), p) REM at 8 char/sec, there should be 8*GPSprd chars in buffer REM RETURNS AN AVERAGED AZ PLUS S-count, PLUS SUMMED NS and EW values cf = .3927' 360 / (16 * 57.3) ' Convert LED's to angle in RADIANS FOR i = 1 TO LEN(a$) AZ = 99: B$ = MID$(a$, i, 1) IF B$ >= "@" AND B$ <= "O" THEN AZ = R90 - (ASC(B$) - 64) * cf IF B$ >= "`" AND B$ <= "o" THEN AZ = R90 - (112 - ASC(B$)) * cf IF AZ < 99 THEN NS = NS + SIN(AZ): EW = EW + COS(AZ): s = s + 1 NEXT i nQ = INT(s / GPSprd) '8 Hits per second= 8 END IF IF nQ > 8 THEN nQ = 8 IF s > 0 THEN REM For a max value of 8 and 7.6 chars per sec, 8/7.6 = about 1 Q = INT(8 * (NS ^ 2 + EW ^ 2) / (s ^ 2)): REM computes deviation IF Q > 8 THEN Q = 8 AZ = ATN(NS / EW) IF EW > 0 THEN AZ = 90 - 57.3 * AZ ELSE AZ = 270 - 57.3 * AZ AZ = INT(AZ) CALL DoDFpos(AZ, nQ, Q, DF$, Pos$) IF Del > PPP THEN NxPOS = TIMER - 1 ' Force xmission now! END IF ' ELSE CALL Noise(1): CALL PRa("", "No Vehicle Heading. DF fix IGNORED.") 'END IF END SUB SUB GetFeatures (a, MapA) CALL PR(a$, "FEATURES: All, Brdrs, Calls, Dim, Headings, Labels, Roads, *RR, Water") CALL PL118("", 0) a = 1 SELECT CASE a$ CASE "": a = 0 CASE "D": DimCol = NOT DimCol CASE "W": WtrON = NOT WtrON CASE "R": RdsON = NOT RdsON CASE "*": Wrr = NOT Wrr CASE "B": LinsON = NOT LinsON CASE "C": CALL Calldisp: IF TagsON THEN a = 2 CASE "L": a = 3: CALL PR(a$, "Enter Color (0-7)"): LblsC = VAL(a$) CASE "H": LdrsON = NOT LdrsON: IF LdrsON THEN a = 2 CASE "A" Allon = NOT Allon IF Allon THEN LockM = MapA WtrON = -1: RdsON = -1: LinsON = -1 TagsON = -1: LblsC = 1: LdrsON = -1: DimCol = 0 ELSE LockM = -1: WtrON = 0: RdsON = 0 END IF END SELECT END SUB SUB GetPorts 'IF OnLine > 0 THEN CALL HangUp CLOSE OnLine = 0 ReDo: modem = 0: TNCon = 0: XMTon = 0: Oprt = 0: CALL PR(w$, "Operating Dual-ports, or Single-port [S]") 'CALL PR(w$, "Operating Dual-ports, Modem-remote, or Single-port [S]") 'IF w$ = "M" THEN ' Tc = 2: TNCbaud = 9600 ' CALL PR2N(Tc, "Modem MUST be COM1/2 (or 3 with IRQ4 or 4 with IRQ3)") ' IF Tc THEN modem = -1 'ELSE Tc = 1: CALL PR2N(Tc, "Enter TNC COM port (1,2,3,4 or 0 for none)") IF Tc THEN TNCon = -1: XMTon = -1 BEEP: CALL PR2N(TNCbaud, "TNC baudrate") CALL PR(a$, "Band HF or VHF [VHF]") IF a$ = "H" THEN HF = -1: PBvia$ = "" BEEP CALL PR(a$, "Type of TNC (AEA, Dual-Pico, KANTRONICS, PacComm, THD7, 700 or OTHER") SELECT CASE a$ CASE "A": TNC = -1 CASE "K": TNC = 3 CASE "T", "7": TNC = 4: SPM = -1: PPP = 60 CASE "D": TNC = 9: CALL PRa("", "U Must use alt-S-GPS-MODES-ESP now to set up ^E SWITCH") CASE "P": TNC = 8: 'Later >=8 means slower INIT by 2 END SELECT CALL PR(a$, "Dual band KAM (K), AEA PK-900/2232 (A) or Neither [N]") IF a$ = "K" THEN KAM = 1 IF a$ = "A" THEN KAM = 2 END IF IF w$ = "D" THEN GPScom$ = "NONE" Gc = 0: CALL PR2N(Gc, "Which other COMM port will APRS use? (1,2,3,4 or 0)") IF Gc THEN GPScom$ = "COM" + LTRIM$(STR$(Gc)) + ":" CALL PR(a$, "Type of device on " + GPScom$ + " (Df, Gps, Loran, OutGGA, WX)") SELECT CASE a$ CASE "W" WXon = -1: GPSbaud = 2400: GPSprd = 15 CALL PR23("", B$, "RainGuage in 100ths, 10ths, .2mm or none (100,10,.2 or 0)", 0) IF B$ = "100" OR B$ = "10" THEN Rain = VAL(a$) ELSE Rain = 0 IF B$ = ".2" THEN Rain = 127 'changed to b$ to avoid lockup? 861 CALL PR(a$, "Davis or Ultimeter [U]") IF a$ = "D" THEN CALL PR(a$, "With Barometer(Y/N) [N]") IF a$ <> "Y" THEN WXon = -5 ELSE WXon = -4 END IF CASE "D", "G", "L", "O" IF a$ = "D" THEN DFon = -1: GPSbaud = 2400: GPSprd = 10: PPP = 20 CALL PR(a$, "Doppler Systems (D), DFjr (J), or N7LUE [N]") IF a$ = "D" THEN DFon = 99: GPSbaud = 300 IF a$ = "J" THEN DFon = 98: GPSbaud = 4800 END IF IF a$ = "G" OR a$ = "L" THEN GPSon = -1: PPP = 180 IF a$ = "O" THEN Oprt = -1: PPP = 20 CALL PR2N(GPSbaud, "Device baudrate") CASE ELSE: GPScom$ = "NONE" END SELECT CALL SetPosRate IF Gc = Tc OR Gc * Tc = 3 OR Gc * Tc = 8 THEN Gc = 9: CALL PRa("", "*** PORT CONFLICT ***"): CALL Noise(1) END IF END IF END IF 'END IF IF Gc = 9 THEN Gc = 0: GOTO ReDo TNCcom$ = "COM" + LTRIM$(STR$(Tc)) + ":" END SUB SUB GetWX (Pos$) CALL PL118(" Getting WX station data", 13) IF WXon < -3 THEN a$ = INPUT$(LOC(2), 2) PRINT #2, "LOOP"; CHR$(255); CHR$(255) WX$ = "": CALL Pause(1) FOR i = 1 TO 1000 a$ = INPUT$(1, 2) IF a$ = CHR$(1) THEN i = 1000: FOR j = 1 TO 15: WX$ = WX$ + INPUT$(1, 2): NEXT END IF NEXT i ELSE 'WHILE LOC(2) > 19: LINE INPUT #2, WX$: WEND DO LINE INPUT #2, WX$ IF LOC(2) < 20 THEN EXIT DO LOOP LINE INPUT #2, WX$ 'get a clean one REM Wx$ = CHR$(10) + "*F189100110022" END IF L = LEN(WX$) IF L = 15 OR L = 43 OR L = 47 OR L = 51 THEN CALL ParseWX(0, WX$, WXrpt$, Rain, 0) MID$(Pos$, 37) = WXrpt$ MID$(Pos$, 12) = ZTG$ ELSEIF LEN(WX$) > 0 AND NxWx < 1 THEN CALL PL118(WX$, 13) END IF END SUB SUB GpWxVal (val$, B) IF Vusr THEN Gp = 1100 - (VAL(MID$(val$, 2, 1)) + 7) * (VAL(MID$(val$, 4, 1)) + 5) * 3 d = 1100 - (VAL(MID$(val$, 1, 1)) + 6) * (VAL(MID$(val$, 5, 1)) + 9) * 3 w = 1100 - (VAL(MID$(val$, 3, 1)) + 5) * (VAL(MID$(val$, 5, 1)) + 8) * 3 s = 3 * Gp + 5 * d + 123 * VAL(MID$(val$, 3, 1)) r = Gp + w + 7 * d + 103 * VAL(MID$(val$, 2, 1)) IF B = Gp AND (GPSon OR SPM) THEN Gval = Gp 'IF B = D AND (DFon OR DFSP) THEN Dval = D IF B = s AND STSon THEN Sval = s IF B = w AND WXon THEN Wval = w END IF END SUB SUB GridCap (mmx) STATIC Loaded 'IF LEFT$(Gc(0), 3) <> "ALB" THEN IF NOT Loaded THEN OPEN "SYSTEM\CAPGRID.dat" FOR INPUT AS #3 FOR i = 0 TO 36: INPUT #3, Gc(i): NEXT i CLOSE #3 Loaded = -1 END IF 'was if display=MP then but this caused all this code every map! IF Display$ = " MP" AND ((CapGd = 1) OR (RS <= mmx / 8 AND RS <= 16)) THEN FOR i = 0 TO 36 ' Find chart that cursor is on GA = VAL(MID$(Gc(i), 8, 5)): GG = VAL(MID$(Gc(i), 14, 5)) OA = VAL(MID$(Gc(i), 23, 2)): OO = VAL(MID$(Gc(i), 20, 2)) CA = GA - .25 * OA: CO = GG - .25 * OO' lower right corner IF CPY < GA AND CPY > CA AND CPX < GG AND CPX > CO THEN BGA = GA: BGO = GG: BOA = OA: BOO = OO: BN = i END IF xc = Xval(CO): yc = Yval(CA) IF RS > 64 AND CapGd = 1 THEN LINE (Xval(GG), Yval(GA))-(xc, yc), 14, B CALL DoLabels(xc, yc, LEFT$(Gc(i), 6), 1, 14) END IF NEXT i IF (RS <= 64 AND CapGd = 1) OR (RS <= mmx / 8 AND RS <= 16) THEN yo = CDY - INT(CDY) xo = CDX - INT(CDX) x = 0: y = 0: i = 0: j = 0 DO WHILE x < 9999 'was 9999 x = 320 + Sfac * (xo + i) * Hfac X1 = 320 + Sfac * (xo - i) * Hfac IF RS > 16 THEN styl = 0 ELSE styl = 4369 '4096+256+16+1 IF 4 * i = INT(4 * i) THEN styl = -1 LINE (x, 0)-(x, 350 * Yfg), 5, , styl LINE (X1, 0)-(X1, 350 * Yfg), 5, , styl i = i + .125 LOOP DO WHILE y < 9999 * Yfg 'was 9999 y = Ycen + Sfac * (yo + j) * Yfg Y1 = Ycen + Sfac * (yo - j) * Yfg IF RS > 16 THEN styl = 0 ELSE styl = 4369 IF 4 * j = INT(4 * j) THEN styl = -1 LINE (0, y)-(640, y), 5, , styl LINE (0, Y1)-(640, Y1), 5, , styl j = j + .125 LOOP num = 0 FOR j = 1 TO BOA y = Yval(BGA - .25 * j) FOR i = 1 TO BOO x = Xval(BGO - .25 * i) num = num + 1: num$ = RIGHT$(" " + MID$(STR$(num), 2), 3) CALL DoLabels(x, y, num$, 1, 5) NEXT i NEXT j IF RS <= 2 THEN yog = INT(8 * CDY) / 8 + .15 '.125 + 5*.005 xog = INT(8 * CDX) / 8 + .15 FOR j = 0 TO 42 y = Yval((yog - j / 240) - .002083) yn$ = MID$(STR$((j + 24) MOD 30), 2) FOR i = 0 TO 35 x = Xval((xog - i / 200) - .0025) xn$ = CHR$(65 + ((i + 20) MOD 25)) IF RS < 2 THEN CALL DoLabels(x, y, xn$ + yn$, 0, 5) PSET (x, y), 14 NEXT i NEXT j END IF END IF END IF END SUB SUB GridSQ (CX, CY, GdSq$, Plt) IF Plt THEN IF RS < 600 THEN j = 0: yo = CDY - INT(CDY) ip = 1: xo = CDX - INT(CDX) IF INT(CDX / 2) = INT(CDX) / 2 THEN i = 0 ELSE i = 1 ' Hit Even degrees ELSE j = 0: yo = 10 * (CDY / 10 - INT(CDY / 10)) ip = 10: xo = 10 * (CDX / 10 - INT(CDX / 10)) IF INT(CDX / 20) = INT(CDX / 10) / 2 THEN i = 0 ELSE i = 10 END IF: x = 0: y = 0 DO WHILE x < 9999 x = 320 + Sfac * (xo + i) * Hfac X1 = 320 + Sfac * (xo - i) * Hfac LINE (x, 0)-(x, 350 * Yfg), 1 LINE (X1, 0)-(X1, 350 * Yfg), 1 i = i + ip * 2 LOOP DO WHILE y < 9999 * Yfg y = Ycen + Sfac * (yo + j) * Yfg Y1 = Ycen + Sfac * (yo - j) * Yfg LINE (0, y)-(640, y), 1 LINE (0, Y1)-(640, Y1), 1 j = j + ip LOOP END IF' calculate grid square a = 64 + INT((180 - CX) / 20) + 1 B = 64 + INT((CY + 90) / 10) + 1 c = 48 + INT(((180 - CX) - 20 * INT((180 - CX) / 20)) / 2) d = 48 + INT(CY - 10 * INT(CY / 10)) e = 97 + INT((1 + INT(CX / 2) - CX / 2) * 60 / 2.5) F = 97 + INT((CY - INT(CY)) * 60 / 2.5) LOCATE 4, 2 GdSq$ = CHR$(a) + CHR$(B) + CHR$(c) + CHR$(d) + CHR$(e) + CHR$(F) CALL PL4("GS " + GdSq$, 10) END SUB SUB HkStep (NxP) FOR i = 1 TO LineP IF NxP > LineP THEN NxP = 0 IF NxP < 0 THEN NxP = LineP CALL Drawunit(0, NxP, Tmp$, 0, 0, ons) IF NOT ons THEN SELECT CASE Key$ CASE ">", ".": NxP = NxP + 1 CASE "<", ",": NxP = NxP - 1 CASE ELSE: i = LineP + 1 END SELECT ELSE i = LineP + 1 END IF NEXT CALL OutGGA(NxP, 0) CALL HookedDisp(NxP) IF NOT ons THEN CALL PL25(" NOTE: STATION IS OFF SCREEN. HIT HOME KEY TO RE-CENTER and RE-DRAW MAP ", 14) END IF END SUB SUB HookDspLM (c, p) LOCATE Bln - 1, 1 IF LM >= 0 THEN PRINT " Bcn: "; LEFT$(MID$(LS(LM), 18) + SPACE$(61), 73); 'was 62,74 ELSE PRINT SPACE$(80); END IF LINE (0, L22)-(639, L24B), c, B IF p > 0 THEN LOCATE Bln - 3, 18 a = INSTR(DG(p), ">") IF a THEN PRINT MID$(DG(p), a, 36); ELSE PRINT SPACE$(36); LOCATE Bln - 3, 8: PRINT LEFT$(DG(p), 1); LOCATE Bln - 3, 54 PRINT " Heard: "; CALL PHrdLN(p, d$, 6): PRINT d$ END IF LINE (0, L21)-(639, L22), c, B LINE (428, L21)-(428, L22), c END SUB SUB HookedDisp (p) STATIC HKX, HKY CALL ParseA(PS(p), TY$, LA, LO, sym$) IF LA = 0 AND LO = 0 THEN CPX = CDX: CPY = CDY ELSE CPX = LO: CPY = LA CALL PlotCur(LL$) LOCATE Bln - 3, 1 IF p = Hooked THEN c = 14: PRINT " Hooked "; ELSE c = 10: PRINT " Cursr@ "; sm$ = RIGHT$(sym$, 1) IF sm$ = "_" OR sm$ = "W" THEN c = 9 CIRCLE (HKX, HKY), 20, 0 ' erase CIRCLE (CUX, CUY), 20, c: HKX = CUX: HKY = CUY 'Draw new Hook PRINT LEFT$(PS(p), 9); SPACE$(36); LOCATE Bln - 2, 1: PRINT " Pos:"; LEFT$(MID$(PS(p), 10) + SPACE$(59), 74); 'was 60,75 CALL FindL(LEFT$(PS(p), 9)) CALL HookDspLM(c, p) IF p = Hooked THEN T$ = " HOOKED: Cancel, Delete, Edit, List-Log, Height, Move, Send, Weps" c = 14 ELSE T$ = "": c = 0 END IF CALL PL25(T$, c) IF LEFT$(Display$, 3) = " MP" THEN CALL RangeRings(0, rng) IF war THEN CALL Drawunit(0, Hooked, Tmp$, 0, 0, O) '(r, Pp, Tmp$, cc, Live, ons) END SUB SUB KillMsg IF Lok = 0 AND RIGHT$(Display$, 4) = "READ" THEN 'OR ScrnType = 2) THEN nmg = nmg - 1: IF nmg < 0 THEN nmg = 0 FOR i = 1 TO nmg: Msg$(i) = Msg$(i + 1): Dup(i) = Dup(i + 1): NEXT i Ln = Bln - 3 - nmg - nsl IF Ln > 0 THEN LOCATE Ln, 1: PRINT SPACE$(80); END IF CALL ReadPage(Lin) END SUB SUB LineIT (P1, P2) IF P1 > -1 AND P2 > -1 THEN CALL ParseA(PS(P1), TY$, LA1, LO1, sym$) CALL ParseA(PS(P2), TY$, LA2, LO2, sym$) IF LA1 AND LA2 THEN LINE (Xval(LO1), Yval(LA1))-(Xval(LO2), Yval(LA2)), 15 ELSE CIRCLE (Xval(LO1), Yval(LA1)), 15, 15 END IF END IF END SUB FUNCTION LocOK (y, yo, x, xo, a$) 'xo & yo are character offsets LocOK = 0 IF y < yfc - yo * 8 OR y > (Bln - 3) * yfc THEN ELSEIF x < 8 * (1 - xo) OR x > 640 - xo * 8 THEN ELSE LOCATE y / yfc + yo, x / 8 + xo a$ = LEFT$(RTRIM$(a$), (648 - x) / 8 - xo) LocOK = -1 END IF END FUNCTION SUB MailHdr CALL PL24(" Hit F7 to see 43 lines. Use MAPS-PLOTS-TRAFFIC command to plot QSO's", 13) CALL Bline(0) END SUB SUB NextHR IF LocFil > 20 AND LocFil < 39 THEN LocFil = LocFil + 1 ID = 0 HL(0) = CHR$(VAL(MID$(DTG$, 3, 2)) + 32) + HL(0) FOR i = 1 TO Pmax + 2: HL(i) = " " + HL(i): NEXT i IF Beamtime AND ABS(TIMER - Beamtime) > 2 * 60 * 60 THEN MID$(PS(0), 38) = "Beam heading canceled after 2 hours" Beamtime = 0 END IF REM prevent more than 2 ticks in a row IF Lnr > 0 THEN IF MID$(Mail(Lnr), 6, 1) <> "*" OR MID$(Mail(Lnr - 1), 6, 1) <> "*" THEN Lnr = Lnr + 1 END IF ELSE Lnr = 1 END IF IF Lnr > mss THEN Lnr = 1 Mail(Lnr) = "TIME * TICK:" + DATE$ + " " + TIME$ END SUB SUB ParseWX (p, WX$, WXrpt$, RainC, Rmt) REM L*F189100110022 (L=LF) REM #=KPH REM 123456789-123456789=123456789w123456789-123456789*1 REM l!!SSSSwwwwTTTTrrrrBBBBiiiiHHHHhhhhDDDDttttrrrrwwww for local (or rem) REM 0000---- -------- if missing REM $ULTWSSSSwwwwTTTTrrrrBBBBddddCCCCccccHHHHDDDDttttPPPP PACKET mode <824 REM $ULTWSSSSwwwwTTTTrrrrBBBBddddCCCCccccHHHHDDDDttttwwww PACKET mode >824 REM $ULTWSSSSwwwwTTTTrrrrBBBBddddCCCCccccHHHHDDDDttttPPPPwwww PACKET mode REM ^^^^^^^^ Optional REM K in RawUII STATIC SW, LastWX$, Pkw, LR WXrpt$ = "" Rai$ = "r...": Pcp$ = "p...": Gus$ = "g..." Lgth = LEN(WX$) IF p = 0 AND WXon < -3 AND Lgth = 15 THEN u$ = "dDvs" '**** Must match SendPos 'Tin = Valu(WX$, 1) / 10 T = CINT(Valu(WX$, 3) / 10) s = ASC(MID$(WX$, 5, 1)) w = Valu(WX$, 6) IF WXon = -4 THEN B = CINT(Valu(WX$, 8) / 2.954) '29.54/10 B = B * (1 + AGL * .00004017#) 'sealevel=1013.25mb, 4781=850mb Baro$ = "b" + RIGHT$("....0" + MID$(STR$(CINT(B)), 2), 5) H = ASC(MID$(WX$, 11, 1)): IF H < 101 THEN Humd$ = "h" + MID$(LzN$(H, 3), 2) r = Valu(WX$, 12) IF RainC AND NOT Rmt THEN r = INT(100 * r / RainC) ELSEIF Lgth = 15 THEN u$ = "dUII" Baro$ = "" Humd$ = "" CALL HEXDEC(WX$, 3, 1, w): w = INT(w * 22.5) CALL HEXDEC(WX$, 4, 2, s) 'SPD IF MID$(WX$, 2, 1) = "#" THEN s = INT(s / 1.6) CALL HEXDEC(WX$, 6, 2, T): T = T - 56 CALL HEXDEC(WX$, 12, 4, r)'rain IF r THEN Rai$ = "#" + LzN$(r, 4) IF Rmt = 14 THEN u$ = "dUIIr" IF RainC AND NOT Rmt THEN r = INT(100 * r / RainC) ELSEIF Lgth = 43 OR Lgth = 47 OR Lgth = 51 OR Lgth = 55 THEN u$ = "dU2k" CALL HEXDEC(WX$, 4, 4, s): s = CINT(s / 16) '1.6 KPHtoMPH Gus$ = "g" + LzN$(s, 3): u2knm = -1' was S=999 in 825 BUG! CALL HEXDEC(WX$, 10, 2, w): w = INT(w * 1.40625) CALL HEXDEC(WX$, 12, 4, T): T = CINT(T / 10) CALL HEXDEC(WX$, 16, 4, r) CALL HEXDEC(WX$, 20, 4, B) Baro$ = "b" + RIGHT$(" 0" + MID$(STR$(CINT(B)), 2), 5) aa = 28 IF Rmt THEN 'Rai$ = "": u$ = "dU2kr" 'Pcp$ = "#" + LzN$(r, 4) Pcp$ = "p..": u$ = "dU2kr" Rai$ = "#" + LzN$(r, 4) IF Rmt = 49 THEN 'Also 53,57 (from a shortened format different from L) aa = 36: u$ = "dUpkm" 'IF Lgth >= 51 THEN CALL HEXDEC(WX$, 48, 4, r): Rai$ = "P" + LzN$(r, 3) 'IF Lgth >= 55 THEN ' CALL HEXDEC(WX$, 52, 4, S): S = CINT(S / 16) 'END IF IF Lgth = 51 THEN ws = 48 'v825 IF Lgth >= 55 THEN ws = 52: CALL HEXDEC(WX$, 48, 4, r): Pcp$ = "P" + LzN$(r, 3) IF ws THEN u2knm = 0: CALL HEXDEC(WX$, ws, 4, s): s = CINT(s / 16) END IF END IF CALL HEXDEC(WX$, aa, 4, H): Humd$ = "h" + MID$(LzN$(H / 10, 3), 2) END IF cse$ = LzN$(w, 3): IF cse$ = "000" THEN cse$ = "360" 'SW = S IF p = 0 THEN 'ur local wx u2knm = 0 'bug fix >825 Pkw = .9 * Pkw + .1 * s IF s > Pkw AND s < 1.6 * Pkw THEN Pkw = s Gus$ = "g" + LzN$(Pkw, 3) s = .6 * SW + .4 * s 'Running Average SW = s END IF 'IF S = 999 THEN SPD$ = "..." ELSE SPD$ = LzN$(S, 3) 'bug in 825 IF u2knm THEN SPD$ = "..." ELSE SPD$ = LzN$(s, 3) 'bug FIX >825 'u2knm is a remote GPS/TNC timing out !! packets raw CSPD$ = cse$ + "/" + SPD$ IF RainC AND Rmt = 0 THEN Tmin = VAL(MID$(TIME$, 4, 1)) 'Hrn%(7)= Tmin at each 10min Thr = VAL(LEFT$(TIME$, 2)) 'Drn%(26)=Thr at each hr IF r = 0 OR Hrain%(7) = 9 THEN 'Means is newstart FOR i = 0 TO 5: Hrain%(i) = r: NEXT i: Hrain%(7) = Tmin FOR i = 0 TO 24: Drain%(i) = r: NEXT i: Drain%(26) = Thr END IF RH = r - Hrain%(Tmin): RD = r - Drain%(Thr) IF r - LR > 20 OR RH < 0 OR RD < 0 THEN WXrpt$ = "/Troubleshooting. Pass to Author: " LOCATE 15, 1: PRINT WXrpt$; r; LR; RH; RD ELSE 'was if RH >= 0 Rai$ = "r" + LzN$(RH, 3) Pcp$ = "p" + LzN$(RD, 3) IF Tmin <> Hrain%(7) THEN Hrain%(Hrain%(7)) = r: Hrain%(7) = Tmin IF Thr <> Drain%(26) THEN Drain%(Drain%(26)) = r: Drain%(26) = Thr 'ELSE Hrain%(7) = 9 'RESET if r inverted due to a reset END IF LR = r END IF IF T > 3200 THEN T = T - 6553 Ttmp$ = "t" + LzN$(T, 3) IF WXrpt$ = "" THEN WXrpt$ = "_" + CSPD$ + Gus$ + Ttmp$ + Rai$ + Pcp$ + "...." + Humd$ + Baro$ + u$ REM end of this line must be coordinated with ParsePkt()! and SENDPOS REM and letter t or / or g must be in 45th position IF PM = 0 AND (MID$(LastWX$, 14) <> MID$(WXrpt$, 14) OR SW > Wind) THEN IF ABS(NxPOS - TIMER) > PPP THEN NxPOS = TIMER - 1 REM xmt NOW if anything changes (except wind) END IF LastWX$ = WXrpt$ END IF END SUB SUB PrepTNC (c$) PRINT #1, CHR$(3); : Pause (.1) CALL ClrScn PRINT c$: PRINT LOCATE 3, 1 CALL PIRNT("FLOW on") CALL PIRNT("BK off") CALL PIRNT("Echo ON") IF LEFT$(c$, 8) = "*** CONN" THEN Pause (.2): CALL PIRNT("K") CALL PL25("*** APRS is suspended. Hit F8 to toggle HSP. To restore APRS, hit ESC ***", 7) END SUB SUB PrintL (StrtL, EndL) FOR i = StrtL TO EndL PRINT LEFT$(LS(i), 80) NEXT i IF EndL = LineL THEN PRINT SPACE$(80); END SUB SUB PrintP (StrtP, EndP) FOR i = StrtP TO EndP CALL POScolr(PS(i), c) CALL Cprint(LEFT$(PS(i), 80), c, i) NEXT i IF EndP = LineP THEN PRINT SPACE$(80); LOCATE Bln - 1, 65 PRINT " Track Mem"; INT(LineTH / 1.6); "% "; : LINE (516, L23)-(639, L24), 11, B LOCATE Bln - 2, 1 'PRINT " @= APRS, /! TNC's, *+ Objects, -_ Killed, S Special, A Alarm, T Track " 'PRINT " =@ APRS, /! TNC's, *+ OBJ's, -_ Killd, R Radar, S Spcl, A Alarm, T Track " PRINT " =@/! Posits, *+ OBJ's, -_ Killed, I Igate, R Radar, S Spcl, A Alarm, T Track " LINE (0, L22)-(639, L23), 11, B END SUB SUB Pwx (a$, cs$, T$, r$, br$) REM 123456789-123456789-1234567 REM a$ = "_ccc/sss/T000/R000/B0000/H00/UII" REM "_ccc/sssgXXXtXXXrXXXpXXXPxxxhXXb12345dUII REM out => ccc:ss MPH 076dF x.xxin B000 r$ = " " s$ = MID$(a$, 6, 3): p$ = "mph " IF Metric THEN s$ = LzN$(.5 + VAL(s$) * 1.61, 3): p$ = "kph " a = INSTR(9, UCASE$(a$), "T") T$ = MID$(a$, a + 1, 3): B$ = "F " REM Tc=(((10.45 + (6.686*sqrt((double)Spd))-(.447*Spd))/22.034*(T-91.4))+91.4) IF Metric THEN T = INT(.5 + .555 * (VAL(T$) - 32)): B$ = "C " IF T < 0 THEN T$ = STR$(T) ELSE T$ = MID$(STR$(T), 2) END IF T$ = T$ + CHR$(248) + B$ a = INSTR(9, UCASE$(a$), "D") IF a AND a < 30 THEN d$ = MID$(a$, a + 1, 3) IF Metric THEN T = INT(.5 + .555 * (VAL(d$) - 32)) IF T < 0 THEN d$ = STR$(T) ELSE d$ = MID$(STR$(T), 2) END IF r$ = "Dew" + d$ + CHR$(248) END IF a = INSTR(9, UCASE$(a$), "R") B = INSTR(9, a$, "#") c = INSTR(9, UCASE$(a$), "P") y = 0: z = a + 2 IF a AND a < 18 AND MID$(a$, a + 1, 3) <> "000" THEN r$ = "R0": x = a: y = 1 ELSEIF B AND B < 20 THEN r$ = "#": x = B: y = 2: z = B + 3 ELSEIF c AND c < 27 THEN r$ = MID$(a$, c, 1) + "0": x = c: y = 1: z = c + 2 END IF IF y THEN r$ = r$ + MID$(a$, x + 1, y) + "." + MID$(a$, z, 2) + CHR$(34) a = INSTR(9, UCASE$(a$), "B") IF a AND a < 33 THEN u = 4: L$ = "": B$ = MID$(a$, a + 5, 1) IF MID$(a$, a + 4, 1) = "/" THEN u = 3: B$ = "0" IF MID$(a$, a + 5, 1) = "h" THEN u = 3: B$ = MID$(a$, a + 4, 1) IF MID$(a$, a + 5, 1) = "g" THEN u = 3: B$ = MID$(a$, a + 4, 1) IF u = 3 THEN L$ = MID$(a$, a + 1, 1) IF L$ > "1" THEN L$ = " " ELSE L$ = "1" END IF br$ = L$ + MID$(a$, a + 1, u) + "." + B$ END IF gu = INSTR(9, UCASE$(a$), "G") IF gu THEN gu$ = MID$(a$, gu, 4) ELSE gu$ = "g..." IF MID$(a$, 5, 1) <> "/" THEN cs$ = "" ELSE cs$ = MID$(a$, 2, 3) + ":" + s$ + gu$ + p$ END IF END SUB SUB RangeRings (r, d) STATIC Lcux, Lcuy, LaO, LoO LINE (320, Ycen)-(Lcux, Lcuy), 0, , 255 LINE (320, Ycen)-(LoO, LaO), 0 es$ = "RR" IF r THEN FOR i = 1 TO 4 c = 8: IF i = 4 THEN c = 7 LOCATE (Ycen + i * 36 * Yft) / yfc, 39: x = RS: IF Metric THEN x = RS * 1.61 PRINT INT(x * i / 4) CIRCLE (320, Ycen), i * Sfac * RS / 204, c'51,68,102,204 NEXT END IF r = 180 / 3.14159 LA1 = CDY / r: LA2 = CPY / r LO1 = CDX / r: LO2 = CPX / r xj# = SIN(LA1) * SIN(LA2) + COS(LA1) * COS(LA2) * COS(LO2 - LO1) REM xj= cos(D/(60*r)) REM sin(D/(60*r))=sqr(1-xj^2) xk# = SQR(1 - xj# ^ 2) IF ABS(CDX - CPX) = 0 THEN d = 60 * ABS(CDY - CPY) ELSEIF xk# <> 0 THEN d = 60 * r * (90 / r - ATN(xj# / xk#)) xi# = (SIN(LA2) - SIN(LA1) * xj#) / (xk# * COS(LA1)) xh# = r * (90 / r - ATN(xi# / (SQR(1 - xi# ^ 2)))) a = SIN((LO2 - LO1) / r) IF a > 0 THEN AZ = 360 - xh# ELSE AZ = xh# ELSE AZ = 0: d = 0 END IF IF Metric THEN rng = d * 1.8516: x$ = "km" '1.1508*1.609 IF rng < 1.6 THEN rng = rng * 1000: x$ = "m " ELSE x$ = "mi" rng = d * 1.1508 IF rng < .2 THEN rng = rng * 5280: x$ = "ft" END IF 'LOCATE 4, 2: PRINT LzN$(AZ, 3); "o"; LEFT$(STR$(Rng) + " ", 5) + x$ CALL PL4(LzN$(AZ, 3) + "o" + LTRIM$(LEFT$(STR$(rng), 5)) + x$, 9) 'LINE (0, L03)-(96, 4 * yfc), 9, B IF CUX <> -50 AND CUY <> -50 THEN LINE (320, Ycen)-(CUX, CUY), 7, , 255 Lcux = CUX: Lcuy = CUY END IF CALL LOBcal(AZ, RS / 4, CDX, CDY, LaO, LoO) LINE (320, Ycen)-(LoO, LaO), 14 END SUB SUB RdMail (a$, k, Call$, Tcall$) IF UCASE$(MID$(a$, k + 10, 4)) <> ":ACK" THEN FOR i = 1 TO mss IF MID$(a$, k + 11, 68) = MID$(RTRIM$(Mail(i)), 13, 68) THEN i = 99 NEXT i IF i < 99 THEN Lnr = Lnr + 1: IF Lnr > mss THEN Lnr = 1 H = LEN(RTRIM$(Call$)): IF H > 9 THEN H = 9 HDR$ = LEFT$(RTRIM$(Call$) + ">" + RIGHT$(Tcall$, 10 - H) + " ", 11) Mail(Lnr) = HDR$ + ":" + MID$(a$, k + 11, 71) x$ = "!WARN ?WATCH+ADVIS*DRILL-CANCL=TEST " 'Counties a = INSTR(x$, MID$(a$, k + 5, 5)) 'new msg IF a THEN MID$(Mail(Lnr), 12, 1) = MID$(x$, a - 1, 1) IF Display$ = "TRAF" AND DOZ = 0 THEN LOCATE Bln - 1, 1: PRINT Mail(Lnr) IF Pon AND 16 THEN LPRINT Mail(Lnr) END IF END IF END SUB SUB ReplayText (k$, Pse, pt) IF k$ = "C" THEN TagsON = NOT TagsON IF k$ = "F" THEN pt = .02 'cant be less or Pause will multiply it IF k$ = "M" THEN pt = .4 IF k$ = "S" THEN pt = 1.6 IF k$ = "P" THEN Pse = NOT Pse 'IF k$ = " " THEN Pse = Pse: REM Just re-draw CALL PL1("* REPLAYING TRACKS *", 11) z$ = " REPLAY CMDS: PgUp/Dn, HOME, Dots, Calls, Fast, Med, Slow, Pause, Quit " CALL PL24(z$, 11) END SUB SUB ReplayTxt (d) STATIC FR$ CALL ClrScn PRINT "History files are saved on a FILES-SAVE cmd, or automatically after every 100" PRINT "posit's *IF* CONTROLS-LOG is ON. Filenames are THddhhmm.hst. Edit files" PRINT "together if needed." PRINT FILES "HSTS\*.*" CALL PR23(FR$, F$, "Enter Track File above, or filename.BK from BAKS directory", 0) FR$ = F$ d$ = "HSTS": e$ = "HST": d = 0 IF RIGHT$(F$, 2) = "BK" THEN d$ = "BAKS": e$ = "BK": d = -1 'IF RIGHT$(F$, 3) = "DOS" THEN D$ = "": e$ = "DOS": D = 13 CALL SetSubDir(d$, e$) END SUB SUB REPORT (a$, j, k, Call$, Rpt, NewF) Sender$ = Call$ c$ = MID$(a$, k + 25, 1) IF NewF OR c$ = "N" OR c$ = "S" THEN Rpt = -1 Call$ = MID$(a$, k + 1, 9) CALL FindP(Call$) 'since this is diff fm sender IF PM = -1 THEN CALL AddP(Call$) To$ = MID$(a$, j + 1, k - j)'includes >xxxx..: a$ = Call$ + " " + To$ + MID$(a$, k + 10) + SPACE$(80)'I think this puts :: in a$ k = LEN(Call$ + To$) + 1'TO$ includes >....: IF LEN(a$) > k + 71 THEN MID$(a$, k + 65, 6) = "<" + RIGHT$(RTRIM$(Sender$), 4) + ">" END IF END IF END SUB SUB SendaMsg SvBL = 0: Mpath$ = "To " REM IF nsl + nmg > 13 THEN Display$ = "READ"'Keeps MAP working 1/2 way j = 99: IF nsl + nmg >= 22 THEN CALL EraseCMD(j) IF j < 99 OR nsl + nmg > 21 THEN CALL Noise(1) CALL PL24(" *** MESSAGE buffer full! ", 12) ELSEIF Lok THEN ELSE nsl = nsl + 1 CALL ReadPage(Lin) MpTmp$ = "To " IF Hooked > 0 THEN Tcall$ = LEFT$(PS(Hooked), 9): Hooked = -1 ELSE Tcall$ = MID$(Mst$(nsl - 1), 4, 9) IF Tcall$ <> "" AND Key$ = "S" THEN MpTmp$ = LEFT$(Mst$(nsl - 1), 3) ELSE Tcall$ = LEFT$(Msg$(nmg), 9) 'from msg or F2 reply IF INSTR(Tcall$, ":") THEN Tcall$ = "" END IF CALL BLNinc(Tcall$, lno) END IF p$ = "To:" + Tcall$ + SPACE$(68) CALL BoxTOline(14, p$, 4) IF Key$ = "S" OR Tcall$ = "" THEN LINE INPUT a$ ELSE a$ = "" IF LEFT$(a$, 1) = " " THEN a$ = MID$(a$, 2) a = INSTR(a$, "/"): IF a THEN Mpath$ = LEFT$(UCASE$(MID$(a$, a + 1)), 2) + " " IF a$ <> "" THEN 'MLC = 10' for each new TOCALL But could re do same number for same stn IF a = 0 THEN a = LEN(a$) + 1 Tcall$ = UCASE$(LEFT$(LEFT$(a$, a - 1) + " ", 9)) ELSE Mpath$ = MpTmp$ END IF p$ = "Entr MsgText: " CALL BoxTOline(14, p$, 14) LINE INPUT a$ IF LEN(a$) = 1 THEN a = VAL(a$) IF a AND MID$(Mst$(a), 14, 3) <> "ACK" THEN a$ = MID$(Mst$(a), 14, LEN(Mst$(a)) - 17) 'was 15 for 1 digit L# LOCATE Bln - 3 - nmg, 14: PRINT a$; LINE INPUT B$: a$ = a$ + B$ END IF END IF IF a$ = "" THEN Mst$(nsl) = "": nsl = nsl - 1 ELSE a$ = Mpath$ + Tcall$ + ":" + LEFT$(a$, 67) '{MM}AK 'x$ = "": IF Tcall$ = ACall$ THEN x$ = ACK$ + "}" now done in SendMSGS lno = 1: IF Tcall$ = "REPLY " THEN lno = 0 CALL SendLine("xxxxxxxxxxxx", a$, "", lno) IF MID$(a$, 7, 1) = "-" THEN CALL RdMail(a$, 3, "MY-WX", Tcall$) CALL SendMsgs("") IF nsl > 1 AND MID$(Mst$(1), 4, 5) = "REPLY" THEN CALL EraseMSG(1) END IF CALL ReadPage(Lin) END IF END SUB SUB SendCW (a$) IF NOT BEEPSoff AND DOZ = 0 THEN cw$ = " A*-B-***C-*-*D-**E*F**-*G--*H****I**J*---K-*-L*-**" cw$ = cw$ + "M--N-*O---P*--*Q--*-R*-*S***T-U**-V***-W*--X-**-Y-*--Z--**" cw$ = cw$ + ".*-*-*-,--**--=-***-A/-**-*?**--**" cw$ = cw$ + "1*----2**---3***--4****-5*****6-****7--***8---**9----*0-----" IF LEN(a$) > 3 THEN CALL PL1("Paused - Sending CW", 14) IF WPM < 5 THEN WPM = 5 Tics = 15 / WPM FOR i = 1 TO LEN(a$) a = INSTR(cw$, UCASE$(MID$(a$, i, 1))) IF a THEN FOR k = a + 1 TO a + 16 IF MID$(cw$, k, 1) >= "0" THEN EXIT FOR c$ = MID$(cw$, k, 1) IF c$ = "*" THEN SOUND 800, Tics IF c$ = "-" THEN SOUND 800, 3 * Tics IF c$ = " " THEN SOUND 20000, 3 * Tics SOUND 20000, Tics NEXT k SOUND 20000, 3 * Tics END IF NEXT i END IF END SUB SUB SendLine (To$, a$, m$, lno) IF LEN(a$) < 20 THEN a$ = a$ + " " ' a$ = a$ + "{" + m$ + MID$(STR$(MLC), 2) IF lno THEN a$ = a$ + "{" + MID$(STR$(MLC), 2) + "}" NxMSG(nsl) = TIMER - 1: DecayM(nsl) = 8 CALL AddBL(">" + MID$(a$, 4, 9) + DTGs$ + MID$(a$, 13)) Mst$(nsl) = a$ MLC = MLC + 1: IF MLC > 99 THEN MLC = 10 Tcall$ = MID$(To$, 4, 9) CALL BLNinc(Tcall$, lno) MID$(To$, 4, 9) = Tcall$ END SUB SUB SendMsgs (B$) REM start with #start in MST$(), send 1st line fm all diff stns REM then extend time period before next one. REM T CMD is changed to X so will only XMT if already on scrn IF XMTon OR Key$ = "X" THEN NxMSG = TIMER + MaxTime DIM TmpCall$(20) MsgsAre = 0: cc = 0'call counter pointer to unique calls FOR i = 1 TO nsl To3$ = MID$(Mst$(i), 4, 3) IF UCASE$(MID$(Mst$(i), 13, 6)) = "*ACK* " THEN ELSEIF INSTR("MSG,LOG,REP", To3$) <> 0 THEN ELSE DupM = 0 FOR k = 1 TO cc 'See if it is another line to same station IF MID$(Mst$(i), 4, 9) = TmpCall$(k) THEN DupM = k NEXT k IF DupM = 0 THEN MsgsAre = -1 a = NxMSG(i) - TIMER ' Save shortest time remaining... IF a > 0 AND a < NxMSG - TIMER THEN NxMSG = TIMER + a DoIt = 0 IF TIMER > NxMSG(i) OR Key$ = "X" THEN DoIt = -1 'KeepIt = -1 KeepIt = 0 '860 to let old msgs fade way out IF To3$ = "BLN" THEN IF B$ = "M" THEN DoIt = 0 IF MID$(Mst$(i), 7, 1) < "A" THEN KeepIt = 0 CALL BLTNSin(Mst$(i), 3, LEFT$(PS(0), 10), MID$(Mst$(i), 4, 4)) ELSEIF B$ = "B" THEN DoIt = 0 END IF IF DoIt THEN IF LEFT$(Mst$(i), 3) = "To " THEN CALL DigiDo(1) ELSE CALL DigiFind(Mst$(i), x) END IF 'new in 845 {MM}AK ak$ = "": IF ACall$ = MID$(Mst$(i), 4, 9) THEN ak$ = ACK$ CALL Xmit(2, ":" + MID$(Mst$(i), 4) + ak$)'new 845 IF Key$ <> "X" THEN CALL IncPrd(DecayM(i), 1.6, 1, KeepIt, NxMSG(i)) NxMSG = NxMSG(i) END IF END IF IF MID$(Mst$(i), 4, 4) <> "NWS-" THEN cc = cc + 1: TmpCall$(cc) = MID$(Mst$(i), 4, 9) END IF END IF NEXT i END IF END SUB SUB SendObject (i) IF Upload THEN REM Kills SENT with _ char OBJ = -1: a = NxOBJ(i) - TIMER IF a > 0 AND a < NxOBJ - TIMER THEN NxOBJ = TIMER + a 'Keep minimum IF (XMTon AND TIMER > NxOBJ(i)) OR Key$ = "X" THEN CALL DigiDo(1) IF Display$ = " MP" AND Prings <> 2 THEN CALL Drawunit(0, i, Tmp$, 0, 0, O) Pause (.4 * Bfac) TY$ = MID$(PS(i), 11, 1) 'new 'CALL ParseA(PS(i), TY$, LA, LO, sym$)'new IF TY$ = "+" THEN TY$ = "*" IF CmpFmt = 999 THEN '999=DISABLED since THD7 cannot decode.. CALL Format(PS(i), fs$)'new Tpos$ = MID$(PS(i), 12, 7) + fs$ 'new ELSE Tpos$ = MID$(PS(i), 12) END IF 'CALL Xmit(2, LEFT$(PS(i), 9) + TY$ + Tpos$) ' Still using old OBJ fmt CALL Xmit(2, ";" + LEFT$(PS(i), 9) + TY$ + Tpos$)'new IF Key$ <> "X" THEN d = DcayO%(i): CALL IncPrd(d, 1.7, 1, 1, NxOBJ(i)) DcayO%(i) = d: IF d = MaxTime THEN MID$(PS(i), 11, 1) = "*" 'new 862 NxOBJ = NxOBJ(i) END IF END IF IF NOT Vusr THEN i = LineP 'only valids get more END IF END SUB SUB SendPos STATIC LastPos$ IF SPM <> 99 AND ZipLan <> -1 AND (TIMER > NxPOS OR Key$ = "X") THEN CALL ParseA(PS(0), TY$, LA, LO, sym$): CALL GridSQ(LO, LA, Grid$, 0) CALL DigiDo(1) SPD$ = MID$(PS(0), 42, 3) IF INSTR(SPD$, "%") = 0 AND MID$(PS(0), 41, 1) = "/" THEN 'or /@1or SPD = VAL(SPD$) ELSE SPD = 0 END IF IF MID$(PS(0), 38, 1) = "P" THEN SPD = 0 'PwrHtGain sm$ = MID$(PS(0), 37, 1) T$ = RIGHT$(RTRIM$(PS(0)), 3) SP = 9 IF ((SPM OR GPSon) AND TNC <> 4 AND NoGPS = 0) OR SPD <> 0 THEN 'send with old time ELSEIF INSTR("UII U2k Dvs Max", T$) THEN ELSEIF T$ = "ual" AND (sm$ = "_" OR sm$ = "W") THEN 'dont update ELSE SP = 2: MID$(PS(0), 11, 8) = "@" + ZTG$ 'includes all with speed=0 END IF Tpos$ = PS(0) 'new IF LEFT$(Display$, 3) = " MP" THEN CALL Drawunit(0, 0, Tmp$, 0, 0, O)' Plots U IF CmpFmt = -1 THEN 'CALL ParseA(Tpos$, TY$, LA, LO, sym$) 'new 'CALL Format(LA, LO, sym$, fs$) CALL Format(Tpos$, fs$) MID$(Tpos$, 19) = fs$ + SPACE$(20)'/YYYYXXXX$ END IF IF Gdfmt = 99 THEN MyPos$ = "[" + Grid$ + "]" + MID$(PS(0), 38) ELSEIF Gdfmt = -1 THEN MyPos$ = ">" + Grid$ + MID$(PS(0), 27, 1) + MID$(PS(0), 37, 1) + " " + MID$(PS(0), 38) ELSEIF SP = 9 THEN : MyPos$ = MID$(Tpos$, 11) ELSEIF SP = 2 THEN : MyPos$ = "=" + MID$(Tpos$, 19) END IF IF MID$(PS(0), 19, 4) <> "0000" THEN CALL Xmit(2, RTRIM$(MyPos$)) a$ = MID$(LastPos$, SP, 19): B$ = MID$(LastPos$, SP + 26)'Ignore wind IF a$ <> MID$(MyPos$, SP, 19) OR B$ <> MID$(MyPos$, SP + 26) THEN DecayP = 4 IF GPSon OR SPM OR DFon OR DFSP OR WXon THEN DecayP = PPP / 2 END IF IF NewWX AND ABS(TIMER - NewWX) > 1800 THEN MID$(PS(0), 37, 1) = "/": NewWX = 0 IF Key$ <> "X" THEN CALL IncPrd(DecayP, 1.9, 1, 1, NxPOS) LastPos$ = MyPos$ END IF END SUB SUB SetSubDir (SbDr$, e$) IF F$ <> "" AND INSTR(3, F$, ".") = 0 THEN F$ = F$ + "." + e$ IF MID$(F$, 2, 1) = ":" THEN ELSEIF LEFT$(F$, 1) = "\" THEN ELSEIF LEFT$(F$, 2) = ".." THEN ELSE F$ = SbDr$ + "\" + F$ END IF END SUB SUB ShowFeatures LOCATE Bln - 1, 40 x = RS: x$ = " Statute Mi" IF Metric THEN x = RS * 1.609: x$ = " Kilometers" PRINT " <---"; LEFT$(STR$(x), 5); x$ + " ---> "; LINE (320, L23)-(511, L24), 14, B a$ = "" IF NOT Allon THEN a$ = a$ + "A " IF NOT LinsON THEN a$ = a$ + "B " IF NOT TagsON THEN a$ = a$ + "C " IF NOT LdrsON THEN a$ = a$ + "H " IF LblsC = 0 THEN a$ = a$ + "L " IF NOT RdsON THEN a$ = a$ + "R " IF NOT WtrON THEN a$ = a$ + "W " IF a$ <> "" THEN CALL PL118("Features OFF = " + a$, 14) LOCATE Bln - 1, 65 PRINT " Track Mem"; INT(LineTH / 2); "% "; : LINE (516, L23)-(639, L24), 11, B END SUB SUB TooBad LOCATE Bln - 1, 1 PRINT "Sorry, User is not validated. See V command under F1-Help menu... "; END SUB SUB Traffic CALL ClrScn Display$ = "TRAF" a = Lnr FOR i = 1 TO mss a = a + 1: IF a > mss THEN a = 1 a$ = RTRIM$(Mail(a)) IF LEFT$(a$, 1) < " " THEN a$ = STR$(i) PRINT a$ IF Bln = 25 AND i = 19 THEN CALL Pause(5) NEXT i CALL MailHdr END SUB SUB TraTr FOR i = 1 TO mss a = INSTR(Mail(i), ">") - 1: IF a <= 3 THEN a = 3 TL = 10 - a 'ToLength ToCall$ = MID$(Mail(i), a + 2, TL) FmCall$ = LEFT$(Mail(i), a) LA1 = 0: LA2 = 0: LO1 = 0 FOR j = 1 TO LineP IF LEFT$(PS(j), a) = FmCall$ THEN P1 = j: CALL Drawunit(0, j, Tmp$, 0, 0, O) s = INSTR(PS(j), " ") - TL: IF s < 1 THEN s = 1 IF MID$(PS(j), s, TL) = ToCall$ THEN P2 = j: CALL Drawunit(0, j, Tmp$, 0, 0, O) NEXT j CALL LineIT(P1, P2) NEXT i END SUB SUB ViewPkts (V$(), vp) CALL PR(a$, "View PATHS or DATA") IF a$ = "D" THEN ViewD = -1 ELSE ViewD = 0 Display$ = "VIEW" CALL ClrScn a = vp LOCATE Bln - 1, 1 PRINT " *** LAST 12 packets in VIEW BUFFER:" CALL ViewBox(12) FOR i = 1 TO 13 PRINT " "; LEFT$(V$(a), 79) a = a + 1: IF a > 12 THEN a = 0 NEXT i END SUB SUB Weather IF Display$ = "BLTN" THEN CALL NTSdisp(1, LinB, 0) ELSEIF RIGHT$(Display$, 4) = "READ" THEN CALL NTSdisp(0, nmg, 0) ELSE NxWx = NxWx + 1 REM Search for nxt wx starting at J (already 1> than last) k = -1 'also restarts FOR i = NxWx TO LineP sym$ = MID$(PS(i), 37, 1) IF sym$ = "_" OR sym$ = "W" THEN k = i: i = LineP NEXT NxWx = k IF NxWx > -1 THEN CALL DispWX(NxWx) Hooked = -1: CALL HookedDisp(NxWx) ELSE CALL PL118("", 0) END IF END IF END SUB SUB ZeroLnP FOR i = 1 TO LineL: LS(i) = "": NEXT i FOR i = 1 TO LineP: PS(i) = "": DG(i) = " ": HL(i) = SPACE$(23): NEXT i FOR i = 1 TO mss: Mail(i) = "": NEXT i: Lnr = 0 Key$ = "L" LineB = 0 LineP = 0 LineL = 0 LineD = 0 LineH = 0 LineR = 0 LineDX = 0 nmg = 0: nsl = 0 'Used to only do this on NEW LOADS END SUB