DECLARE SUB GetConfig () DECLARE SUB PIRNT (a$) DECLARE SUB ZeroLnP () DECLARE SUB SaveFile () DECLARE SUB LoadFile (N!) DECLARE SUB InitMore () DECLARE SUB GetPorts () DECLARE SUB NxtComma (a$, k!, B$) DECLARE SUB LoadLine (a$, mine, NewF, abt!) DECLARE SUB OneMor (a!, amax!) DECLARE SUB TimeFix (HRz!, DA!) DECLARE SUB PRa (a$, p$) DECLARE SUB PRb () DECLARE SUB PR2N (a!, p$) DECLARE SUB NewScrn (d$, c!, d) DECLARE SUB Cprint (a$, c!, i) DECLARE SUB Dphg (PHG$, d!, R!, w) DECLARE SUB POScolr (a$, c!) DECLARE FUNCTION Fmt$ (a$, a) DECLARE SUB StatusLine () DECLARE SUB PL2 (a$, c!) DECLARE SUB Hcane (a$, ga!, SPD!, x!, y!, c!) DECLARE SUB SymShow () DECLARE SUB PL25 (a$, c!) DECLARE FUNCTION Tao! (a$) DECLARE FUNCTION TstO! (adj$) DECLARE SUB PutCur () DECLARE SUB AltBText () DECLARE SUB PHrdLN (i!, d$, a) DECLARE SUB Bline (c!) DECLARE FUNCTION Valu! (x$, p!) 'DECLARE SUB DoSATS (pt, a$) DECLARE SUB Pwx (a$, cs$, T$, R$, br$) DECLARE FUNCTION LzN$ (a!, N) DECLARE FUNCTION LLto$ (L!) DECLARE SUB PL118 (z$, c!) DECLARE SUB PR23 (a$, B$, p$, N) DECLARE SUB Noise (a!) DECLARE SUB Xmit (a!, a$) DECLARE SUB WXmore (sym$, x!, y!, c!) DECLARE SUB GridSQ (x, y, GdSq$, p) DECLARE SUB DigiDo (a) DECLARE SUB PL1 (z$, c!) DECLARE SUB PL24 (a$, c!) DECLARE SUB DispALL (a$) DECLARE SUB ClrScn () DECLARE SUB Do3D (x!, y!) DECLARE SUB FileRead (a) DECLARE SUB JustGroups (i, sym$, Tmp$, DoIt!) DECLARE SUB HookedDisp (p!) DECLARE SUB InitVGA (a$) DECLARE SUB AllList (EndB!, a!) DECLARE SUB AddBL (a$) DECLARE SUB POSIThdr () DECLARE SUB WXcheck (a$, c!) DECLARE SUB LLtoNGR (LNG!, LLAT!) DECLARE SUB TooBad () DECLARE SUB FindP (a$) DECLARE SUB ParseVel (a$, sym$, CSE!, CSE$, SPD!, SPD$, BRG$, QAL$, CMTS!, PHG$) DECLARE SUB ParseA (a$, TY$, LA!, LO!, sym$) DECLARE SUB ComputeDelT (T$, Del!) DECLARE SUB ParsePS (i!, TY$, LA!, LO!, sym$) DECLARE SUB PassWD (a$, c$, Val$) DECLARE SUB PwrAnt (a!, Pos$) DECLARE SUB AddL (a$) DECLARE SUB FindL (a$) DECLARE SUB DoCalls (x!, y!, sym$, Del!, Px$, un$) DECLARE SUB LOBcal (CSE!, dist!, LO, LA, LaO!, LoO!) DECLARE SUB RdMail (a$, k!, call$, TCall$) DECLARE SUB DXcalls (a$, LALO$) DECLARE SUB SetPage (StrtX!, LineX!, Endx!) DECLARE SUB PrintL (StrtL!, EndL!) DECLARE SUB ToGo () DECLARE SUB SymDo (a$, B$, c$, d$, sym$) DECLARE SUB ShowSetup () DECLARE SUB InitTNC (a) DECLARE SUB PR (a$, T$) DECLARE SUB SetPosRate () DECLARE SUB beeps () DECLARE SUB HEXDEC (a$, a, N, d!) DECLARE SUB SetSubDir (SbDr$, e$) DECLARE SUB GpWxVal (Val$, B) DECLARE FUNCTION Xval (x) DECLARE FUNCTION Yval (x) DECLARE SUB Valid (B$) DECLARE SUB GetChar (a$) DECLARE SUB PlotCur (LL$) DECLARE SUB Print25th (a, a$) DECLARE SUB SendCW (a$) DECLARE SUB XYtoLL (LAT!, LON!, a$, LALO$) DECLARE SUB newtitle () DECLARE SUB ParseTime (a$, kv!, Tme$) DECLARE SUB ParseLL (a$, kv!, LL$, abort!) DECLARE SUB GetDTG () DECLARE SUB Title () DECLARE SUB DrawSymbol (a$, CSE, SPD, i, j, k, w) DECLARE SUB ControLine () DECLARE SUB HearDisp (Tmp$) 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$ END SUB Bltns STATIC Blank IF Blank + LinB > 22 THEN skip = 0 ELSE skip = -1: Blank = 0 IF Bln = 43 THEN skip = -1: Blank = 0 CALL PL118("", 0) c = 2: IF GRP$ <> "" THEN c = 6 CALL NewScrn("BLTN", 5, c) 'LINE (5, 5)-(634, 2.3 * Yfc - 5), c, BF IF c = 6 THEN PRINT "BULLETINS ONLY TO "; GRP$ ELSE PRINT " BULLETINS OF GENERAL INTEREST " END IF LOCATE 2, 47: PRINT " alt-E to ERASE, N for NTS " LOCATE 4, 1 FOR i = 1 TO LinB IF skip AND LEFT$(BN(i), 4) <> LEFT$(BN(i - 1), 4) THEN Blank = Blank + 1: PRINT END IF PRINT LEFT$(BN(i), 80) NEXT i NewBltn = 0 'CALL PL24("Use INPUT-MY-BLNgrps to enter what Bulletin Groups you want to receive", 6) CALL PL24("To exclude all BLTN groups except selected ones, use INPUT-MY-BLNgrps ", 6) END SUB SUB CfigINPUT (Val$, MBln) LINE INPUT #3, PS(0) LINE INPUT #3, LS(0) INPUT #3, MapFile$ a = INSTR(MapFile$, "."): IF a THEN MapFile$ = MID$(MapFile$, a + 1) 'IF LEFT$(MapFile$, 7) <> "MAPLIST" THEN MapFile$ = "MAPLIST.USA" INPUT #3, TNCcom$, Port$ INPUT #3, TNC, KAM INPUT #3, TNCon, a$, HFa$: TNCbaud = VAL(a$) INPUT #3, CDY, CDX, RS INPUT #3, MaxTime, a$'Max decay time and null label LINE INPUT #3, PBvia$ INPUT #3, Val$, HF INPUT #3, GPSon, GPScom$ INPUT #3, SPM, HSP, a$: GPSbaud = VAL(a$) INPUT #3, WxOn, Rain, LogW INPUT #3, DFon, DFSP INPUT #3, STSon, Oprt INPUT #3, Auto, space INPUT #3, GPSprd, PPP INPUT #3, DGPSon, Rnav INPUT #3, Gp, d, w, s, R INPUT #3, UTC, Zulu, OnlyBCNs INPUT #3, BEEPSoff, SSvr INPUT #3, DXon, WPM, LogF INPUT #3, CWfreq, CmpFmt INPUT #3, ReDrwT, MagVar, AGL INPUT #3, Htemp, Ltemp, Ralarm, Wind, Metric, Wrng INPUT #3, Alias$, MBln, AltNet$ INPUT #3, Lok, ReDrw, Dwx, JustW INPUT #3, ZipLan, SavPrd, NetPath$ INPUT #3, Ofn, Ofw INPUT #3, Enet$, Ogga, DRon, Junk, Dual, Gfltr INPUT #3, DGGA, Pon LINE INPUT #3, My$ LINE INPUT #3, GRP$ LINE INPUT #3, Mgrp$ INPUT #3, Ignore, Modem, LocFil INPUT #3, CapGD, LblsC, FGC, BGC, NoTel, DST, a LINE INPUT #3, R0MIR$ LINE INPUT #3, TelNo$: IF UCASE$(LEFT$(TelNo$, 3)) = "AVA" THEN TelNo$ = "" INPUT #3, Palias$, Vcnty, B, c, d 'FOR i = 1 TO 12: LINE INPUT #3, DP(i): NEXT i 'FOR i = 0 TO 3: INPUT #3, Altpath$(i), AltT(i): NEXT i IF ABS(Ofn) > 2000 THEN Ofn = 0 IF ABS(Ofw) > 2000 THEN Ofw = 0 CALL GetDTG MID$(PS(0), 11, 8) = "@" + ZTG$ Uid$ = LEFT$(PS(0), 9) CALL ParseA(PS(0), TY$, LA, LO, sym$): MyLAT = LA: MyLON = LO 'CALL PassWD(Uid$, c$, Val$) 'IF Val$ = c$ THEN Vusr = -1 'ELSE Uid$ = "NOCALL-15": Val$ = "UNREG" ' PS(0) = Uid$ + " @" + ZTG$ + "0000.00N/00000.00W/Default Posit" 'END IF CALL GpWxVal(Val$, Gp) 'If valid, then this puts a in ALTval CALL GpWxVal(Val$, d) CALL GpWxVal(Val$, w) CALL GpWxVal(Val$, s) CALL GpWxVal(Val$, R) END SUB SUB CfigPRINT (Val$, MBln) PRINT #3, RTRIM$(PS(0)) PRINT #3, RTRIM$(LS(0)) PRINT #3, "MAPLIST." + MapFile$ WRITE #3, TNCcom$, Port$ WRITE #3, TNC, KAM WRITE #3, TNCon, TNCbaud, HFa$ WRITE #3, CDY, CDX, RS PRINT #3, MaxTime; ", Max seconds between pckts" PRINT #3, PBvia$ WRITE #3, Val$, HF WRITE #3, GPSon, GPScom$ WRITE #3, SPM, HSP, GPSbaud WRITE #3, WxOn, Rain, LogW WRITE #3, DFon, DFSP WRITE #3, STSon, Oprt WRITE #3, Auto, space WRITE #3, GPSprd, PPP WRITE #3, DGPSon, Rnav WRITE #3, Gval, Dval, Wval, Sval, Avail2 WRITE #3, UTC, Zulu, OnlyBCNs WRITE #3, BEEPSoff, SSvr WRITE #3, DXon, WPM, LogF WRITE #3, CWfreq, CmpFmt WRITE #3, ReDrwT, MagVar, AGL WRITE #3, Htemp, Ltemp, Ralarm, Wind, Metric, Wrng WRITE #3, Alias$, MBln, AltNet$ WRITE #3, Lok, ReDrw, Dwx, JustW WRITE #3, ZipLan, SavPrd, NetPath$ WRITE #3, Ofn, Ofw WRITE #3, Enet$, Ogga, DRon, Junk, Dual, Gfltr WRITE #3, DGGA, Pon PRINT #3, My$ PRINT #3, GRP$ PRINT #3, Mgrp$ WRITE #3, Ignore, Modem, LocFil WRITE #3, CapGD, LblsC, FGC, BGC, NoTel, DST, a PRINT #3, R0MIR$ PRINT #3, TelNo$ WRITE #3, Palias$, Vcnty, B, c, d 'FOR i = 1 TO 12: PRINT #3, RTRIM$(DP(i)): NEXT i 'FOR i = 0 TO 3: WRITE #3, Altpath$(i), AltT(i): NEXT i BestLAT = CDY: BestLON = CDX: BestRNG = RS END SUB SUB ClrScn IF Doz THEN Doz = 0: SCREEN ScrnType IF MSp THEN SCREEN , , 0, CSp: CSp = 0 CLS IF MSp THEN SCREEN , , 0, 0 END SUB SUB ComputeDelT (T$, Del) 'hrs from beginning of month DA = VAL(LEFT$(ZTG$, 2)) HRz = VAL(MID$(ZTG$, 3, 2)) + VAL(MID$(ZTG$, 5, 2)) / 60 Now = DA * 24 + HRz 'in zulu z$ = RIGHT$(T$, 1) IF z$ = "h" THEN TD = DA 'was INT(Now / 24) TH = VAL(MID$(T$, 2, 2)) + VAL(MID$(T$, 4, 2)) / 60 ELSE TD = VAL(MID$(T$, 2, 2)) TH = VAL(MID$(T$, 4, 2)) + VAL(MID$(T$, 6, 2)) / 60 END IF Thn = TD * 24 + TH IF z$ = "/" THEN Thn = Thn - (UTC - DST) Del = Now - Thn IF Del < -59 THEN Del = Del + 31 * 24 IF Del < 0 THEN Del = 0 IF Del > 48 THEN Del = 48 IF INSTR("h/zZ", z$) = 0 THEN Del = 0 END SUB SUB Dphg (PHG$, d, R, w) d = 0 R = 10 w = 0 Ph = INSTR("PHG/DFS/Rng/WAR", LEFT$(PHG$, 3)) IF Ph = 13 THEN R = VAL(MID$(PHG$, 4, 2)) w = VAL(MID$(PHG$, 6, 2)) ELSEIF Ph = 9 THEN 'Rng R = VAL(MID$(PHG$, 4, 4)) ELSEIF Ph = 1 OR Ph = 5 THEN 'PHG/DFS p = VAL(MID$(PHG$, 4, 1)) ^ 2: IF p < 1 THEN p = .8 IF Ph = 5 THEN IF Prings = 2 THEN p = 10 / p ELSE p = 10 END IF Hx = ASC(MID$(PHG$, 5, 1)) - 48 H = 10: IF Hx > 0 AND Hx < 21 THEN H = 10 * 2 ^ Hx Gn = 10 ^ (VAL(MID$(PHG$, 6, 1)) / 10) d = 45 * VAL(MID$(PHG$, 7, 1)): IF d > 360 THEN d = 360 R = SQR(2 * H * SQR((p / 10) * (Gn / 2))) END IF IF Prings = 99 THEN R = R / 2: CALL PL118("PHG Circles shown for MOBILES", 14) END SUB SUB DrawSymbol (sym$, CSE, SPD, x, y, c, Wdth) 'es$ = "Sym=" + sym$ + " C/SPD=" + STR$(CSE) + STR$(SPD) IF sym$ = "/T" THEN sym$ = "/V" 'IF sym$ = "\." THEN sym$ = "\?" c$ = "c" + MID$(STR$(c), 2) IF c = 8 THEN c2$ = "c8": cW$ = "c8": cy$ = "c8" ELSE c2$ = "c12": cW$ = "c15": cy$ = "c14" IF c = 14 THEN cW$ = "c14" END IF w$ = "l7dr14dl14r14u2l7g4l2h2r9f2r2e2" sm$ = RIGHT$(sym$, 1) adj$ = LEFT$(sym$, 1) IF adj$ = "/" THEN a = INSTR("0123456789BDFIJ", sm$) IF a THEN adj$ = sm$: sm$ = "0": IF a > 9 THEN sm$ = "A" ELSEIF adj$ = "\" THEN adj = -1 END IF ct = c: xt = x: yt = y: REM avoid Paint(x,y) error Hdg = INT(-CSE): IF Hdg > 0 OR Hdg < -360 THEN Hdg = 0 ca$ = "TA" + STR$(Hdg) Ovly = Tao(adj$) IF sym$ = "/&" THEN Ovly = 17 rdy = -1: PSET (x, y), c: cL$ = "c0b" IF Ovly = -1 THEN rdy = 0 '"d3l4g2lh2l2u2e2r3e3r4f3r3f2d2l2g2lh2l4"'CAR ELSEIF sm$ = "/" THEN CIRCLE (x, y), 6, 4: PAINT (xt, yt), 15, 4: c = 4: cL$ = "c15b" ELSEIF sm$ = ")" THEN DRAW c$ + "bd4l6u9r12d9l6bd2c12l8u13r16d13l8" ELSEIF sm$ = "0" THEN CIRCLE (x, y), 5, c, , , .75 / yfg ELSEIF sm$ = "A" OR (sm$ = "i") THEN DRAW "d3l4u7r9d7l4" ELSEIF sm$ = ">" THEN DRAW ca$ + "bd6l4u2lu2ru4lu2ruer6fdrd2ld4rd2ld2l4" ELSEIF sm$ = "s" THEN DRAW ca$ + "bd7l3uhu2hu3eu2eue3f3dfd2fd3gd2gdl2" ELSEIF sm$ = "^" THEN DRAW ca$ + "bd7l5e2uh2l4e6u2e3f3d2f6l4g2df2l6" ELSEIF sm$ = "#" THEN DRAW "d2rg4lu4h4r4e4rf4r4g4d4lh5" ELSEIF sm$ = "v" THEN DRAW "d3l2g2lh2l1u7r12f4d3l1g2lh2l4" ELSEIF sm$ = "u" THEN DRAW "d3rg2lh2lg2lh2lu7r16d5r2u4r2f3d3l1g2lh2l5" ELSEIF sm$ = "n" THEN DRAW ca$ + "bd3l9e9f9l9" ELSEIF sm$ = "W" OR sm$ = "_" THEN CIRCLE (x, y), 6, c IF c = 9 THEN cL$ = "c15b" ELSEIF sm$ = "a" THEN CIRCLE (xt, yt), 10, 4: PAINT (xt, yt - 1), ct, 4 sm$ = "&": c$ = "c1bgb": c = 1: cL$ = "c15b" ELSEIF sm$ = "c" THEN CIRCLE (xt, yt), 11, 1: PAINT (xt, yt - 1), 1 cL$ = "c4b": DRAW c$ + "bd4l9e9f9l9" ELSE rdy = 0 END IF IF sm$ = "&" THEN rdy = -1: DRAW c$ + "bl6E7F7G7H7br8" IF rdy THEN DRAW "TA0": PAINT (xt, yt - 1), c 'Do overlay IF ScrnType = 2 THEN cL$ = "c0b" PSET (x + 1, y): DRAW cL$ + Sy$(Ovly) ELSEIF adj AND (sm$ = CHR$(34) OR INSTR(" 0) THEN IF sm$ = CHR$(34) OR sm$ = "D" OR sm$ = "F" THEN CIRCLE (x - 6, y), 3, c: PAINT (x - 4, y), c CIRCLE (x + 6, y), 3, c: PAINT (x + 4, y), c IF sm$ = "D" THEN DRAW "r5d4g2l2bl12r2e2u4" ELSEIF sm$ = "F" THEN CIRCLE (x - 6, y), 6, c, 0, 3.2 CIRCLE (x + 6, y), 6, c, 3.2, 0 END IF ELSE SELECT CASE sm$ CASE "I": CIRCLE (x, y - 6), 3, c: PAINT (x, y - 6), c : DRAW "bd14m-6,-10r12m-6,10" CASE "G": DRAW "bu6nu3ne2nr4nf2nd3ng2nl4nh2bd14m-6,-10r12m-6,10" REM CASE "e": DRAW "bu4f6l12e6" CASE "J": DRAW "ne6f7u3g3r3" CASE "H": DRAW "br6bu3m-12,+6l4h2u2e2r4m+12,+6r4e2u2h2l4" CASE "E": DRAW "bd6bl6u10erf2re2rf2re2rf" CASE "b": DRAW "d8u16f3l6e3d7br3h2l3g2df2r3f2dg2l3h2" CASE "d": R = 32760: IF RS > 64 THEN R = 32768 / RS CIRCLE (x + .6 * R, y - .2 * R), R, c CASE "B": DRAW "d6u12f3l6e3d6l9r17h3d6e3" CASE "C": CIRCLE (x, y), 3, 12: CIRCLE (x, y), 6, 12 PAINT (xt, yt + 3), 12 DRAW "bg2c15l4h2u2euhu2e2r3fr3er3f2d2gdfd2g2l2hl3" CASE ":": DRAW "r4l8m+4,7m+4,-7bu3l8e4f4" CASE ";": DRAW "e2l2r5l2f2bl8u11m-4,7r8m-4,-7" CASE "[": DRAW "bl6u4d4e3f3u6d6br2r4l4u5m+4,-2be2d11l16u7m+16,-5" CASE "w" ' FLOODING FOR i = -10 TO 10 STEP 10: CIRCLE (x + i, y), 5, c, 3.1, 0: NEXT FOR i = -15 TO 15 STEP 10: CIRCLE (x + i, y + 5), 5, c, 3.1, 0: NEXT CASE "m": IF RS < 64 THEN PSET (8 * INT((x / 8) + .501), 14 * INT((y / 14) + .501)), c DRAW "l2u16r28d16l27" END IF CASE "<", "g" ' ADVISORY DRAW "c12bm+3,+7m-7,-16r8g5": PAINT (xt, yt - 6), c, 12 IF sm$ = "g" THEN DRAW "c12d2r6g5": PAINT (xt + 2, yt - 1), c, 12 CASE "t", "f": z1 = 1: z2 = 2 'TORNADO IF sm$ = "t" THEN B = 1 ELSE B = 4: DRAW "bl6u3r3l3u3r4br2r4l4d6r4" FOR i = B TO 6 z1 = z1 + i: z2 = z2 + (i - 1) CIRCLE (x - 1 + i * 3, y - z1), z2, c NEXT i CASE "l" ' AREAS T = c MOD 10 c = INT((c - T) / 10) REM CSE/SPD are offsets REM T=2 = elipse, T=6 = opposite quadrant line SELECT CASE T CASE 0, 5: CIRCLE (x, y), ABS(SPD - x), c CASE 1, 6, 3, 8: LINE (SPD, CSE)-(x, y), c CASE 4: LINE (SPD, CSE)-(x, y), c, B CASE 9: LINE (SPD, CSE)-(x, y), c, BF END SELECT SELECT CASE T CASE 3, 8: LINE (SPD, CSE)-(2 * SPD - x, y), c LINE (2 * SPD - x, y)-(x, y), c CASE 5: PAINT (xt, yt), c END SELECT IF T = 8 THEN PAINT (SPD, y - (y - CSE) / 2), c IF Wdth THEN R = (640 * 2 / 3) / 350 a = ATN((CSE - y) * R / (x - SPD)) DX = Wdth * SIN(a) * R dy = Wdth * COS(a) * 1 / R LINE (SPD + DX, CSE + dy)-(x + DX, y + dy), c, , 255 LINE -(x - DX, y - dy), c, , 255 LINE -(SPD - DX, CSE - dy), c, , 255 LINE -(SPD + DX, CSE + dy), c, , 255 'LINE (SPD - dx, cse - dy)-(x - dx, y - dy), c, , 255 END IF END SELECT END IF ELSEIF sym$ = "/." THEN DRAW Sy$(34) ELSE 'IF Fgc = 15 THEN a = c ELSE a = 4 'for the grid squares REM the ENDIF is after the end of the following IF INSTR("/(/A/H/h/?/w/t/$\9\P\R\r\?\X", sym$) THEN DRAW "c1bd5l7u10r14d10l7bu5": PAINT (xt, yt), 1 END IF IF sym$ = "/z" THEN sym$ = "/+": DRAW cW$ + "bl5u5r10d10l10u5br5" 'Draw a box SELECT CASE sm$ CASE "A": DRAW cW$ + "bdl5u3r4u3r3d3r4d3l4d3l3u3" CASE "H": DRAW cW$ + "dl5d2u6d4r10u2d4u2l8u1rbrr4" CASE "9": DRAW cW$ + "ld2ru2l2d2bg2u6r6l6e2r2f2d6l6r6e3h2e2" CASE "?", ".": DRAW cW$ + "bd4lr2bu2e3uh3l2g3re2r2f2dg3" CASE "w": DRAW cW$ + "bl5bu4d4u2r2u2d4br2efdg3r3br2bu4u3erfd3glh" CASE "t": DRAW cW$ + "bh4r4l2d6br4fr2euhl2huer2f" CASE "(": DRAW cW$ + "u4d2r2l2d2r2f2bl2g2l2h2u2e2" CASE "h": IF adj$ = "/" THEN DRAW cW$ + "bl2d3lu6rd3r4u3rd6lu3l4" ELSE DRAW "u5r10d3l6bl4l6u3r6d5l6u7r16d7l6u5"'store END IF CASE "r" IF adj$ = "/" THEN DRAW "lu12rd12u6f6h6lg6" ELSE DRAW cW$ + "bd4bl2u6l2d6u6ld3r4u3l3bu2r2lbd2d3br4bdrd2u2r2d2u2rm-2,-4m-2,4r2bu6lr2" END IF CASE "$" IF adj THEN DRAW "c2bd5l7u10r14d10l7bu5": PAINT (xt, yt), 2 DRAW cW$ + "d5u10br3bd2hl4g2f2r4f2g2l4h" ELSE DRAW cW$ + "g2hg2fr4e5u2h2g2fg2" END IF CASE "-", "y", "+" IF sym$ = "/+" THEN DRAW c$ + "bg2l4u3r4u3r4d3r4d3l4d3l4u3" PAINT (xt, yt + 1), 4, c ELSEIF sym$ = "\y" THEN DRAW "bu5r3f5g5l6h5e5r3" PAINT (x, y + 1), c DRAW "c0u2lh2er4f3d2g3l4h3u2e3r3" PAINT (xt - 2, yt + 1), 12, 0 DRAW "c0r2d3u7r3gl3dr2gl2dr2" ELSE DRAW "be2d3l6u4g2e5f5h2" ' HOUSE QTH IF sym$ = "/-" THEN DRAW "u7d2ngf" IF sm$ = "y" THEN DRAW "u7r4l7g1e2bd2bre2bd2bre2"'YAGI PAINT (xt, yt - 1), c IF sym$ = "\-" THEN DRAW cy$ + "e2u6r6ud11u10l16ud11" 'HF IF sym$ = "\+" THEN DRAW "u8lu4d4ld7c0d3ru3rd3" 'church END IF CASE "*": DRAW "bl2l8r4u3d6u3e2g4e2h2f4h2br4r8l4u3d6u3e2g4e2h2f4h2" CASE "C": DRAW "c2ur7l14dr14dl14h2uerf2r10e2rfdg2" CASE "_", "W": CIRCLE (x, y), 5, c: PAINT (xt, yt - 1), c CASE "#": PSET (x, y), 10: DRAW "dg3lu3h3r3e3rf3r3g3d3lh4" PAINT (xt, yt - 1), c, 10 CASE "b", "<" DRAW "bl2uh2l2g2d2f2r2e2ubr4ue2r2f2d2g2l2h2uru6l2r2d2l9h1r2fg3r5e3g2l2" 'BIKE IF sm$ = "<" THEN DRAW "u6herfgd7u7f4" ' rider CASE ">", "P": DRAW w$ + "m-12,-3e2r3d3u3r3f3"' CAR IF sym$ = "\P" THEN DRAW cW$ + "bg4bl4u8r5fdg2l4" IF sym$ = "/P" THEN DRAW "c9l12dr12dl12"'blue CASE "k": DRAW w$ + "m-8,-3u2r3f3"' truck CASE "v", "a": DRAW w$ + "m-14,-2u3rd3u3r4d3u3r4d3u3r2f3"'VAN IF sm$ = "a" THEN DRAW "c12bll11dr11" ' red CASE "=": DRAW w$ + "m-14,-3u3l2r6d3r6u3r2d3"' RAIL CASE "j": DRAW w$ + "m-14,-2u3r6f3"' JEEP IF adj THEN DRAW cy$ + "e9dg8e5f6e2g2f2e2hg2dh10m-10,+5" CASE "u", "f": DRAW w$ + "r2u4r2f2d2l4u4bl2l14" CIRCLE (x + 11, y + 3), 1, c IF sm$ = "f" THEN DRAW "c12bm-4,-6l3dr3dl3dr3l14dr14dl14"'red CASE "[": DRAW "l2g2re2r2m-2,+4g2h2grf2e3f3g2fue2h3m+2,-3f2e2ug2h2euhlgdf" CASE "]": DRAW "bd3l4u6r8d6l4bu3" 'BOX IF sm$ = "]" THEN DRAW Sy$(21) 'XCROSS CASE "}", "x": DRAW "bd5h5e5f5g5bu5"'DIAMOND IF sm$ = "x" THEN PAINT (xt, yt - 1), c CASE ";": DRAW "l4u2e5f5d2l5": PAINT (xt - 1, yt - 1), c DRAW "r2dc0u6d2f4" 'CASE ".": DRAW Sy$(34) CASE "/": CIRCLE (x, y), 3, c: PAINT (xt, yt - 1), c' DOT CASE "G", "q" IF sm$ = "q" THEN R = 8192 / RS: N = 2 IF sm$ = "G" THEN R = 512 / RS: N = 1 LINE (x - N * R, y - .6 * R)-(x + R, y + .55 * R), c, B CASE CHR$(39), "^" ' AIRCRAFT IF sm$ = CHR$(39) THEN IF adj THEN DRAW "e5u2e2f3g6l4h5l2d2f4r12l18r8u4c15e2h3e4h3" ELSE DRAW ca$ + "bgd5l2dr6ul2u5r6uh2l4u3hgd3l4g2dr6" END IF END IF IF sm$ = "^" THEN DRAW ca$ + "bg2d5g2m+4,-2m+4,2h2u5f4u3h5u2h1g1d2g5d3e4" IF NOT adj THEN PAINT (xt, yt - 1), c: DRAW "TA0" CASE "O" ' Balloon CIRCLE (x, y - 6), 6, c LINE (x - 2, y)-(x + 2, y + 2), c, BF PAINT (xt, yt - 8), c CIRCLE (x, y - 6), 5, 0, , , 2 CASE "X" IF adj$ = "/" THEN DRAW "g2e2m-9,-2g2e2h2f2m+9,-2u2l8r16l7d2r4f2g2l4u5d5r4f2" 'HELO ELSE DRAW cW$ + "bg4u8r5fdg2l4r4f5h3g2e4" END IF CASE "Y", "s" DRAW "l6d2r13e2l8" IF sm$ = "Y" THEN DRAW "r2u11g8r8u6f8" ' SAIL IF sm$ = "s" THEN DRAW "l4u4r8f3h6" ' SHIP PAINT (xt, yt + 1), c CASE "o" CIRCLE (x, y), 4, c IF adj = 0 THEN DRAW "bd2bl6l3u2r2l2u2r3br15l3d4r3bf2dl22u9r22d9" CASE "c": DRAW "be2l4d4r4bl7l4r2u4l2r4br10r4d2l4u2d4br6bd2l24u9r24d9" CASE "m": DRAW "bu7l2u3f2e2d3bd2l4r2d3l2r4bd3ul4d4r4udbr2r2bl10l2" CASE "e", "p" IF adj$ = "/" THEN DRAW "l5f3g1e1h3g5e5u2h2f2r10e5f3g2h2g9e5f3g1e1h3l4" IF sm$ = "e" THEN DRAW "u6herfgd7u7f4" ELSE DRAW "l5r9ul9u2r11e3" END IF CASE "i": CIRCLE (x, y), 15, c, , , .3 ' IOTA DRAW "r4m+3,-4u10f5m-2,-4m+5,+3m-6,-2m+5,-2m-5,+2e3m-5,+3g7" DRAW "m+3,-6m-4,1m+5,-2h4m+6,+2d11g2lh6g7r7u7" PAINT (xt - 5, yt - 2), c CASE "!": DRAW "c12bd8h10e10f10g10" DRAW c$ + "bu4lher2fglbu4m-2,-6e2f2m-2,6u6fd2" CASE ",": IF adj THEN DRAW "c14d5h4g2lh2u2e2rf2u3e2r3f2d3e2rf2d2g2lh2g4" ELSE DRAW "c14d4l2h2r3u3l3g2h2e2r3e3f3r3f2g2h2l3d3r3g2l2" END IF PAINT (xt, yt - 2), 14'Scouts CASE "t": z1 = 1: z2 = 2 'TORNADO FOR i = 1 TO 6 z1 = z1 + i: z2 = z2 + (i - 1) CIRCLE (x - 1 + i * 3, y - z1), z2, c NEXT i CASE ":": DRAW "c12l9u3r7u8r4d8r7d3l9": PAINT (xt, yt - 1), c, 12'FIRE DRAW "c4dl3u5r6d5l6": PAINT (xt, yt - 2), 4 DRAW cy$ + "g2l5h3u3e3uf3d4gh2u2e5u3e2f2d6f2d2g2lh2u3e6f2d2fd4g3u6" CASE "S" ' SPACE IF adj THEN DRAW "lg2e2l3g4e4u6r8d6l4r4f4h4e3f3h3u5g3e3l8g3e3r2du5": PAINT (xt, yt - 1), c ELSE DRAW ca$ + "bd10d2l3u2l4hu3e5d8u11e2bd3ubu2r2bd3ubu2f2d11u8f5d3gl4d2l3u4" END IF DRAW "TA0" CASE "%": DRAW "e5bd5h5bl7d5r3eu3hl3h2d8r16u8l16" 'DX CLUSTER CASE "x": DRAW "e5g10e5f5h10f2u3d11f2r2e2u11" CASE "Z": DRAW c2$ + "l4ur3ul3ur5c10r3dl3dr3dl3d2c9r3dl3dr3dl5" DRAW cy$ + "l3ur3ul3ur3ec8l5u5r10d10l10u6" CASE "w" ' FLOODING FOR i = -10 TO 10 STEP 10: CIRCLE (x + i, y), 5, c, 3.1, 0: NEXT FOR i = -15 TO 15 STEP 10: CIRCLE (x + i, y + 5), 5, c, 3.1, 0: NEXT CASE "{": DRAW "bu2l15r30bu6l30bd12r30" CASE "Q" i = 6: DO UNTIL i > 36: CIRCLE (x, y), i, c: i = i * 1.6: LOOP ' QUAKE CASE "U", "R", "E" ' BUS/RV/SUN IF INSTR("/U/R", sym$) THEN DRAW "l2g2lh2r12f2re2" LINE (x - 9, y - 1)-(x + 9, y + 1), c, BF DRAW "l18u5r3d3u3r3d3u3r3d3u3r3d3u3r3f3" IF sm$ = "R" THEN LINE (x - 3, y - 3)-(x + 3, y - 1), c, BF LINE (x, y - 3)-(x + 1, y), 0, BF END IF ELSE IF sm$ = "R" THEN DRAW cW$ + "u3d6bl3u3ludr2udld3br6u3hefg" IF INSTR("UE", sm$) THEN DRAW cy$ + "bl11bu7h5br15u5d6br11bd3e5": CIRCLE (x, y), 11 IF sm$ = "E" THEN DRAW "be7m+15,6m-15,6bl16m-15,-6m+15,-6": CIRCLE (x, y), 4, 11 END IF CASE "M": DRAW c2$ + "u5h2lbd3bl2c10r2f2re2r2fl11" DRAW cy$ + "dr11dl11" + c2$ + "fr9gl7c11dr7gl5r2c0r" CASE "\": DRAW "bd3l8e9f9l11": PAINT (xt, yt - 1), c DRAW "c0bll2gdfr3u6br5bd3l3d4u2r3" '2fh CASE "d", "K" IF sym$ = "\K" THEN DRAW "bg3h6f6e3c12e3l6f4" + cW$ + "f2e6" PAINT (xt, yt - 2), 12 ELSE DRAW "lu4l4d4l2u5m+7,-3m+7,3d5l2u4l4d4l" IF sm$ = "K" THEN DRAW "l11u5r22d5l11r7u13f3dh3" END IF CASE "h" IF adj THEN DRAW "u5r10d3l6bl4l6u3r6d5l6u7r16d7l6u5" ELSE 'DRAW "l11u5r3u7r2d7r5u3r14d3l14r14d5l6u3l3d3l4" LINE (x - 5, y - 4)-(x + 5, y + 4), 9, BF DRAW "c15bu4bl7d3lu6rd3r4u3rd6lu3l4" END IF CASE "V" IF adj THEN DRAW "bd3l4d3r8u3l8h5e4f2ng4r6e2f4g2nh4g3" 'VORTAC ELSE DRAW "bg3c4u6rd6rc14u6rd6rc11u6rd6rc13u6rd6rc9u6rd6" 'ATV DRAW "bf2c15r3l17u10r17d10bh2bu2ubu2u" END IF CASE "g": DRAW ca$ + "bu5g9r4e5f5r4h9c10d9h3e3f3g3uh2e2f2g2" + "TA0" CASE "@": CIRCLE (x, y), 3, c: PAINT (xt, yt - 1), c' DOT IF adj THEN CIRCLE (x + 5, y + 3), 14, c, 0, 2.1 'sthrn x-5 @STORM CIRCLE (x - 4, y + 2), 14, c, 4.2, 6.2'sthrn x+4 y-3 CIRCLE (x + 2, y - 4), 14, c, 2.1, 4.2'sthrn x+4 y+3 END IF CASE "L": DRAW "bl3m+2,-7u2r2d2l2r2m+2,7c10l7r8lbu8" 'Lighthouse DRAW cy$ + "f2bu6g2bl6h2bd6e2" CASE "N": IF adj THEN DRAW "l3m+2,-7m+4,+1m-2,7br11" DRAW "c11g2h2g2h4g2h2g2h2g2h2bd6br4e2f2e2f2" 'Buoy ELSE DRAW "u3r2l4bu2u3rf3u3bd10l3gfr2fgl2bd3bl2m-5,-10m+5,-10er4fm+5,10m-5,9gl4" END IF END SELECT 'IF sym$ = "/T" THEN DRAW "bl6d6u12l2r14g5f5g4u3f3l3" IF INSTR("\`\p\T\(", sym$) THEN CIRCLE (x + 2, y - 2), 5, c, 0, 3.1 'RAINCLOUDS CIRCLE (x + 10, y), 6, c, 0, 2.5 CIRCLE (x - 7, y), 4, c, 0, 3.3 DRAW "br8l4r19bd2bl28r19" ELSEIF sym$ = "/`" THEN DRAW "bf2l5e3r4f3l4bu4eh2u4d3f5r4l4u4l5f3g2" PAINT (xt, yt + 1), c END IF IF INSTR("\U\p", sym$) THEN '(bottom half) SUNNY DRAW cy$ + "bl23r8bd4bf4g5bd4br16u6br10bu3f5bu13r7" CIRCLE (x, y), 11, , 3.1, 0 END IF IF INSTR("\`\e\T", sym$) THEN ' RAIN IF sym$ = "\e" THEN DRAW "bd2l3e4f4l4bl12l3e4f4l4br20e4f4l8" DRAW "bg7bl15e4br8g4br8e4br8g4" END IF IF sym$ = "\T" THEN ' LIGHTENING CIRCLE (x + 3, y - 5), 6, c, 0, 2.7 CIRCLE (x - 4, y - 4), 4, c, .4, 3.4 PSET (x + 5, y), c DRAW "c15bl3u2g6m+5,-11f2m+6,-11m+4,3m-11,13" PAINT (xt + 1, yt - 3), c, 15 END IF END IF 'Only here do OVERLAYS rejoin IF sm$ = "W" THEN CIRCLE (x, y), 9, c'NWS END SUB SUB Drawunit (R, Pp, Tmp$, cc, Live, ons) STATIC x, y, Lx, Ly 'OK = -1: a$ = PS(Pp) ambig = 0: a$ = PS(Pp) IF RS <= 4 AND MID$(a$, 24, 2) = "00" THEN '00/00 posits IF MID$(a$, 34, 2) = "00" THEN ambig = 1 ELSEIF RS <= 1 AND MID$(a$, 25, 1) = " " THEN ambig = .1'gdsq6 ELSEIF RS <= 4 AND MID$(a$, 24, 2) = " " THEN ambig = 1 'DXcalls ELSEIF RS <= 32 AND MID$(a$, 22, 1) = " " THEN ambig = 10 ELSEIF RS <= 256 AND MID$(a$, 21, 2) = " " THEN ambig = 60 END IF CALL ParseA(a$, TY$, LA, LO, sym$) ' 40=60/1.5 screen width DX = CDX - LO IF DX > 270 THEN LO = LO + 360 IF DX < -270 THEN LO = LO - 360 IF RS / (40 * Lfac) > ABS(CDX - LO) AND RS / 50 > ABS(CDY - LA) THEN a = -1 IF a OR sym$ = "\l" THEN ons = -1 'x = Xval(LO) 'removed in 825 ambig 'y = Yval(LA) '825 sm$ = RIGHT$(sym$, 1) Px$ = MID$(a$, 10, 1) es$ = "DrwUnit. Sym=" + sym$ IF LEFT$(sym$, 1) <> "/" THEN adj = -1 un$ = LEFT$(a$, 9) TP$ = MID$(a$, 11, 8) 'Time IF Live = 2 THEN c = 1' for old plots ELSE CALL POScolr(a$, c) END IF Doc = TagsON IF INSTR("/ |\ |\.", sym$) THEN Doc = 0 IF INSTR("_W", sm$) THEN c = 9 'IF LEFT$(sym$, 1) <> "/" AND sm$ = "_" THEN c = 10 ' Blue\Green IF INSTR("WTN", LEFT$(sym$, 1)) THEN c = 10 CALL WXcheck(a$, c) IF Dwx AND Dwx <> 3 THEN Doc = -1 CALL Pwx(MID$(a$, 37), cs$, T$, R$, br$) IF cs$ <> "" THEN un$ = MID$(a$, 14, 5)'time wn$ = MID$(cs$, 6, 3) + MID$(cs$, 10, 2) 'rn$ = MID$(WX$, 18, 3) 'Not used rn$ = MID$(R$, 2) IF Dwx = 9 THEN un$ = RTRIM$(T$) IF rn$ <> "00.00" + CHR$(34) AND LEFT$(R$, 1) <> "#" THEN un$ = un$ + "/" + rn$ ELSEIF Dwx = 8 THEN un$ = un$ + br$ + "/" + rn$ 'ELSEIF Dwx = 9 THEN un$ = un$ + rn$ ELSE un$ = un$ + wn$ + "/" + rn$ END IF END IF END IF END IF IF sm$ = "#" AND adj THEN c = 10 IF Fade AND space = 0 AND MScat = 0 AND INSTR("*+", TY$) = 0 THEN CALL ComputeDelT(TP$, Del) 'was TR$ IF Del > Fade / 60 THEN c = 8: IF Px$ = "I" THEN MID$(PS(Pp), 10, 1) = " "'for old END IF REM draws same, EXCEPT if Prings then it does rings REM if Prings=2 it paints only the rings IF LA <> 0 AND LO <> 0 THEN 'b4 825 was = 'ELSEIF Ambig = 0 THEN 'new 825 ambig DoIt = -1: IF Tmp$ <> "" THEN CALL JustGroups(Pp, sym$, Tmp$, DoIt) IF Px$ <> " " OR DoIt OR Key$ = "*" THEN 'if xnrml IF R THEN c = 11: LINE (x, y)-(Lx, Ly), 0' Erase last replay leader IF DimCol THEN c = 1 END IF x = Xval(LO) 'restored in 825 for ambig y = Yval(LA) '825 IF ambig THEN 'new in 864 x = x + (RND - .5) * Sfac * ambig / 51 '+/- .5 of the ambiguity y = y + (RND - .5) * Sfac * ambig / 51 END IF xo = x yo = y z = 0 CALL ParseVel(a$, sym$, CSE, CSE$, SPD, SPD$, BRG$, QAL$, CMTS, PHG$) Wdth = 0 IF sm$ = "l" THEN 'DO SHAPES REM LTyy/Cxx T is type, /C is color (/0 to 15) T = INT(CSE / 100): c = INT(SPD / 100) 'from Hundreds digits CSE = CSE - T * 100: SPD = SPD - c * 100 'Keep 2 digit offsets c = 10 * c + T'This is to pass C and T to the DRAW routine in C CSE = Yval(LA + (CSE ^ 2) / 1500) 'Increments of 100ths of a deg^2 IF T <> 6 THEN SPD = Xval(LO + (SPD ^ 2) / 1500) IF T = 6 THEN SPD = Xval(LO - (SPD ^ 2) / 1500) 'Opposite Quadrant T = INSTR(46, a$, "{") IF T > 45 THEN Wdth = 182 * VAL(MID$(a$, T + 1, 3)) / RS REM 182 is 1.66 * 128/RS * 6/7 in statute miles ELSEIF DRon AND SPD <> 0 AND CSE <> 0 THEN 'IF INSTR("/_\_/W\W/G", sym$) OR c = 8 THEN IF INSTR("_W", RIGHT$(sym$, 1)) OR c = 8 THEN 'Why was GridSQ too? ELSE CALL ComputeDelT(TP$, Del): dist = SPD * Del IF dist < RS * 2 THEN CALL LOBcal(CSE, dist, LO, LA, LaO, LoO) IF NOT In3D THEN CIRCLE (x, y), 3, 15 ' anchor circle LINE (x, y)-(LoO, LaO), 7 END IF x = LoO' Dead Reckoned position on screen y = LaO IF (c = 7 OR c = 15) AND sm$ <> "@" THEN c = 11 'IF c = 7 OR c = 15 THEN c = 11 END IF IF Dwx = 3 THEN a = INSTR(a$, "/A=") IF a THEN al$ = "/" + MID$(a$, a + 3, 3) + "k'" un$ = MID$(a$, 38, 7) + al$ END IF END IF END IF IF In3D THEN CALL Do3D(x, y) a = INSTR(a$, "/A=") IF a > 37 AND a < LEN(a$) - 7 THEN Altd = VAL(MID$(a$, a + 3, 6)) - AGL: IF Altd < 0 THEN Altd = 0 z = Altd * 292 * yfg * 8 / (Mapsize * 10000): REM was *2 Y1 = 292 * Yft - z LINE (x, y)-(x, Y1), 7 CIRCLE (x, y), 3, 15 y = Y1 ELSE z = 0 END IF END IF IF z = 0 AND y < 238 * Yft AND In3D THEN GOTO Skipit IF sm$ = "@" AND c <> 8 THEN u = INSTR("%%%%%%%%TD HCTS", MID$(a$, 46, 2)) IF u = 0 THEN u = INSTR("%%%%%%%%TD HCTS", MID$(a$, 38, 2)) IF u THEN CSE = 0: SPD = 0 END IF IF u THEN c = u gt = INSTR(40, a$, ">") 'was 48 aa = INSTR(40, a$, "&") 'was 48 CALL LOBcal(CSE + 90, SPD, LO, LA, LaO, LoO) xp = x + (LoO - xo) yp = y + (LaO - yo) CALL Hcane(a$, gt, SPD, xp, yp, 12) CALL Hcane(a$, aa, SPD, xp, yp, 14) END IF END IF 'Dont draw symbol before painting in DF circles, or colors prevent fill IF Prings <> 2 THEN IF ABS(CSE) < 8000 AND ABS(SPD) < 8000 THEN IF ABS(x) < 8000 AND ABS(y) < 8000 THEN IF Dots THEN sym$ = "//" IF ambig = 0 THEN 'new 825 CALL DrawSymbol(sym$, CSE, SPD, x, y, c, Wdth) ELSE CIRCLE (x, y), Sfac * ambig / 51, c 'new 825 ambig END IF END IF END IF END IF IF Pp = 0 AND INSTR("_W", sm$) = 0 THEN CSE = DFhdg IF LdrsON AND CSE <> 0 AND SPD >= 0 AND c <> 8 THEN d = 9 * LOG(SPD + 2) a = (90 - CSE) / 57.3' Draw Leader Lx = x + d * COS(a) / Lfac: Ly = y - d * yfg * SIN(a) lc = 15: IF c = 1 THEN lc = 8 IF sm$ <> " " AND sm$ <> "l" THEN IF INSTR("_W", sm$) AND SPD = 0 THEN Lx = x: Ly = y LINE (x, y)-(Lx, Ly), lc END IF ELSE Lx = x: Ly = y'Used to erase old ones in Replay END IF IF sm$ = "\" THEN 'Process DF bearing info CSE = VAL(BRG$): NRQ = VAL(QAL$) IF CSE > 0 AND NRQ >= 1 AND LdrsON THEN nQ = INT(NRQ / 100): NRQ = NRQ - nQ * 100 R = INT(NRQ / 10) Q = NRQ - R * 10 IF Q >= 8 THEN s = -1 ELSE s = 4 ^ Q - 1 dist = 2 ^ R CALL LOBcal(CSE, dist, LO, LA, LaO, LoO) LINE (x, y)-(LoO, LaO), 14, , s END IF END IF 'DoC = TagsON 'Moved earlier 'IF Dwx THEN DoC = -1 'IF c = 8 THEN DoC = 0 IF sym$ = "\m" THEN ' MILEPOSTS! a = INSTR(38, a$, "{") + 1 IF a > 1 THEN B = INSTR(a, a$, "}") IF B >= a THEN un$ = MID$(a$, a, B - a): x = x - 4 * (1 + B - a) END IF IF RS > 32 THEN Doc = 0 END IF IF sm$ = "i" AND adj THEN Doc = 0 IF Doc AND c <> 8 THEN CALL DoCalls(x, y, sym$, Del, Px$, un$) IF Prings OR (War AND Hooked = Pp) OR Px$ = "I" THEN CALL Dphg(PHG$, d, R, w) IF d <> 0 THEN CALL LOBcal(d, R / 3, LO, LA, y, x) IF Prings = 2 THEN 'Omni-DF c = VAL(MID$(" 8 1 9 7 3 11 5 13 4 12", 1 + cc * 3, 2)) CIRCLE (x, y), Sfac * R / 51, c '60 Sfac PAINT (x, y), c ELSEIF Prings <> 3 OR LEFT$(PHG$, 3) <> "DFS" THEN CIRCLE (x, y), Sfac * R / 51, c '60 Sfac IF Hooked = Pp AND War THEN CIRCLE (x, y), Sfac * w / 51, 12 '60 Sfac END IF 'SkipIt: 'had been here to 819 END IF 'End of Prings Skipit: 'but shoud be here END IF 'If its to be displayed 'ELSE CIRCLE (x, y), Sfac * Ambig / 51, c 'new 825 ambig 'IF c <> 8 THEN CALL DoCalls(x, y, sym$, Del, Px$, un$) 'new 825 ambig END IF 'if LA\LO=0 and not ambiguous ELSE ons = 0 END IF'on screen END SUB FUNCTION Fmt$ (a$, a) B = INT(a - TIMER) B$ = RIGHT$(STR$(INT(B / 60)), 1) SELECT CASE B CASE IS < 0: x$ = "--": B$ = "" CASE IS < 60: x$ = "": B$ = MID$(STR$(B) + " ", 2, 2) CASE IS < 600: x$ = B$: B$ = "m" CASE IS < 1200: x$ = "'" CASE IS < 1800: x$ = CHR$(34) CASE IS < 2400: x$ = "d" CASE IS < 3000: x$ = "f" CASE ELSE: x$ = "_" END SELECT Fmt$ = a$ + x$ + B$ END FUNCTION SUB GetChar (a$) a$ = "": Start = TIMER DO UNTIL a$ <> "" OR TIMER - Start > 30 a$ = UCASE$(INKEY$) IF WxOn AND Wval THEN B$ = INPUT$(LOC(2), 2) LOOP IF a$ = CHR$(13) THEN a$ = "" Key$ = a$ END SUB SUB GetDTG DA$ = MID$(DATE$, 4, 2) HR$ = LEFT$(TIME$, 2) Min$ = MID$(TIME$, 4, 2) DA = VAL(DA$): HR = VAL(HR$) DTG$ = DA$ + HR$ + Min$ 'IF Zulu = 0 THEN ' Force all posits to ZULU HRz = HR - (UTC - DST) 'IF HRz < 0 THEN HRz = HRz + 24: DA = DA - 1 'IF HRz >= 24 THEN 'HRz = HRz - 24: DA = DA + 1 'IF DA > 28 THEN ' MO$ = LEFT$(DATE$, 2) 'IF MO$ = "02" THEN DA = 1 'IF DA > 30 AND INSTR("04060911", MO$) THEN DA = 1 'IF DA > 31 THEN DA = 1 'END IF 'END IF CALL TimeFix(HRz, DA) HR$ = LzN$(HRz, 2) DA$ = LzN$(DA, 2) 'END IF ZTG$ = DA$ + HR$ + Min$ + "z" DTGs$ = DTG$ + " " END SUB SUB Hcane (a$, ga, SPD, xp, yp, c) IF ga THEN HT = VAL(MID$(a$, ga + 1, 3)) IF HT THEN R = ABS(HT - SPD) * Sfac / 51 IF R < 1200 THEN CIRCLE (xp, yp), R, c END IF END IF END SUB SUB HearDisp (Tmp$) CALL NewScrn("POH", 4, 4) PRINT " HEARD @"; ZTG$; " (per hr for last 23 hrs) " LOCATE 2, 60: PRINT " Use F1 for HELP " LOCATE 5, 1: PRINT "--------- ----------------------------------------------------------------------"; LOCATE 4, 1: PRINT "Time(Hrs) "; CALL PHrdLN(0, d$, 23): PRINT d$: PRINT IF Tmp$ = "" THEN CALL SetPage(StrtP, LineP, EndP) IF StrtP = 0 THEN a = 1: PRINT "QUERIES "; CALL PHrdLN(Pmax + 2, d$, 23): PRINT d$ ELSE a = StrtP END IF ELSE a = 1: EndP = LineP END IF FOR i = a TO EndP IF Tmp$ <> "" AND INSTR("hg1", LEFT$(DG(i), 1)) = 0 THEN ELSE PRINT LEFT$(PS(i), 10); CALL PHrdLN(i, d$, 23): PRINT d$ END IF NEXT i: PRINT CALL Bline(4) LOCATE Bln - 2, 61: PRINT "ID's this Hour:"; ID; END SUB SUB HEXDEC (a$, a, N, d) REM HEX>DEC from a for N chars d = 0 FOR i = N TO 1 STEP -1 c = 0 H$ = MID$(a$, a + (i - 1), 1) IF H$ <> "" THEN H = ASC(H$) ELSE H = 0 IF H > 47 AND H < 58 THEN c = H - 48 IF H > 64 AND H < 71 THEN c = H - 55 d = d + c * 16 ^ (N - i) NEXT i END SUB SUB InitMore BestLAT = CDY: BestLON = CDX: BestRNG = RS a$ = ",N,8,1,CS0,DS0,CD0" DEF SEG = 64 ' for subsequent POKES LastGPS = 5 + TIMER - GPSprd NxBCN = TIMER + 8: NxPOS = TIMER + 2' wait for 1st packet IF TNCon OR Modem THEN Com$ = TNCcom$ IF TNCcom$ = "COM1:" THEN hspp = 1020'Port address IF TNCcom$ = "COM2:" THEN hspp = 764 IF TNCcom$ = "COM3:" THEN hspp = 1004: POKE &H0, &HE8: Com$ = "COM1:" IF TNCcom$ = "COM4:" THEN hspp = 758: POKE &H2, &HE8: Com$ = "COM2:" OPEN Com$ + LTRIM$(STR$(TNCbaud)) + a$ FOR RANDOM AS #1 LEN = 2048 CALL InitTNC(1) END IF IF GPSon OR WxOn OR DFon OR Oprt THEN Com$ = GPScom$ IF Com$ = "COM3:" THEN POKE &H0, &HE8: Com$ = "COM1:" IF Com$ = "COM4:" THEN POKE &H2, &HE8: Com$ = "COM2:" OPEN Com$ + LTRIM$(STR$(GPSbaud)) + a$ FOR RANDOM AS #2 LEN = 2048 END IF 'IF NoTel = 0 THEN ' F$ = "APRStel.SYS": CALL FileRead(0) ' CALL PR(a$, "If you understand APRStel and dont want to see this again, hit N") ' IF a$ = "N" THEN NoTel = -1 'END IF IF ScrnType >= 8 THEN COLOR FGC, BGC'was 15,0 IF NewUser THEN LOCATE Bln - 2, 1 PRINT "** MAP is defaulted to Lat/Long/Rng given on 1st 3 lines of MAPLIST.USA file **"; PRINT "** Non-US stations should use text editor to center this map on your country **"; LINE (0, L22)-(639, L24B), 12, B ELSE CALL ShowSetup END IF END SUB SUB InitTNC (All) IF Modem THEN CALL Pause(1): PRINT #1, "ATV1" ' now duplicated in FILE-GET ELSEIF ZipLan = 0 THEN CALL PL1("* Initializing TNC *", 14) Unstr$ = "UN APR" + Ver$ IF Ignore THEN Unstr$ = "UN SPCL" IF AltNet$ <> "" THEN Unstr$ = "UN " + AltNet$ IF MScat OR space OR Gdfmt THEN REM CALL HookedDisp(0): CALL GridSQ(a$, 0): Unstr$ = "UN " + a$ END IF IF Game THEN Unstr$ = "UN GAME" PRINT #1, CHR$(3); CHR$(3); CHR$(3); : Pause (1.1)'get to command mode IF All THEN F$ = "TAPR" IF TNC = -1 THEN F$ = "AEA" IF TNC = 3 THEN F$ = "KAN" IF TNC = 4 THEN F$ = "THD7" IF TNC = 5 THEN F$ = "D700" IF TNC = 8 THEN F$ = "PACC" IF TNC = 9 THEN F$ = "PICO" F$ = "INIT" + F$ + ".TNC" IF All > 99 THEN CALL PR23(F$, a$, "Enter INIT file", 0): F$ = a$ OPEN "SYSTEM\" + F$ FOR INPUT AS #3 DO WHILE NOT EOF(3) LINE INPUT #3, a$ IF LEFT$(a$, 1) <> "*" THEN CALL PIRNT(a$) LOCATE Bln, 1: PRINT a$; END IF LOOP CLOSE #3 END IF CALL PIRNT("") CALL PIRNT(Unstr$ + via$): CALL Pause(.4) CALL PIRNT("MYCALL " + RTRIM$(LEFT$(PS(0), 9))) IF HF THEN IF KAM = 1 THEN CALL PIRNT("~a") IF KAM = 2 THEN CALL PIRNT("|0") ELSEIF TNC = -1 THEN CALL PIRNT("HBAUD 300") CALL PIRNT("VHF off") END IF CALL PIRNT("MAX 1") CALL PIRNT("AX25 off") ELSE IF KAM THEN CALL PIRNT("|A") IF KAM = 2 THEN ' do nothing ELSEIF TNC = -1 THEN CALL PIRNT("HBAUD 1200") CALL PIRNT("VHF on") END IF END IF IF MScat THEN CALL PIRNT("FULL ON") IF HF THEN a$ = HFa$ ELSE a$ = Alias$ IF KAM THEN a$ = HFa$ + "/" + Alias$ CALL PIRNT("MYA " + a$) CALL PIRNT("conv") CALL PL1(" ", 14) LastPkt = TIMER - 3.5 CALL Bline(0) END IF END SUB SUB InitVar (Cfig$, LoadB) PCT$(0) = "PCSAT-n ddhhmm T#000,000,000,000,000,000,11111111,0000,0" PCT$(1) = PCT$(0) FOR i = 1 TO 20: a$ = INKEY$: NEXT'Flush the keyboard buffer FOR i = 0 TO Pmax + 2: HL(i) = SPACE$(23): NEXT a$ = "APR" LoadB = -1 a = INSTR(1, COMMAND$, "/") IF UCASE$(MID$(COMMAND$, a + 1, 3)) = "N" THEN LoadB = 0 ELSEIF a THEN a$ = MID$(COMMAND$, a + 1, 3) END IF Cfig$ = "\CFIG860." + a$ MapFile$ = "APR" CALL InitVGA(a$) 'Alias$ = "RELAY": HFa$ = "ECHO" Alias$ = "": HFa$ = "ECHO" KEY OFF Port$ = "TNC" 'LOCATE Bln - 3, 3 'removed 825. Unknown DecayB = 300: DecayP = 30: DcayO%(1) = 8: DecayM(1) = 8 Filoff = 0'Sets SA filter on RdsON = -1: linsON = -1: WtrON = -1: TagsON = -1: LblsC = 1 Allon = -1: LdrsON = -1: Wrr = -1 Sfac = 40 'a hold over from original map. Lfac = 1'prevents %by0 error before MAP draw Hfac = 1 OnlyBCNs = -1: XMTon = -1: Upload = -1 PBvia$ = " VIA WIDE,WIDE": via$ = PBvia$ Trial = -1' Trial = 600 Free GPS Wval = -1 'free WX 'x Nrml = -1 Wpts = -1 HF = 0 NxWx = -1 Hooked = -1 County = -1 Ignore = 0 DRon = -1 Dwx = 9 Fade = 80 Gfltr = 0 LocFil = 39 '53 for max, 4 for MScatt, 18 for WB4APR-15,WIDE5-5* FGC = 15: BGC = 0 Alarm = -1 GPSprd = 30: PPP = 540 Hrain%(7) = 9 ' tells ParseWX that this is new start LogF = 0 MaxTime = 1800 Wind = 999: Htemp = 999: Ltemp = -99: Ralarm = 99: Wrng = 1024 'wind 999 in 860 'call GetDTG 'NO. doesnt know UTC or ZULU CALL Title CALL PL25(" **| Packet Processing is SUSPENDED while YELLOW-boxed PROMPTS are visible |**", 12) 'FOR i = 1 TO 9: DP(i) = "*": NEXT 'DP(6) = "NO VIA NONE" 'DP(7) = "RW VIA RELAY,WIDE" 'DP(8) = "T3 VIA TRACE3-3" 'DP(9) = "TR VIA TRACE,TRACE,TRACE" 'DP(10) = "W1 VIA WIDE" 'DP(11) = "W3 VIA WIDE3-3" 'DP(12) = "WW VIA WIDE,WIDE" OPEN "SYSTEM\CHARS.SYS" FOR INPUT AS #3 FOR i = 0 TO 36: LINE INPUT #3, Sy$(i): NEXT CLOSE #3 Qstr$ = "?APRS?" 'for startup WPM = 20: MLC = 10: LastALL$ = "" Mgrp$ = "ALL, CQ, QST, DOS" END SUB SUB InitVGA (a$) L01 = 1 * yfc L02 = 2 * L01 L03 = 3 * L01 L05 = 5 * L01 L18 = (Bln - 7) * L01 L19 = (Bln - 6) * L01 L21 = (Bln - 4) * L01 L22 = (Bln - 3) * L01: Strt = L22 L23 = (Bln - 2) * L01 L24 = (Bln - 1) * L01 L25 = Bln * L01 - 1 L24B = L24 - 1 Lm9 = Bln - 9 WIDTH 80, Bln BlnX = Bln / 25 IF ScrnType = 9 THEN PALETTE 6, 6 a$ = MID$(Display$, 3, 1) IF INSTR("HD", a$) = 0 THEN a$ = LEFT$(Display$, 1) END SUB SUB JustGroups (i, sym$, Tmp$, DoIt) DoIt = 0'23456789-123456789=12345678 SMP$ = "'<=>0COPRSUXY[^abefgjkpsuv" Sma$ = "/0>AKS^nsuv" 'Alternate mobiles Swx$ = "(*:<@BDEFGHIJTW_egptw{" sm$ = RIGHT$(sym$, 1) adj$ = LEFT$(sym$, 1) di = INSTR("#&I_W", sm$): IF di > 3 AND adj$ = "/" THEN di = 0 Mp = INSTR(SMP$, sm$): IF adj$ <> "/" THEN Mp = 0 Ma = INSTR(Sma$, sm$): IF adj$ = "/" THEN Ma = 0 Ws = INSTR(Swx$, sm$): IF adj$ = "/" AND INSTR("_W", sm$) = 0 THEN Ws = 0 'IF adj$ <> "/" AND adj$ <> "\" THEN M=1 'Not needed? IF INSTR("hg1", LEFT$(DG(i), 1)) THEN HH = -1 SELECT CASE Tmp$ CASE "DoD": IF di THEN DoIt = -1 CASE "DoH": IF HH THEN DoIt = -1 CASE "DoV": DoIt = -1: IF HH THEN DoIt = 0 CASE "DoW": IF Ws THEN DoIt = -1 CASE "DoM", "DoA": IF Mp OR Ma THEN DoIt = -1 CASE "DoN": IF Ws OR Mp OR Ma THEN DoIt = -1 CASE "DoT", sym$: DoIt = -1 'had had "spcl" 'CASE "DoL": IF c <> 8 THEN Doit = -1 'dupe of Fade CASE "": DoIt = -1 END SELECT IF INSTR("TASR", MID$(PS(i), 10, 1)) AND Tmp$ = "spcl" THEN DoIt = -1 IF INSTR("+*", MID$(PS(i), 11, 1)) AND (Tmp$ = "obj" OR Tmp$ = "DoA") THEN DoIt = -1 END SUB SUB JustPosits (Tmp$) STATIC LineJ Key$ = "J": CALL POSIThdr: Display$ = "POS-J" IF F$ <> "O" THEN OPEN F$ FOR OUTPUT AS #3 cn = 0 FOR i = LineJ TO LineP sym$ = MID$(PS(i), 27, 1) + MID$(PS(i), 37, 1) CALL JustGroups(i, sym$, Tmp$, DoIt) IF Tmp$ = "DoA" AND MID$(PS(i), 26, 1) > "Z" THEN DoIt = -1'lower case n/s IF DoIt THEN cn = cn + 1: CALL Cprint(PS(i), 15, i) IF F$ <> "O" THEN PRINT #3, RTRIM$(PS(i)) END IF IF cn > Lm9 THEN LineJ = i: i = 999 NEXT i: CLOSE #3 IF i < 900 THEN LineJ = 0 N = INT(LineJ / Lm9) + 1 LOCATE 2, 3: PRINT " JUST SELECTED STATIONS through page"; N; ". Hit JUST command again for more..." END SUB FUNCTION LLto$ (L) y = INT(L) IF y >= 0 THEN ym = (L - y) * 60 ELSE ym = (y + 1 - L) * 60 IF y >= 0 THEN y$ = LzN$(y, 3) IF y < 0 THEN y$ = LzN$(ABS(y + 1), 3) ym$ = LzN$(ym * 100, 4) LLto$ = y$ + LEFT$(ym$, 2) + "." + RIGHT$(ym$, 2) END FUNCTION SUB LoadFile (N) 'IF LineP < 1 OR LineL < 1 OR Key$ = "L" THEN 'Key$ = "L" 'FOR i = 1 TO LineP: DG(i) = " ": NEXT i 'LineL = 0: LineP = 0: LineB = 0: LineD = 0 'LineH = 0: LineR = 0: LineDX = 0 'nmg = 0: nsl = 0 'END IF mine = 0 es$ = "T1" IF N = 3 THEN IF LineP < 1 THEN NewF = -1 DO UNTIL EOF(N) LINE INPUT #N, a$ CALL LoadLine(a$, mine, NewF, abt): IF abt THEN EXIT DO LOOP CLOSE #3 END IF 'LnR = r moved to LoadLine END SUB SUB LoadLine (a$, mine, NewF, abt) abt = 0 x$ = LEFT$(a$, 2) d$ = MID$(a$, 3) es$ = "LL" + a$ IF INSTR("s,t,r,n,", x$) AND NOT NewF THEN x$ = "" IF INSTR("s,t,", x$) AND NOT mine THEN x$ = "" SELECT CASE x$ CASE "e,": abt = -1 CASE "f,": F$ = "BAKS\" + d$: OPEN F$ FOR OUTPUT AS #3 LOCATE Bln - 1, 1: PRINT "Saving "; F$ CALL SaveFile: CLOSE #3 IF OnLine = 2 THEN OnLine = 1 'so it wont Redo p, CASE "z,": CALL ZeroLnP: CalActy = TIMER CASE "c,": k = 1: CALL NxtComma(d$, k, B$): CDY = VAL(B$) CALL NxtComma(d$, k, B$): CDX = VAL(B$) CALL NxtComma(d$, k, B$): RS = VAL(B$) CASE "l,": CALL OneMor(LineL, Lmax): LS(LineL) = d$ IF LineL = 1 THEN IF LEFT$(LS(0), 9) = LEFT$(LS(1), 9) THEN mine = -1: LineL = 0 END IF CASE "d,": CALL OneMor(LineD, Pmax): DG(LineD) = d$ CASE "p,": CALL OneMor(LineP, Pmax): PS(LineP) = d$ IF INSTR("+_", MID$(PS(LineP), 11, 1)) THEN MID$(PS(LineP), 11, 1) = "*" CASE "a,": CALL OneMor(LineB, Lmax): BL(LineB) = d$ CASE "r,": CALL OneMor(LineR, mss): Mail(LineR) = d$: LnR = LineR CASE "s,": CALL OneMor(nsl, mss - nmg): Mst$(nsl) = d$ NxMsg(nsl) = TIMER + 60 * RND(TIMER): DecayM(nsl) = 120 CASE "t,": CALL OneMor(nmg, mss - nsl): Msg$(nmg) = d$ CASE "n,": HL(LineH) = MID$(d$, 10): CALL OneMor(LineH, Pmax) CASE "x,": DX(LineDX) = d$: CALL OneMor(LineDX, 10) END SELECT END SUB SUB LoadName CALL ClrScn Display$ = "OTHR" FILES "BAKS\*.*" CALL PR23("", a$, "File to reload (B for BACKUP):", 0) F$ = a$ IF F$ = "B" THEN F$ = "BACKUP.BK" END SUB SUB LTSTdisp CALL NewScrn("LSL", 2, 2) PRINT " STATUS PACKET (RECEIVED is LOCAL time. z is UTC)" CALL StatusLine CALL SetPage(StrtL, LineL, EndL) CALL PrintL(StrtL, EndL)'KEEP sub cuz used elsewhere CALL Bline(2) END SUB SUB OneMor (a, amax) a = a + 1: IF a > amax THEN a = amax END SUB SUB OrderLTST CALL PRa("", "Ordering LATEST STATUS with latest last....") FOR i = 1 TO LineL FOR j = i + 1 TO LineL IF MID$(LS(j), 11, 6) < MID$(LS(i), 11, 6) THEN SWAP LS(j), LS(i) NEXT j NEXT i CALL PL24("Ordering POSITS list with latest last...", 14) FOR i = 1 TO LineP FOR j = i + 1 TO LineP IF MID$(PS(j), 12, 6) < MID$(PS(i), 12, 6) THEN SWAP PS(j), PS(i) SWAP DG(j), DG(i) SWAP HL(j), HL(i) SWAP NxOBJ(j), NxOBJ(i) SWAP DcayO%(j), DcayO%(i) IF NxWx = i THEN NxWx = j ELSEIF NxWx = j THEN NxWx = i END IF END IF NEXT j NEXT i CALL ShowSetup END SUB SUB Page (B$, CYT, abort, Ext$) RSfac = 0: abort = 0 IF B$ = "I" THEN RSfac = 2: size = -Lm9' Page-UP IF B$ = "Q" THEN RSfac = .5: size = Lm9 ' Page-DN IF B$ = CHR$(132) THEN RSfac = 8 ' CTRL-up IF B$ = "V" THEN RSfac = .125 ' CTRL-dn IF B$ = "G" THEN RSfac = 1 ' HOME IF RSfac = 0 THEN abort = -1 ELSE abort = 0 LPfac = CINT((CYT - 5.5 * yfc) / L01) SELECT CASE LEFT$(Display$, 2) CASE "LS": StrtL = StrtL + size: Key$ = "L" IF B$ = "G" THEN LM = StrtL + LPfac IF LM > 0 THEN CALL FindP(LEFT$(LS(LM), 9)) IF PM > -1 THEN Key$ = "C" END IF CASE "PO": StrtP = StrtP + size: Key$ = "P" IF B$ = "G" THEN PM = StrtP + LPfac: Key$ = "C" IF Display$ = "POH" THEN Key$ = "H" IF Display$ = "POD" THEN Key$ = "D" CASE "AL": StrtB = StrtB + size: Key$ = "A" CASE ELSE: RS = RS * RSfac: Mapsize = Mapsize * RSfac Ext$ = "": Key$ = "" IF CPX > 93.5 + .175 * (CPY - 29.75) THEN a$ = "CEN" IF CPX > 109 THEN a$ = "WES" IF CPX > 104 AND CPY > 42 THEN a$ = "NW" ELSEIF CPY < 36.5 THEN a$ = "SE" ELSEIF CPX < 73.4 AND CPY > 41.1 THEN a$ = "NEA" ELSEIF CPX < 77 + .6 * (46.5 - CPY) THEN a$ = "EAS" ELSE a$ = "MID" END IF IF a$ <> MapFile$ THEN IF INSTR("USA CEN WES NW SE NEA EAS MID", MapFile$) THEN Ext$ = "Below 32mi, Consider M-C-C to ." + a$ END IF END IF END SELECT: B$ = "" END IF REM Key$ points to routine END SUB SUB PassWD (a$, c$, Val$) ' omitted in version 860 END SUB SUB Pause (T) 'IF T = .05 THEN PRINT #1, CHR$(13); 'Now moved to PIRNT routine Begintime = TIMER IF T <= .1 THEN a = 2: REM .001 is 1 char at 9600 IF TNCbaud = 2400 THEN a = 4 IF TNCbaud <= 1200 THEN a = 8 T = T * a IF TNC >= 8 THEN T = T * 2 'slow down for Pico's END IF DO WHILE TIMER <= Begintime + T IF TIMER < Begintime THEN Begintime = TIMER 'midnight restart LOOP END SUB SUB PHrdLN (i, d$, L) d$ = "" FOR j = 1 TO L a = ASC(MID$(HL(i), j, 1)) - 32 IF a > 0 THEN a$ = RIGHT$(STR$(a), 2) ELSE a$ = " ." d$ = d$ + a$ + " " NEXT j END SUB SUB PIRNT (a$) PRINT #1, a$; CHR$(13); CALL Pause(.05) END SUB SUB PL1 (z$, c) IF Doz = 0 THEN LOCATE 1, 61: PRINT LEFT$(z$ + SPACE$(20), 20); LINE (436, 0)-(639, L01), c, B END IF END SUB SUB PL118 (z$, c) IF Doz = 0 THEN LOCATE 1, 12: PRINT LEFT$(z$ + SPACE$(43), 43); IF c <> 0 THEN LINE (85, 0)-(434, yfc), c, B END IF END SUB SUB PL2 (a$, c) IF Doz = 0 THEN LOCATE 2, 54 PRINT LEFT$(a$ + SPACE$(26), 27); LINE (424, L01)-(639, L02), c, B END IF END SUB SUB PL24 (a$, c) IF Doz = 0 THEN LOCATE Bln - 1, 1: PRINT LEFT$(a$ + SPACE$(80), 80); LINE (0, L23)-(639, L24B), c, B END IF END SUB SUB PL25 (a$, c) IF Doz = 0 THEN LOCATE Bln, 1 PRINT LEFT$(a$ + SPACE$(80), 80); LINE (0, L24)-(639, L25), c, B END IF END SUB SUB PL4 (a$, c) IF Doz = 0 THEN LOCATE 4, 2: PRINT LEFT$(a$ + " ", 12) L = LEN(a$) + 1: IF L < 11 THEN L = 10 LINE (0, L03)-(L * 8 + 2, 4 * yfc), c, B END IF END SUB SUB PlotCur (LL$) IF Doz = 0 THEN CALL PutCur CUX = 320 + Sfac * (CDX - CPX) * Hfac CUY = Ycen + Sfac * (CDY - CPY) * yfg IF ABS(CUX) > 10000 THEN CUX = -50 IF ABS(CUY) > 10000 THEN CUY = -50 IF In3D THEN CALL Do3D(CUX, CUY) CALL PutCur CALL XYtoLL(CPY, CPX, "/", LL$)'LALO$ LOCATE 2, 3: PRINT LEFT$(LL$, 8) LOCATE 3, 2 IF CmpFmt = 10 THEN LOCATE 2, 3: PRINT LEFT$(STR$(CPY), 8) LOCATE 3, 2: PRINT LEFT$(STR$(CPX), 8) ELSE LOCATE 2, 3: PRINT LEFT$(LL$, 8) LOCATE 3, 2: PRINT MID$(LL$, 10, 9) END IF IF CPY < 49 THEN ELSEIF CPX > 8 THEN ELSEIF CPY > 60 OR CPX < -2 THEN REM ELSE CALL LLtoNGR(CPX, CPY) 'N G R FOR UK! END IF END IF END SUB SUB POScolr (a$, c) c = 12 IF MID$(a$, 10, 1) <> "A" THEN SELECT CASE MID$(a$, 11, 1) CASE "@", "=": c = 15 'White = APRS CASE "*": c = 13 'Violet for Objs CASE "[", "/", ">", "!": c = 7 CASE "_": c = 1 CASE "+": c = 14 'Yellow for your uplinked posits CASE "-": c = 8'Turns off KILLED object (had been sym$=" " END SELECT SELECT CASE MID$(a$, 51, 4) CASE "/M7/": c = 12 CASE "/M6/": c = 4 CASE "/M5/": c = 14 CASE "/M4/": c = 6 END SELECT END IF END SUB SUB POSIThdr IF Filoff THEN c = 4 ELSE c = 3 IF Key$ = "J" THEN c = 14 CALL NewScrn("POS", 11, c) IF Filoff THEN PRINT " PFilter=30 ft and all WX/DF data will be saved. " ELSE PRINT " POSITIONS (80 yard Pos filter is on) " END IF LOCATE 4, 1: PRINT "CALL/NAME @"; ZTG$; " LAT LONG CSE SPD Comments " LOCATE 5, 1: PRINT "--------- -------z--------T---------$--- --- -----------------------------------" LOCATE 2, 52: PRINT "Use J cmd for symbol groups" CALL Bline(c) LOCATE 6, 1 END SUB SUB PR (a$, T$) IF T$ = "H" THEN T$ = "Hit any key to continue..." CALL PL25(" " + T$ + " ? _", 14) CALL GetChar(a$) CALL PL25("", 0) END SUB SUB PR23 (a$, B$, p$, N) CALL PRa(a$, p$) IF N THEN PRINT " or N? "; LINE INPUT B$ p$ = B$ B$ = UCASE$(B$) IF B$ = "" THEN B$ = a$ IF B$ = "N" THEN B$ = "" CALL PRb END SUB SUB PR2N (a, p$) CALL PRa(STR$(a), p$) INPUT B$ IF B$ <> "" THEN a = VAL(B$) CALL PRb END SUB SUB PRa (a$, p$) LOCATE Bln - 2, 1 PRINT SPACE$(80); LOCATE Bln - 2, 1 PRINT " "; p$; " [" + a$ + "]"; LINE (0, L22 - 1)-(639, L23), 14, B END SUB SUB PRb LOCATE Bln - 2, 1: PRINT SPACE$(80); LINE (0, L22 - 1)-(639, L23), BGC, B END SUB SUB Print25th (a, a$) B$ = a$ IF Hooked < 0 AND Display$ <> "VIEW" AND NOT Borders AND Doz = 0 THEN IF a > 2 THEN CALL PL25("", 0) IF Junk THEN FOR i = 1 TO LEN(B$) IF MID$(B$, i, 1) < " " THEN i = 999: B$ = "Embedded Ctrl-Chars. Packet not displayed" NEXT i END IF LOCATE Bln, a: PRINT LEFT$(B$, 80 - a); END IF END SUB SUB PutCur IF CUX > 4 AND CUY > 3 AND CUX < 635 AND CUY < 343 * yfg THEN PUT (CUX - 4, CUY - 3), Crsr, XOR END IF END SUB SUB Query STATIC Stn$ CALL PR(B$, "Query for: All, Directs, Heard-other, Msgs, Objects, Posit, Rng, Status, Trace") IF B$ = "R" AND INSTR(via$, "GATE") = 0 THEN IF HF THEN Qrng = 4096 ELSE Qrng = 64 MID$(HL(Pmax + 2), 1) = CHR$(ASC(HL(Pmax + 2)) + 1) CALL PR2N(Qrng, "Enter Query radius in miles") Qstr$ = "?APRS?" + LEFT$(STR$(CPY), 6) + "," Qstr$ = Qstr$ + LEFT$(STR$(-CPX) + " ", 7) + "," + STR$(Qrng) ELSE CALL PR23(Stn$, a$, "Station to Query", 0) Stn$ = a$ SELECT CASE B$ CASE "A": x$ = "RS?" CASE "P", "M", "O", "S", "D", "T": x$ = "RS" + B$ CASE "H" CALL PR23("", c$, "Enter station or object to query " + a$ + " for", 0) x$ = x$ + "RS" + B$ + " " + LEFT$(UCASE$(c$) + " ", 9) CASE ELSE: x$ = "RS?" END SELECT Qstr$ = ":" + LEFT$(Stn$ + " ", 9) + ":?AP" + x$ + " }" + ACK$ END IF Qc = 1 END SUB SUB SaveFile PRINT #3, "c,"; CDY; ","; CDX; ","; RS FOR i = 0 TO LineL: PRINT #3, "l,"; RTRIM$(LS(i)): NEXT i FOR i = 1 TO LineP: PRINT #3, "d,"; RTRIM$(DG(i)): NEXT i FOR i = 1 TO nsl: PRINT #3, "s,"; Mst$(i): NEXT i FOR i = 1 TO nmg: PRINT #3, "t,"; Msg$(i): NEXT i FOR i = 1 TO LineP: PRINT #3, "p,"; RTRIM$(PS(i)): NEXT i FOR i = 1 TO LineB: PRINT #3, "a,"; RTRIM$(BL(i)): NEXT i a = LnR FOR i = 1 TO mss a = a + 1: IF a > mss THEN a = 1 PRINT #3, "r,"; RTRIM$(Mail(a)) NEXT i FOR i = 0 TO LineP: PRINT #3, "n,"; LEFT$(PS(i), 9) + RTRIM$(HL(i)): NEXT i FOR i = 0 TO 9: PRINT #3, "x,"; DX(i): NEXT i CALL Noise(2): LINE (0, L22)-(639, L24), 14, B END SUB SUB SaveName CALL PR23(F$, a$, "Enter filename (B=BACKUP) ", 1) F$ = a$ 'IF F$ = "N" THEN F$ = "NONE" 'its in PR23 now ="" IF F$ = "B" THEN F$ = "BACKUP" CALL PL24("", 0): LOCATE Bln - 1, 2 CALL SetSubDir("BAKS", "BK") END SUB SUB SetPage (StrtX, LineX, Endx) IF StrtX > LineX THEN StrtX = 0 IF StrtX < 0 THEN StrtX = Lm9 * INT(LineX / Lm9) Endx = StrtX + Lm9: IF Endx > LineX THEN Endx = LineX LOCATE 5, 70 IF LineX > Lm9 THEN PRINT "Pg"; INT((StrtX + 14) / Lm9) + 1; PRINT "of"; STR$(INT(LineX / Lm9) + 1); END IF LOCATE 6, 1 END SUB SUB SetPosRate IF (SPM = 0) OR HSP THEN CALL PR2N(GPSprd, "Enter GPS/LORAN/WX/DF screen refresh rate in secs") IF GPSprd < 1 AND DFon THEN GPSprd = 1 IF GPSprd < 5 AND WxOn THEN GPSprd = 5 IF GPSprd < 5 AND (GPSon OR STSon) THEN GPSprd = 5 END IF CALL PR2N(PPP, "Enter transmit rate for GPS/WX/DF packets in secs") NxPOS = TIMER: DecayP = INT(PPP / 2) IF PPP < 10 THEN PPP = 10 END SUB SUB SETUP (a$, Oprd) STATIC FL$ CALL PR(a$, "SETUP: Config, DF>, Formats>, GPS>, Modes>, Other>, Ports, Rates, SAVE, TNC") IF a$ = "C" THEN CALL GetConfig: CALL InitMore ELSEIF a$ = "D" THEN CALL PR(a$, "DF SETUP: DFSP, J-dfJr, MAGvar") SELECT CASE a$ CASE "M" CALL PR2N(MagVar, "Enter mag-var in degrees for DF beam headings (W is -)") MagVar = INT(MagVar) CASE "D": IF DFSP THEN DFSP = 0 ELSE DFSP = 55 CASE "J": IF DFSP THEN DFSP = 0 ELSE DFSP = 66 END SELECT ELSEIF a$ = "P" THEN CALL GetPorts: CALL InitMore ELSEIF a$ = "T" THEN CALL InitTNC(999) ELSEIF a$ = "R" THEN CALL SetPosRate ELSEIF a$ = "S" THEN a$ = "SAVE" ELSEIF a$ = "O" THEN CALL PR(a$, "OTHER: AGL, Beeps, DST, Game, Lock, MidniteSav, Redraw, SSavr, Vcnty, Zone") SELECT CASE a$ CASE "A": CALL PR2N(AGL, "Avg gnd level above sea level (FT)") CASE "M": Dsave = NOT Dsave CASE "L": Lok = NOT Lok CASE "S": SSvr = NOT SSvr CASE "R": ReDrw = NOT ReDrw IF ReDrw THEN CALL PR2N(ReDrwT, "Enter Re-draw period in seconds") CASE "B": BEEPSoff = NOT BEEPSoff CASE "E": CALL PR2N(B, "CRASH TEST other BASIC screen modes (2,8,9,?), ENTER to abort") SCREEN B: Bln = 25: yfc = 14 * Yft: CALL InitVGA(a$) CASE "G": Game = NOT Game: IF Game THEN MyMove = 0: HisMove = 0 CASE "D": DST = NOT DST CASE "V": Vcnty = NOT Vcnty CASE "Z": CALL PR2N(UTC, "Enter new time zone (-5 = EST)") END SELECT ELSEIF a$ = "M" THEN CALL PR(a$, "MODES: Autospace, altNet, Master, OutNEWgga, Special, WayPTS, ZipLan") SELECT CASE a$ CASE "A": IF Auto THEN Auto = 0 ELSE Auto = space: Success = 0 CASE "N": p$ = "Enter AltNet TO address" CALL PR23(AltNet$, a$, p$, 1) AltNet$ = a$: CALL InitTNC(0) CASE "S" Ignore = NOT Ignore IF Ignore THEN OnlyBCNs = -1 CALL InitTNC(0): CALL ControLine CASE "Z": IF ZipLan THEN ZipLan = 0 ELSE ZipLan = -1 CASE "O": IF Oprt THEN Ogga = NOT Ogga 'CASE "M": IF ZipLan = 1 THEN ZipLan = 0 ELSE IF ZipLan = 0 THEN ZipLan = 1 CASE "M": IF Palias$ = "" THEN Palias$ = ",ZDIGI": ZipLan = 0 ELSE Palias$ = "" CASE "W": Wpts = NOT Wpts END SELECT CALL PL2("", 0) ELSEIF a$ = "F" THEN CALL PR(a$, "FORMATS: 3rdParty, Compressed, Decimal, Grid-Square, [GG##gg], Mscatter, NORMAL, Space") SELECT CASE a$ CASE "3": CmpFmt = 3 CASE "C": CmpFmt = -1 CASE "D": CmpFmt = 10 CASE "G": Gdfmt = -1 CASE "[": Gdfmt = 99 CASE "S": space = NOT space IF space THEN Success = 0: AltT = 0 ELSE Auto = 0 CASE "N": space = 0: MScat = 0: Auto = 0: LocFil = 39: Gdfmt = 0: CmpFmt = 0 CASE "M": MScat = -1: LocFil = 4 CALL PR2N(H, "Enter beam heading") H = 48 + H / 10: IF H > 57 THEN H = H + 7 CALL PR2N(p, "Enter transmitter power") p = 48 + INT(SQR(p / 100)): IF p > 57 THEN p = 57 IF p < 49 THEN p = 49 CALL PR23("", a$, "Enter BText if any", 0) MID$(LS(0), 1, 17) = Uid$ + " " + DTGs$ MID$(LS(0), 26) = a$ + "^" + CHR$(H) + CHR$(p) + SPACE$(99) CALL PR2N(Ms, "Enter XMT duty cycle in percent") MSectr = 1: PBvia$ = "": NewVia$ = "": CALL DigiDo(0) 'SECTRS EW$ = MID$(PS(0), 28, 3): NS$ = MID$(PS(0), 19, 2) IF EW$ <= "095" AND NS$ <= "38" THEN MSectr = 2 IF EW$ > "095" AND NS$ <= "38" THEN MSectr = 3 IF EW$ > "095" AND ND$ > "38" THEN MSectr = 4 CALL PR2N(MSectr, "NE=1, SE=2, SW=3 & NW=4. Select transmit sector") END SELECT CALL InitTNC(0) CALL PL2("", 0) ELSEIF a$ = "G" THEN CALL PR(a$, "GPS: DGPS, Modes>, Off/On-GPS, Plot, Timesync, Waypoints") SELECT CASE a$ CASE "D": DGPSon = NOT DGPSon CASE "T": GetGPStime = -1 CASE "O": NoGPS = NOT NoGPS 'CASE "P": CALL DoSATS(0, a$) 'removed 861 (plotted GPS Sat sky plot) CASE "W" FOR i = 1 TO LineP TY$ = MID$(PS(i), 11, 1) IF TY$ <> "-" AND TY$ <> "_" AND GPSon AND Trial THEN LAT$ = MID$(PS(i), 19, 7) + "," + MID$(PS(i), 26, 1) + "," 'w26&33 LON$ = MID$(PS(i), 28, 8) + "," + MID$(PS(i), 36, 1) + "," 'w35&43 Name$ = RTRIM$(LEFT$(PS(i), 9)) dsh = INSTR(Name$, "-") IF dsh > 1 THEN Name$ = LEFT$(Name$, dsh - 1) + MID$(Name$, dsh + 1) Name$ = LTRIM$(RIGHT$(" " + RTRIM$(LEFT$(PS(i), 9)), 6)) WPT$ = "$GPWPL," + LAT$ + LON$ + Name$ PRINT #2, WPT$; CHR$(13); CHR$(10); END IF NEXT CALL PRa("", "On Garmin 45, waypoints not shown until after Pwr Off-On cycle, I think?") CASE "M": CALL PR(a$, "GPS MODES: BothGGA/RMC, ESP, GGA, HSP, Klynas, My$, NMEAlog, RMC, SPM") SELECT CASE a$ CASE "B": DGGA = 0 CASE "G": DGGA = 7 CASE "R": DGGA = -7 CASE "K": STSon = -1 CASE "H", "E": HSP = NOT HSP: SPM = HSP IF HSP = -1 THEN PPP = 180: NoGPS = 0'was Gval=0 IF HSP AND a$ = "E" THEN HSP = -2 CASE "S": IF SPM THEN SPM = 0 ELSE SPM = -1: PPP = 180: NoGPS = 0: a$ = ""'to force ALTval=0, was Gval=0 CASE "M": IF SPM <> 99 THEN SPM = 99 ELSE SPM = 0 CASE "N" IF Nlog THEN CALL PL118("CLOSING FILE " + FL$, 14) CALL Noise(2): CLOSE #4: Nlog = 0 ELSE Nlog = -1 FL$ = "logs\NMEA" + MID$(DTGs$, 3, 4) + "." + LEFT$(DTGs$, 2) CALL PL118("OPENING NMEA FILE: " + FL$, 14): CALL Noise(2) OPEN FL$ FOR OUTPUT AS #4 END IF END SELECT END SELECT END IF CALL PL25("", 0) CALL ShowSetup END SUB SUB ShowSetup LOCATE Bln - 2, 1 IF Vusr THEN a$ = " VAL " ELSE a$ = " new " IF DFSP = 55 THEN a$ = " DFS " 'was AND Dval IF DFSP = 66 THEN a$ = " DFj " 'was AND Dval PRINT a$; a$ = "| TNC " IF TNC = -1 THEN a$ = "| AEA " IF TNC = 3 THEN a$ = "| KAN " IF TNC = 4 THEN a$ = "|THD7 " IF TNC = 5 THEN a$ = "|D700 " IF TNC >= 8 THEN a$ = "| PAC " IF WxOn THEN a$ = "| wx ": IF WxOn < -3 THEN a$ = "| dvs " IF DFon THEN a$ = "| DF " IF SPM THEN a$ = "| spm ": IF SPM = 99 THEN a$ = "| my$ " IF HSP THEN a$ = "| hsp " IF HSP = -2 THEN a$ = "| esp " IF GPSon THEN a$ = "| gps " IF STSon THEN a$ = "|strts" IF Oprt THEN a$ = "|G-OUT" IF Ogga THEN a$ = "|G-ALL" IF Modem THEN a$ = "|MODEM" IF Gval AND (GPSon OR SPM) <> 0 THEN a$ = UCASE$(a$) 'IF DFon <> 0 THEN a$ = UCASE$(a$) 'was AND Dval 'IF Wval AND WxOn <> 0 THEN a$ = UCASE$(a$) 'IF STSon THEN a$ = UCASE$(a$) IF NoGPS THEN a$ = "| OFF " PRINT a$; a$ = "|" + STR$(TNCbaud) + STR$(UTC) IF DST THEN a$ = a$ + "D" ELSE a$ = a$ + " " IF SSvr THEN a$ = "| SCRNSVR" IF AGL THEN a$ = "| AGL=" + STR$(AGL) IF ReDrw THEN a$ = "| REDRAW" IF Lok THEN a$ = "| LOCKED" PRINT LEFT$(a$ + " ", 10); IF LogW THEN PRINT "|LogW"; ELSE PRINT "|"; WPM; a$ = "| " IF GPSon OR SPM THEN IF DGGA < 0 THEN a$ = "|RMC" IF DGGA > 0 THEN a$ = "|GGA" END IF IF Gfltr THEN PRINT "|GFL"; ELSE PRINT a$; IF Junk THEN a$ = "| JUNK " ELSE a$ = "|filtrs" IF Ignet THEN a$ = "|Ignore" PRINT a$; PRINT "|"; RIGHT$(STR$(GPSprd) + "/" + MID$(STR$(PPP), 2), 7); IF BEEPSoff THEN a$ = "|beep" ELSE a$ = "|BEEP" IF DGPSon THEN PRINT "|DGPS"; ELSE PRINT a$; IF HF THEN a$ = HFa$ ELSE a$ = Alias$ PRINT "|MYA "; LEFT$(a$ + " ", 5); a$ = "" 'FOR i = 1 TO 3 ' a$ = a$ + "|" + Altpath$(i) + RIGHT$(STR$(AltT(i)), 2) 'NEXT i: PRINT LEFT$(a$ + SPACE$(14), 15); PRINT "|"; LEFT$(MapFile$ + " ", 4); CALL ControLine LINE (0, L22 - 1)-(639, L23), 12, B END SUB SUB SymDo (a$, B$, c$, d$, Tmp$) FOR i = 1 TO LEN(B$) IF MID$(B$, i, 1) = a$ THEN Tmp$ = MID$(d$, i, 1) + MID$(c$, i, 1) NEXT i END SUB SUB SymShow STATIC adj$, inc CALL ClrScn IF inc = 0 THEN inc = 1 ELSE inc = 0 Xstp = 0: Ystp = 0: R = 2: clm = 1 FOR i = 32 TO 125 sm$ = CHR$(i): adj$ = "\" IF INSTR("/#&>0Aacnsuv^_W)", CHR$(i)) THEN adj$ = "3" IF Xstp > 590 THEN Xstp = 0: Ystp = Ystp + 28 * yfg clm = 1: R = R + 28 * yfg / yfc' (usually 2) END IF x = 21 + inc + Xstp y = 14 * yfg + 8 + inc + Ystp c = 15: IF sm$ = "l" THEN c = 14: x = x + 8: y = y + 8'14 wont blowup IF INSTR("_W", sm$) THEN c = 9 CALL DrawSymbol("/" + sm$, 0, 0, x, y, c, 0) IF sm$ = "_" THEN c = 10 CALL DrawSymbol(adj$ + sm$, 0, 0, x + 20, y, c, 0) LOCATE R, clm: PRINT sm$; Xstp = Xstp + 72: clm = clm + 9 NEXT i LOCATE 22 * BlnX, 37 PRINT "Table [/] for left one, Table [\] for right" END SUB SUB SymType (sym$) STATIC s$(), cc(), N es$ = "Cant find new file SYSTEM\SYMBOLS.145" IF s$(0) <> "//None" THEN CALL PL25(" Loading SYM table...", 13) DIM s$(145): OPEN "system\Symbols.145" FOR INPUT AS #3 'was 125 in 792 DIM cc(9) 'was 135 to 819 DO UNTIL EOF(3) N = N + 1: INPUT #3, s$(N) LOOP '115 s$(0) = "//None" CLOSE #3 END IF a$ = "?" x$ = "Enter first letter of Symbol name until found. Then select choice" DO WHILE a$ <> "" AND (a = 0 OR a > c) IF a$ < "A" OR a$ > "z" THEN CALL PR(a$, x$) c = 0: p$ = "" FOR i = 1 TO N IF UCASE$(LEFT$(a$, 1)) = MID$(s$(i), 3, 1) THEN c = c + 1: cc(c) = i p$ = p$ + STR$(c) + "." + MID$(s$(i), 3)' + " " 'dropped in 840 END IF NEXT i c$ = "Select: ": IF c > 7 THEN c$ = "" 'was 6 IF a$ <> "" THEN CALL PR(a$, c$ + p$) a = VAL(a$) LOOP adj$ = LEFT$(s$(cc(a)), 1) sm$ = MID$(s$(cc(a)), 2, 1) IF adj$ = "\" AND INSTR("/#&0>A^acinsuv_W)", sm$) THEN 'also SymShow CALL PR(B$, "Enter AlphaNumeric overlay character") IF Tao(adj$) > -1 AND B$ <> "" THEN adj$ = B$ END IF IF a$ <> "" THEN sym$ = adj$ + sm$ END SUB FUNCTION Tao (a$) Tao = -1 IF a$ >= "A" AND a$ <= "Z" THEN Tao = ASC(a$) - 54 IF a$ >= "0" AND a$ <= "9" THEN Tao = VAL(a$) IF a$ = "0" THEN Tao = 10 IF a$ = "\" THEN Tao = 0 END FUNCTION SUB TimeFix (HRz, DA) IF HRz < 0 THEN HRz = HRz + 24: DA = DA - 1 IF HRz >= 24 THEN HRz = HRz - 24: DA = DA + 1 IF DA > 28 THEN MO$ = LEFT$(DATE$, 2) IF MO$ = "02" THEN DA = 1 IF DA > 30 AND INSTR("04060911", MO$) THEN DA = 1 IF DA > 31 THEN DA = 1 END IF END IF END SUB SUB ToGo IF Doz THEN ELSE LOCATE 1, 61 IF TNCon THEN IF XMTon THEN c = 12: z$ = "ToGo:" ELSE c = 13: z$ = "OFF! " z$ = z$ + Fmt$("S", NxBCN) + Fmt$(" P", NxPOS) IF OBJ THEN z$ = z$ + Fmt$(" O", NxOBJ) IF nsl > 0 AND MsgsAre THEN z$ = z$ + Fmt$(" M", NxMsg) IF Qc > 0 THEN CALL Xmit(1, Qstr$): Qc = 0 END IF LOCATE 1, 56: PRINT MID$(DTG$, 3); IF Zulu THEN PRINT "z"; ELSE PRINT " "; CALL PL1(z$, c) IF LEFT$(Display$, 3) = "POS" THEN LOCATE 4, 12: PRINT ZTG$ IF Display$ = "LSL" THEN LOCATE 4, 19: PRINT ZTG$ a = 0: a$ = "GPS/DF/WX" IF STSon THEN CALL PL118("", 0) IF GetGPStime THEN CALL PL118("WAITING FOR NEXT GPS TIME...", 10) ''IF STSon AND Sval = 0 THEN a = 1: a$ = " Streets " 'IF (GPSon OR SPM) AND Gval = 0 THEN a = 1 'IF (DFon OR DFSP) AND Dval = 0 THEN a = 1 'IF WxOn AND Wval = 0 THEN a = 1 'IF a THEN CALL PL118(" Alt-S SAVE TO ENABLE " + a$, 14) LOCATE 1, 60 IF TIMER - LastPkt > 13 THEN IF TNCon AND XMTon AND LEN(via$) > 7 AND MID$(via$, 6, 4) <> "GATE" THEN LastPkt = TIMER + 3600' To cancel further IF TIMER - HrdMe > 23 AND NOT MScat THEN LOCATE Bln, 1: PRINT " APRS did not see a DIGIpeat of your last packet... "; LINE (1, L24)-(408, L25), 12, B END IF END IF END IF M$ = " Mode is set to " M1$ = "" IF Pon THEN M$ = "PRINT" p = Pon 'bmOSTWP IF p AND 1 THEN M1$ = " Blns" IF p AND 2 THEN M1$ = M1$ + ",Msgs" IF p AND 4 THEN M1$ = M1$ + ",Obj" IF p AND 8 THEN M1$ = M1$ + ",Sta" IF p AND 16 THEN M1$ = M1$ + ",Trf" IF p AND 32 THEN M1$ = M1$ + ",Wx" IF p AND 64 THEN M1$ = M1$ + ",Pos" END IF 'IF Trial AND (GPSon OR SPM <> 0) THEN M1$ = "try GPS" + STR$(INT(Trial / 60)) + "m" IF Vcnty THEN M1$ = "VcntyOFF" IF Dsave THEN M1$ = "DAILY-SV" IF Ignore THEN M1$ = "SPECIAL" IF Wpts = 0 THEN M1$ = "WayPTs off" IF ZipLan = -1 THEN M1$ = "ZipLan" IF Palias$ <> "" THEN M1$ = "MASTER" IF Nlog THEN M1$ = "NMEA LOG" IF space THEN M1$ = "SPACE" IF space AND Success THEN M1$ = "SUCCESS" IF Auto AND Success = 0 THEN M1$ = "AUTO!" IF Gdfmt THEN M1$ = "GS=" + Grid$ IF AltNet$ <> "" THEN M1$ = AltNet$ IF MScat THEN M$ = "MScat Sectr" + STR$(MSectr) + STR$(Ms) + "% Secs ": M1$ = RIGHT$(TIME$, 2) IF M1$ <> "" THEN CALL PL2(M$ + M1$, 14) END IF END SUB FUNCTION Valu (x$, p) Valu = 256 * ASC(MID$(x$, p + 1, 1)) + ASC(MID$(x$, p, 1)) END FUNCTION SUB XYtoLL (LAT, LON, alt$, LALO$) LO = LON IF LAT >= 0 THEN HM$ = "N" ELSE HM$ = "S" IF LON >= 0 THEN EW$ = "W" ELSE EW$ = "E" IF LON > 180 THEN LO = LON - 360: EW$ = "E" 'Doesnt change LON but IF LON < -180 THEN LO = 360 + LON: EW$ = "W" 'does change LL$ LALO$ = MID$(LLto$(LAT), 2) + HM$ + alt$ + LLto$(LO) + EW$ END SUB