IMD 1.16: 29/05/2007 12:05:31 FOGCPM.014 --FOGCPM014GC-CON1CINTGC-CON1CBAS. GC-COVERBAS GC-DSKRDBAS GC-ENTRYBAS GC-INIT BASGC-NUCALBASGC-PRTHDBASGCDATA SDFDGCNORTAMSDF !GCPRNT37BAS="#$%&'()GCWORLD SDFC*+,-./012GRTCIR-CBAS3GRTCIR-CINT4567GRTCIR10BAS%89:;<HAMLOG DOC=>LOG CMD?@ABLOGCHNG CMD CDEFLOGENTRYCMDGHILOGPRINTCMD JKLOGSERCHCMD LMNOLOGSORT CMDPQRHAMLOG DBFSMOONLOC1BASTUVMOONLOC2BASWXYMOONLOC3BAS8Z[\]^_`MOONLOC5BAS'abcdeRTTY ASMfghijklmnopqrstuRTTY ASMJvwxyz{|}~-12-00 85 TTY ASMATTYR ASM&TTYR1 ASM(TTYX ASM!-CPM014 DOCThis is the disk name. 1$57.29577951308254$1.570796326794896$3.141592653589794$2.0$.05$1.8519$1.1507765$*@ ######.####.#p..6= "Y" AND CHR$(ANS%) <> "y" THEN 990 REM ---- Screen #4 Repeat Menu ---- PRINT CHR$(26) PRINT FNCR$(5,10);"GREAT CIRCLE DISTANCE and HEADING" PRINT FNCR$(9,10);"You now have a choice:" PRINT FNCR$(11,12);"A - Keep the SAME home location" PRINT FNCR$(13,12);"B - Choose a NEW home location" PRINT FNCR$(15,12);"C - QUIT" PRINT FNCR$(17,10);"Which will it be, A, B, or C ?" PRINT FNCR$(17,36); ANS%= CONCHAR% IF CHR$(ANS%) = "A" THEN 300 IF CHR$(ANS%) = "B" THEN 100 IF CHR$(ANS%) = "C" THEN 999 999 PRINT CHR$(26): PRINT: PRINT: PRINT PRINT " THAT'S ALL !!!" GOTO 99.9 REM --- Great Circle Calculate Module derived from a \ FORTRAN program. From "The Giant Book of Computer \ Software", pages 199-207. Modified and Corrected \ by O. Bliss. NOTE that SOUTH Latitutes and WEST \ Longitutes are entered as negative numbers.\ 68 A1= LAT1/M: A2= LAT2/M: L1= LON1/M: L2= LON2/M PI= 3.141592653589794: FLAG=0 68.1 Q1= COS(A1) * ((TAN(A1) * COS(L2-L1)) - TAN(A2))/SIN(L2-L1) X1= 270 + (M * ATN(Q1)) IF (L2-L1) > 0 AND (L2-L1) <= PI OR \ (L2-L1) < 0 AND ABS(L2-L1) >= PI THEN X1= X1- 180 REM -- Reverse Calculation -- IF FLAG= 2 THEN 68.2 L3=L2: L4=L1: L2=L4: L1=L3 A3=A2: A4=A1: A2=A4: A1=A3 Y1=X1: FLAG=2: GOTO 68.1 68.2 C1= ABS(L2-L1) IF C1> PI THEN C1= 2.0 * PI - C1 REM -- ARC COSINE Conversion --- Z= FNARC(SIN(A1)*SIN(A2)+COS(A1)*COS(A2)*COS(C1)) Z1= Z * M REM -- Module Output -- BA= Y1 + .05 BR= X1 + .05 INTM= 60 * Z1 NAMI= INTM + .05 KM= INTM * 1.8519 + .05 STMI= INTM * 1.1507765 + .05 RETURN 99.9 END\ Software", pages 199-207. Modified and Corrected \ by O. Bliss. NOTE that SOUTH Latitutes and WEST \ Longitutes are entered as negative numbers.\ 68 A1= LAT1/M: A2= LAT2/M: L1= LON1/M: L2= LON2/M PI= 3.141592653589794: FLAG=0 68.1 Q1= C110 REM ------- Personalized Cover SBR ---------- LPRINTER WIDTH 80 PRINT CHR$(30);CHR$(31): PRINT: PRINT: PRINT: PRINT: PRINT: PRINT: PRINT PRINT: PRINT: PRINT TAB(9);"G R E A T C I R C L E": PRINT: PRINT: PRINT PRINT TAB(17);"BEARINGS";CHR$(29);CHR$(31): PRINT: PRINT: PRINT PRINT TAB(32);"AND";CHR$(30);CHR$(31): PRINT: PRINT: PRINT PRINT TAB(16);"DISTANCES": PRINT: PRINT: PRINT PRINT TAB(19);"FROM": PRINT: PRINT: PRINT PRINT TAB(10);"AMATEUR RADIO STATION": PRINT: PRINT: PRINT V5$=LEFT$(V9$,19-(INT(LEN(SIGN$)/2))):PRINT V5$;SIGN$;CHR$(29);CHR$(31): PRINT PRINT: PRINT: PRINT TAB(29);"LOCATED AT";CHR$(30);CHR$(31): PRINT: PRINT: PRINT V5$=LEFT$(V9$,19-(INT(LEN(PL1$)/2))):PRINT V5$;PL1$;CHR$(29);CHR$(31):PRINT: PRINT PRINT: PRINT TAB(28);"COORDINATES";CHR$(30): PRINT: PRINT: PRINT PRINT TAB(15);"Latitude: ";DEG1;" Degrees,";MIN1;" Minutes,";SEC1;" Seconds ";H1$ PRINT TAB(15);"Longitude:";DEG3;" Degrees,";MIN3;" Minutes,";SEC3;" Seconds ";H3$ PRINT: PRINT: PRINT: PRINT: PRINT: PRINT: PRINT PRINT TAB(40);"Prepared by Orbra W. Bliss, W9GEK/HC1BW" PRINT CHR$(12) RETURN : PRINT: PRINT PRINT: PRINT: PRINT TAB(9);"G R E A T C I R C L E": PRINT: PRINT: PRINT PRINT TAB(17);"BEARINGS";CHR$(29);CHR$(31): PRINT: PRINT: PRINT PRINT TAB(32);"AND";CHR$(30);CHR$(31): PRINT: PRINT: PRINT PRINT TAB(16);"DISTANCES": PRINT: PRINT: PRINT PRINT TAB(19);"FROM": PRINT: PRINT: PRINT PRINT TAB(10);"AMATEUR RADIO STATION": PRINT: PRINT: PRINT V5$=LEFT$(V9$,19-(INT(LEN(SIGN$)/2))):PRINT V5$;SIGN$;CHR$(29);CHR$(31): PRINT PRINT: PRINT: PRINT TAB(29);"LOCATED AT";CHR$(30);CHR$(31): PRINT: PRINT: PRINT V5$=LEFT$(V9$,19-(INT(LEN(PL1$)/2))):PRINT V5$;PL1$;CHR$(29);CHR$(31):PRINT: PRINT PRINT: PRINT TAB(28);"COORDINATES";CHR$(30): PRINT: PRINT: PRINT PRINT TAB(15);"Latitude: ";DEG1;" Degrees,";MIN1;" Minutes,";SEC1;" Seconds ";H1$ PRINT TAB(15);"Longitude:";DEG3;" Degrees,";MIN3;" Minutes,";SEC3;" Seconds ";H3$ PRINT: PRINT: PRINT: PRINT: PRINT: PRINT: PRINT PRINREM ------- Read Data File ------------ OPEN Q4$ AS 1 :rem --- Source Data File IF Q2$="Y" THEN GOSUB 110 :rem --- Personalized Cover GOSUB 104 :rem --- Line Printer Heading 62 IF END #1 THEN 63 IF CONSTAT% THEN GOSUB 64 rem --- Interrupt routine READ#1; PL2$,ST2$,DEG2,MIN2,SEC2,H2$,DEG4,MIN4,SEC4,H4$ PLA$= PL2$+", "+ST2$ IF PLA$= PL1$ THEN GOTO 62 :rem --- Skip Starting Location CONSOLE PRINT FNCR$(6,8);"Now calculating for ";PLA$;" " LPRINTER WIDTH 80 LAT2= FNDMS(DEG2,MIN2,SEC2) LON2= FNDMS(DEG4,MIN4,SEC4) IF H2$="S" THEN LAT2= LAT2*(-1) IF H4$="W" THEN LON2= LON2*(-1) GOSUB 68 IL%=IL%+1 IF IL%>54 THEN IL%=0: IP%=IP%+1 IF IL%=0 THEN LPRINTER WIDTH 80:\ PRINT CHR$(12):GOSUB 104 :rem --- Printout, New Page LPRINTER WIDTH 80: PRINT TAB(5);PLA$;TAB(27);:PRINT USING V1$;\ BA;:PRINT V4$;" ";:PRINT USING V1$;BR;:PRINT V4$;\ TAB(48);Z$;:PRINT USING V$;STMI;:PRINT TAB(59);Z$;:\ PRINT USING V$;NAMI;:PRINT TAB(70);Z$;:PRINT USING V$;KM GOTO 62 63 PRINT CHR$(12) CLOSE 1: CONSOLE: PRINT CHR$(26) PRINT FNCR$(10,12);"THAT'S ALL!!!" GOTO 99.9 64 CONSOLE PRINT "PRESS 'C' TO CONTINUE, 'S' TO STOP" IF CHR$(CONCHAR%) = "C" THEN RETURN IF CHR$(CONCHAR%) = "S" THEN STOP GOTO 64 Skip Starting Location CONSOLE PRINT FNCR$(6,8);"Now calculating for ";PLA$;" " LPRINTER WIDTH 80 LAT2= FNDMS(DEG2,MIN2,SEC2) LON2= FNDMS(DEG4,MIN4,SEC4) IF H2$="S" THEN LAT2= LAT2*(-1) IF H4$="W" THEN LON2= LON2*(-1) GOSUB 68 IL%=IL%+1 IF IL%>54 THEN IL%=0: IP%=IP%+1 IF IL%=0 THEN LPRINTER WIDTH 80:\ PRINT CHR$(12):GOSUB 104 :rem --- Printout, New Page LPRINTER WIDTH 80: PRINT TAB(5);PLA$;TAB(27);:PRINT USING V1$;\ BA;:PRINT V4$;" ";:PRINT USING V1$;BR;:PRINT V4$;\ TAB(48);Z$;:PRINT USING V$;STMI;:PRINT TAB(59);Z$;:\ PRINT USING V$;NAMI;:PRINT TAB(70);Z$;:PRINT UREM ----- GC/ENTRY.BAS ---- GREAT CIRCLE ENTRY USING DISK FILES ------ 500 CONSOLE PRINT CHR$(26) :rem ---- Erase Screen REM ----- Screen #1, Entry Menu ------- PRINT FNCR$(4,8);"GREAT CIRCLE DISTANCE AND HEADINGS" PRINT FNCR$(6,12);"Enter Originating Location" PRINT FNCR$(8,4);"Make entry of City & State using ONE comma." PRINT FNCR$(10,8);"City, State: ____________________" PRINT FNCR$(10,21);: INPUT LINE PL1$ PRINT FNCR$(14,4);"Enter name of source file: "; INPUT LINE Q4$ PRINT FNCR$(14,4);"Do you want a personalized cover? (Y or N): "; INPUT Q2$ IF Q2$="y" THEN Q2$="Y" IF Q2$<>"Y" THEN GOTO 502 PRINT FNCR$(16,8);"Enter the callsign of the station: "; INPUT LINE SIGN$ 502 PRINT FNCR$(14,4);" Enter coordinates for ";PL1$;" " PRINT FNCR$(16,0);"Latitude: Degrees ___, Minutes __, Seconds __, N/S _" PRINT FNCR$(18,0);"Longitude: Degrees ___, Minutes __, Seconds __, E/W _" PRINT FNCR$(16,18); INPUT DEG1 PRINT FNCR$(16,32); INPUT MIN1 PRINT FNCR$(16,45); INPUT SEC1 PRINT FNCR$(16,54); INPUT H1$ PRINT FNCR$(18,18); INPUT DEG3 PRINT FNCR$(18,32); INPUT MIN3 PRINT FNCR$(18,45); INPUT SEC3 PRINT FNCR$(18,54); INPUT H3$ LAT1= FNDMS(DEG1,MIN1,SEC1) IF H1$="s" THEN H1$="S" LON1= FNDMS(DEG3,MIN3,SEC3) IF H3$="w" THEN H3$="W" IF H1$="S" AND D=1 THEN LAT1= LAT1*(-1) IF H3$="W" AND D=1 THEN LON1= LON1*(-1) PRINT FNCR$(8,4);" TO " PRINT FNCR$(14,4);" The" TO 502 PRINT FNCR$(16,8);"Enter the callsign of the station: "; INPUT LINE SIGN$ 502 PRINT FNCR$(14,4);" Enter coordinates for ";PL1$;" " PRINT FNCR$(16,0);"Latitude: Degrees ___, Minutes __, Seconds __, N/S _" PRINT FNCR$(18,0);"Longitude: Degrees ___, Minutes __, Seconds __, E/W _" PRINT FNCR$(16,18); INPUT DEG1 PRINT FNCR$(16,32); INPUT MREM --- GC/INIT.BAS --- CONSTANTS AND FUNCTION DEFINES ----- V$="######.#": V1$="###.#" Z$="|" : IP%=1: V4$=" deg." V2$="GREAT CIRCLE BEARINGS AND DISTANCES FROM ": V3$="Page " V6$=" \ \###.# deg. ###.# deg.| #####.# | #####.# | #####.#" V7$="\ \ \ \ \ \ ##" V8$="-------------------------------------------------------------------------------" V9$=" " D=1: M=57.29577951308254: N=1.570796326794896 DEF FNDMS(D,M,S)= D+(M/60)+(S/3600) DEF FNCR$(YPOS,XPOS)=CHR$(27)+"="+CHR$(YPOS+32)+CHR$(XPOS+32) DEF FNARC(X)= N-2*ATN(X/(1+SQR(1-X*X))) REM --- Great Circle Calculate Module derived from a \ FORTRAN program. From "The Giant Book of Computer \ Software", pages 199-207. Modified and Corrected \ by O. Bliss. NOTE that SOUTH Latitutes and WEST \ Longitutes are entered as negative numbers.\ 68 A1= LAT1/M: A2= LAT2/M: L1= LON1/M: L2= LON2/M PI= 3.141592653589794: FLAG=0 68.1 Q1= COS(A1) * ((TAN(A1) * COS(L2-L1)) - TAN(A2))/SIN(L2-L1) X1= 270 + (M * ATN(Q1)) IF (L2-L1) > 0 AND (L2-L1) <= PI OR \ (L2-L1) < 0 AND ABS(L2-L1) >= PI THEN X1= X1- 180 REM -- Reverse Calculation -- IF FLAG= 2 THEN 68.2 L3=L2: L4=L1: L2=L4: L1=L3 A3=A2: A4=A1: A2=A4: A1=A3 Y1=X1: FLAG=2: GOTO 68.1 68.2 C1= ABS(L2-L1) IF C1> PI THEN C1= 2.0 * PI - C1 REM -- ARC COSINE Conversion --- Z= FNARC(SIN(A1)*SIN(A2)+COS(A1)*COS(A2)*COS(C1)) Z1= Z * M REM -- Module Output -- BA= Y1 + .05 BR= X1 + .05 INTM= 60 * Z1 NAMI= INTM + .05 KM= INTM * 1.8519 + .05 STMI= INTM * 1.1507765 + .05 RETURN REM --- GC/PRTHD.BAS --- 104 REM ------ Line Printer Heading -------- LPRINTER WIDTH 80: PRINT V8$ PRINT V2$;PL1$;TAB(72);V3$;IP%:PRINT V8$ PRINT TAB(28);"BEARING";TAB(39);"BEARING";\ TAB(49);"---------- DISTANCE ----------" PRINT TAB(5);"LOCATION";TAB(30);"TO";TAB(40);"FROM";\ TAB(48);"|ST. MILES |NAU. MILES|KILOMETERS" RETURN Abidjan, Ivory Coast, 5,30, 0,N, 4, 0, 0,W Accra, Ghana, 05,33,00,N, 00,13,00,W Addis Abba, Ethiopia, 09,00,00,N, 38,50,00,E Adelaide, Australia, 34,55,00,S,138,35,00,E Akron, OH, 41,05,00,N, 81,31,00,W Albany, NY, 42,39,00,N, 73,45,00,W Amman, Jordan, 32, 0, 0,N, 36, 0, 0,E Amsterdam, Neth., 52,24, 0,N, 4,54, 0,E Anchorage, AL, 61,13,00,N,149,53,00,W Ankara, Turkey, 39,54, 0,N, 32,54, 0,E Ascension Island,, 8, 0, 0,S, 14, 0, 0,W Asuncion, Paraguay, 25,18, 0,S, 57,42, 0,W Athens, Greece, 38, 0, 0,N, 23,42, 0,E Atlanta, GA, 33,48, 0,N, 84,24, 0,W Auburn, NY, 42,56,00,N, 76,34,00,W Auckland, NZ, 36,09,00,S,174,08,00,E Baghdad, Iraq, 33, 0, 0,N, 44,30, 0,E Bamako, Mali, 13, 0, 0,N, 8, 0, 0,W Bangkok, Thailand, 13,48, 0,N,100,30, 0,E Beirut, Lebanon, 33,54, 0,N, 35,30, 0,E Belfast, North. Ire., 54,36, 0,N, 5,54, 0,W Belgrade, Yugoslavia, 44,54, 0,N, 20,30, 0,E Berlin, Germany, 52,30,00,N, 13,22,00,E Bermuda,, 32,18, 0,N, 64,42, 0,W Bern, Switzerland, 47, 0, 0,N, 7, 0, 0,E Binghamton,NY, 42,08,00,N, 75,54,00,W Bogota, Columbia, 5, 0, 0,N, 74, 0, 0,W Bombay, India, 19,11,00,N, 72,50,00,E Bonaire, Neth. Ant., 12,10,00,N, 68,15,00,W Bonn, W. Germany, 51, 0, 0,N, 6, 0, 0,E Boston, MA, 42,21,00,N, 71,04,00,W Brasilia, Brazil, 16, 0, 0,S, 48, 0, 0,W Brisbane, Australia, 27,26,00,S,153,10,00,E Brussels, Belguim, 50,54, 0,N, 4,24, 0,E Bucharest, Romania, 44,24, 0,N, 26, 6, 0,E Budapest, Hungary, 47,30, 0,N, 19, 6, 0,E Buenos Aires, Argent, 34,36, 0,S, 58,24, 0,W Buffalo, NY, 42,53,00,N, 78,53,00,W Byrd Station, Antarc, 80, 0, 0,S,120, 0, 0,W Cairo, Egypt, 30,03,00,N, 31,15,00,E Canberra, Australia, 35,30, 0,S,149, 0, 0,E Cape Horn, So. Amer., 53,09,00,S, 70,55,00,W Cape Town, So.Africa, 33,56,00,S, 18,29,00,E Cape of Good Hope,SA, 34,18,00,S, 18,26,00,E Caracas, Venezuela, 10,30, 0,N, 67, 0, 0,W Casablanca, Morocco, 33, 0, 0,N, 8, 0, 0,W Cheyenne, WY, 41, 6, 0,N,104,48, 0,W Chicago, IL, 41,50,00,N, 87,38,00,W Christchurch, NZ, 43,36,00,S,172,42,00,E Christmas Island,, 10,30, 0,S,105,42, 0,E Cincinnati, OH, 39, 6, 0,N, 84,30, 0,W Cleveland, OH, 41,30, 0,N, 81,42, 0,W Copenhagen, Denmark, 55,42, 0,N, 12,36, 0,E Dacca, Bangladesh, 24, 0, 0,N, 90,30, 0,E Dakar, Senagal, 14,40,00,N, 17,26,00,W Dallas, TX, 32,48, 0,N, 96,48, 0,W Darwin, Australia, 12,28,00,S,130,50,00,E Denver, CO, 39,42, 0,N,105, 0, 0,W Detroit, MI, 42,18, 0,N, 83, 0, 0,W Djakarta, Indonesia, 06,10,00,S,106,48,00,E Doylestown, OH, 40,26,54,N, 81,40,00,W Dunedin, NZ, 45,53,00,S,170,30,00,E ELWA, Liberia, 06,15,00,N, 10,47,00,W Edinburg, TX, 26,10,48,N, 98,06,00,W Edmonton, Alberta, 53,30, 0,N,113,30, 0,W El Paso, TX, 31,48, 0,N,106,30, 0,W Elkhart, IN, 41,40,00,N, 85,58,32,W Fairport, NY, 43,00,31,N, 77,24,27,W Falkland Islands,, 52, 0, 0,S, 60, 0, 0,W Freetown,SierraLeone, 08,30,00,N, 13,15,00,W Galapagos Is.,, 2, 0, 0,S, 92, 0, 0,W Gibraltar,, 36, 0, 0,N, 5,30, 0,W Glasgow, Scotland, 55,48, 0,N, 4,18, 0,W Glendale, WI, 43,07,00,N, 87,57,00,W Goose Bay, Labrador, 51,18, 0,N, 60,24, 0,W Grand Rapids, MI, 42,58,00,N, 85,40,00,W Greenville, NC, 35,37,00,N, 77,23,00,W Greenwich, England, 51,28,40,N, 00,00,00,W Grenada,, 12, 0, 0,N, 61,48, 0,W Guadeloupe,, 16,15,00,N, 61,30,00,W Guam,, 13,27,00,N,144,45,00,E Guantanamo Bay, Cuba, 20, 0, 0,N, 75, 0, 0,W Guatemala City, Guat, 14,36, 0,N, 90,30, 0,W Guayaquil, Ecuador, 02,13,02,S, 79,53,07,W Halifax, Nova Scotia, 44,36, 0,N, 63,36, 0,W Hartford, CT, 41,48, 0,N, 72,42, 0,W Havana, Cuba, 23, 6, 0,N, 82,24, 0,W Helsinki, Finland, 60,10,00,N, 24,58,00,E Hobart, Tasmania, 42,54, 0,S,147,18, 0,E Hong Kong,, 22,16,00,N,114,12,00,E Honolulu, HI, 22,00,00,N,157,00,00,W Houghton, NY, 42,22,48,N, 78,09,45,W Indianapolis, IN, 39,48, 0,N, 86,12, 0,W Jamaica,, 18, 0, 0,N, 76, 0, 0,W Janesville, WI, 42,41,00,N, 89,01,00,W Jerusalem, Israel, 31,46,00,N, 35,13,00,E Jos, Nigeria, 09,55,00,N, 08,53,00,E Juneau, AK, 58,18, 0,N,134,24, 0,W Kaliningrad, USSR, 54,48,00,N, 20,36,00,E Kandahar,Afghanistan, 32, 0, 0,N, 65, 0, 0,E Kano, Nigeria, 12,00,00,N, 08,30,00,E Kansas City, MO, 39, 6, 0,N, 94,36, 0,W Kekaha Kauai, Hawaii, 22,00,00,N,159,40,00,W Kiev, USSR, 50,30, 0,N, 31, 0, 0,E Kinshasa, Zaire, 04,18,00,S, 15,18,00,E Knoxville, TN, 36, 0, 0,N, 83,54, 0,W La Paz, Bolivia, 16,30,00,S, 68,09,00,W Lagos, Nigeria, 06,27,00,N, 03,24,00,E Leningrad, USSR, 60, 0, 0,N, 30, 0, 0,E Lima, Peru, 12,03,00,S, 77,03,00,W Lisbon, Portugal, 38,42, 0,N, 9,12, 0,W Little Rock, AK, 34,42, 0,N, 92,18, 0,W Liverpool, England, 53,24,00,N, 03,04,00,W London, England, 51,30,00,N, 00,02,00,W Los Angeles, CA, 34,03,00,N,118,15,00,W Madison, WI, 43,05,00,N, 89,22,00,W Madrid, Spain, 40,24, 0,N, 3,42, 0,W Mahe, Seychelles, 04,36,00,S, 55,28,00,E Managua, Nicaragua, 12, 0, 0,N, 86, 0, 0,W Manila, Philippines, 14,36,00,N,120,58,00,E Mason, OH, 39,17,00,N, 84,19,00,W McMurdo Sound,Antarc, 77,30, 0,S,167, 0, 0,E Melbourne, Australia, 37,50,00,S,145,00,00,E Memphis, TN, 35, 6, 0,N, 90, 6, 0,W Mexico City, Mexico, 19,25,00,N, 99,10,00,W Mexico, NY, 43,28,00,N, 76,14,00,W Miami, FL, 25,46,00,N, 80,12,00,W Milwaukee, WI, 43,05,00,N, 87,27,00,W Minneapolis, MN, 45, 0, 0,N, 93,18, 0,W Minsk, USSR, 54, 0, 0,N, 27,30, 0,E Monrovia, Liberia, 06,05,42,N, 10,54,00,W Monte Carlo, Monaco, 43,45,00,N, 07,25,00,E Montevideo, Urguay, 34,53,00,S, 56,11,00,W Montreal, Canada, 45,27,00,N, 73,42,00,W Moscow, USSR, 55,45,00,N, 37,35,00,E Nairobi, Kenya, 1,30, 0,S, 37,30, 0,E Natal, Brazil, 6, 0, 0,S, 35,12, 0,W Neenah, WI, 44,11,00,N, 88,28,00,W New Delhi, India, 28, 0, 0,N, 77, 0, 0,E New Orleans, LA, 29,54, 0,N, 90, 6, 0,W New York, NY, 40,43,00,N, 74,00,00,W Nome, AL, 64,30,00,N,165,24,00,W Omaha, NB, 41,18, 0,N, 95,54, 0,W Oslo, Norway, 60, 0, 0,N, 10,42, 0,E Palmer Sta.,Antarct, 65, 0, 0,S, 64, 0, 0,W Panama City, Panama, 09,00,00,N, 78,33,39,W Paris, France, 48,52,00,N, 02,20,00,E Peking, China, 39,55,00,N,116,25,00,E Perth, Australia, 32,00,00,S,115,50,00,E Phoenix, AZ, 33,30, 0,N,112, 6, 0,W Pifo, Ecuador, 00,13,59,S, 78,20,20,W Pitcairn Island,, 25, 6, 0,S,130, 6, 0,W Pittsburg, PA, 40,24, 0,N, 80, 0, 0,W Port-Au-Prince,Haiti, 19,00,00,N, 71,00,00,W Portland, ME, 43,42, 0,N, 70,18, 0,W Portland, OR, 45,30, 0,N,122,42, 0,W Prague, Czech., 50, 6, 0,N, 14,24, 0,E Providence, RI, 41,50,00,N, 71,24,00,W Quito, Ecuador, 00,10,00,S, 78,29,23,W Recife, Brazil, 08,03,00,S, 34,54,00,W Reykjavik, Iceland, 64, 6, 0,N, 22, 0, 0,W Riga, Latvia, 57, 0, 0,N, 24, 0, 0,E Rio de Janeiro, Braz, 22,54,00,S, 43,10,00,W Rochester, NY, 43,10,00,N, 77,36,00,W Rome, Italy, 41,54,00,N, 12,29,00,E Saigon, Veitnam, 10,48, 0,N,106,42, 0,E Saipan, Marianas, 16, 0, 0,N,146, 0, 0,E San Diego, CA, 32,43,00,N,117,10,00,W San Francisco, CA, 37,48,00,N,122,25,00,W San Jose, Costa Rica, 09,56,00,N, 84,05,00,W San Juan, PuertoRico, 21,59,00,N, 80,08,00,W San Salvador, El Sal, 14, 0, 0,N, 89, 0, 0,W Santiago, Chile, 33,30, 0,S, 70,48, 0,W Seattle, WA, 47,36,00,N,122,20,00,W Seoul, Korea, 37,30, 0,N,127, 0, 0,E Shanghi, China, 31,10,00,N,121,30,00,E Singapore,, 01,23,00,N,103,48,00,E Slippery Rock, PA, 41,04,00,N, 80,03,00,W Sofia, Bulgaria, 42,42, 0,N, 23,18, 0,E Spokane, WA, 47,36,12,N,117,25,18,W St. John's, Newfndln, 47,36, 0,N, 52,42, 0,W St. John, New Brunsw, 45,18, 0,N, 66, 6, 0,W St. Louis, MO, 38,36, 0,N, 90,12, 0,W Stockholm, Sweden, 59,18, 0,N, 18, 6, 0,E Surinam,, 6, 0, 0,S, 55, 0, 0,W Svalbard Island,, 78, 0, 0,N, 16, 0, 0,E Sydney, Australia, 33,51,04,S,151,12,25,E Syracuse, NY, 43,03,00,N, 76,09,00,W Taipei, Taiwan, 24,00,00,N,121,00,00,E Tegucigalpa,Honduras, 14, 0, 0,N, 87, 0, 0,W Tehran, Iran, 35,48, 0,N, 51,48, 0,E Tirana, Albania, 41,30, 0,W, 19,30, 0,E Tokyo, Japan, 35,40,00,N,139,45,00,E Toronto, Ontario, 43,42, 0,N, 79,24, 0,W Ukarumpa, New Guinea, 04,00,00,S,143,00,00,E Ulan Bator, Mongolia, 48, 0, 0,N,107, 0, 0,E Upland, IN, 40,28,36,N, 86,30,00,W Valpariso, Chile, 33,02,00,S, 71,39,00,W Vancouver, B.C., 49,18, 0,N,123, 6, 0,W Vienna, Austria, 48,12, 0,N, 16,18, 0,E Vladivostok, USSR, 40,05,35,N,131,52,03,E W adsworth, OH, 41,00,00,N, 81,44,10,W Wake Island,, 19, 0, 0,N,167, 0, 0,E Warsaw, Poland, 52,12, 0,N, 21, 0, 0,E Washington, DC, 38,54,00,N, 77,01,00,W Webster, NY, 43,13,00,N, 77,26,00,W Wellington, NZ, 41,18,00,S,174,48,00,E Winnipeg, Manitoba, 49,54, 0,N, 97, 6, 0,W Yaounde, Cameroon, 4, 0, 0,N, 12, 0, 0,E e, Brazil, 08,03,00,S, 34,54,00,W Reykjavik, Iceland, 64, 6, 0,N, 22, 0, 0,W Riga, Latvia, 57, 0, 0,N, 24, 0, 0,E Rio de Janeiro, Braz, 22,54,00,S, 43,10,00,W Rochester, NY, 43,10,00,N, 71,00,00,E Tegucigalpa,Honduras, 14, 0, 0,N, 87, 0, 0,W Tehran, Iran, 35,48, 0,N, 51,48, 0,E Tirana, Albania, 41,30, 0,W, 19,30, 0,E Tokyo, Japan, 35,40,00,N,139,45,00,E Toronto, Ontario, 43,42, 0,N, 79,24, 0,W Ukarumpa, New Guinea, 04,00,00,S,143,00,00,E Ulan Bator, Mongolia, 48, 0, 0,N,107, 0, 0,E Upland, IN, 40,28,36,N, 86,30,00,W Valpariso, Chile, 33,02,00,S, 71,39,00,W Vancouver, B.C., 49,18, 0,N,123, 6, 0,W Vienna, Austria, 48,12, 0,N, 16,18, 0,E Vladivostok, USSR, 40,05,35,N,131,52,03,E WAkron, OH, 41,05,00,N, 81,31,00,W Albany, NY, 42,39,00,N, 73,45,00,W Anchorage, AL, 61,13,00,N,149,53,00,W Atlanta, GA, 33,48, 0,N, 84,24, 0,W Auburn, NY, 42,56,00,N, 76,34,00,W Binghamton,NY, 42,08,00,N, 75,54,00,W Boston, MA, 42,21,00,N, 71,04,00,W Buffalo, NY, 42,53,00,N, 78,53,00,W Cheyenne, WY, 41, 6, 0,N,104,48, 0,W Chicago, IL, 41,50,00,N, 87,38,00,W Cincinnati, OH, 39, 6, 0,N, 84,30, 0,W Cleveland, OH, 41,30, 0,N, 81,42, 0,W Dallas, TX, 32,48, 0,N, 96,48, 0,W Denver, CO, 39,42, 0,N,105, 0, 0,W Detroit, MI, 42,18, 0,N, 83, 0, 0,W Doylestown, OH, 40,26,54,N, 81,40,00,W Edinburg, TX, 26,10,48,N, 98,06,00,W Edmonton, Alberta, 53,30, 0,N,113,30, 0,W El Paso, TX, 31,48, 0,N,106,30, 0,W Elkhart, IN, 41,40,00,N, 85,58,32,W Fairport, NY, 43,00,31,N, 77,24,27,W Glendale, WI, 43,07,00,N, 87,57,00,W Goose Bay, Labrador, 51,18, 0,N, 60,24, 0,W Grand Rapids, MI, 42,58,00,N, 85,40,00,W Greenville, NC, 35,37,00,N, 77,23,00,W Halifax, Nova Scotia, 44,36, 0,N, 63,36, 0,W Hartford, CT, 41,48, 0,N, 72,42, 0,W Houghton, NY, 42,22,48,N, 78,09,45,W Indianapolis, IN, 39,48, 0,N, 86,12, 0,W Janesville, WI, 42,41,00,N, 89,01,00,W Juneau, AK, 58,18, 0,N,134,24, 0,W Kansas City, MO, 39, 6, 0,N, 94,36, 0,W Knoxville, TN, 36, 0, 0,N, 83,54, 0,W Little Rock, AK, 34,42, 0,N, 92,18, 0,W Los Angeles, CA, 34,03,00,N,118,15,00,W Madison, WI, 43,05,00,N, 89,22,00,W Mason, OH, 39,17,00,N, 84,19,00,W Memphis, TN, 35, 6, 0,N, 90, 6, 0,W Mexico, NY, 43,28,00,N, 76,14,00,W Miami, FL, 25,46,00,N, 80,12,00,W Milwaukee, WI, 43,05,00,N, 87,27,00,W Minneapolis, MN, 45, 0, 0,N, 93,18, 0,W Montreal, Canada, 45,27,00,N, 73,42,00,W Neenah, WI, 44,11,00,N, 88,28,00,W New Orleans, LA, 29,54, 0,N, 90, 6, 0,W New York, NY, 40,43,00,N, 74,00,00,W Nome, AL, 64,30,00,N,165,24,00,W Omaha, NB, 41,18, 0,N, 95,54, 0,W Phoenix, AZ, 33,30, 0,N,112, 6, 0,W Pittsburg, PA, 40,24, 0,N, 80, 0, 0,W Portland, ME, 43,42, 0,N, 70,18, 0,W Portland, OR, 45,30, 0,N,122,42, 0,W Providence, RI, 41,50,00,N, 71,24,00,W Rochester, NY, 43,10,00,N, 77,36,00,W San Diego, CA, 32,43,00,N,117,10,00,W San Francisco, CA, 37,48,00,N,122,25,00,W Seattle, WA, 47,36,00,N,122,20,00,W Slippery Rock, PA, 41,04,00,N, 80,03,00,W Spokane, WA, 47,36,12,N,117,25,18,W St. John's, Newfndln, 47,36, 0,N, 52,42, 0,W St. John, New Brunsw, 45,18, 0,N, 66, 6, 0,W St. Louis, MO, 38,36, 0,N, 90,12, 0,W Syracuse, NY, 43,03,00,N, 76,09,00,W Toronto, Ontario, 43,42, 0,N, 79,24, 0,W Upland, IN, 40,28,36,N, 86,30,00,W Vancouver, B.C., 49,18, 0,N,123, 6, 0,W Wadsworth, OH, 41,00,00,N, 81,44,10,W Washington, DC, 38,54,00,N, 77,01,00,W Webster, NY, 43,13,00,N, 77,26,00,W Winnipeg, Manitoba, 49,54, 0,N, 97, 6, 0,W ,W El Paso, TX, 31,48, 0,N,106,30, 0,W Elkhart, IN, 41,40,00,N, 85,58,32,W Fairport, NY, 43,00,31,N, 77,24,27,W Glendale, WI, 43,07,00,N, 87,57,00,W Goose Bay, Labrador, 51,18, 0,N, 60,24, 0,W Grand Rapids, MI, 42,58,00,N, 85,40,00,W Greenville, NC, 35,37,00,N, 77,23,00,W Halifax, Nova Scotia, 44,36, 0,N, 63,36, 0,W Hartford, CT, 41,48, 010 ' GREAT CIRCLE DISTANCE AND HEADING 20 ' by Orbra Bliss, version 3.7 3/4/84 30 DEFDBL A,B,C,D,L,M,N,S,X: DEFSTR V,P,Q,Z: V="######.#": V1="###.#" 40 DEFINT I: Z="|":IP=1: V4=" deg." 50 V2="GREAT CIRCLE BEARINGS AND DISTANCES FROM ":V3="Page " 60 V6=" \ \###.# deg. ###.# deg.| #####.# | #####.# | #####.#" 70 V7="\ \ \ \ \ \ ##" 80 D=1: M=57.29577951308254#: N=1.570796326794896# 82 DEF FNCS(X)= COS(X/M): DEF FNSN(X)= SIN(X/M) 85 DEF FNARC(X)= N-2*ATN(X/(1+SQR(1-X*X))) 90 DEF FNDMS(D,M,S)= D+(M/60)+(S/3600):PRINT CHR$(26) 100 DEF FNCR$(YPOS,XPOS)=CHR$(27)+"="+CHR$(YPOS+32)+CHR$(XPOS+32) 110 ' ----- Screen #1, Entry Menu ------- 120 PRINT FNCR$(4,8);"GREAT CIRCLE DISTANCE AND HEADINGS" 130 PRINT FNCR$(6,12);"Enter Originating Location" 140 PRINT FNCR$(8,4);"Make entry of City & State using ONE comma." 150 PRINT FNCR$(10,8);"City, State: ____________________" 160 PRINT FNCR$(10,21);:LINE INPUT PL1 165 P RINT FNCR$(14,4);"Do you want a printout now? (Y or N): ";:INPUT Q3 167 IF Q3="y" THEN Q3="Y" 170 PRINT FNCR$(14,4);"Do you want a disk file? (Y or N): ";:INPUT Q 180 IF Q<>"Y" AND Q<>"y" THEN 200 190 PRINT FNCR$(16,8);"Enter file name: ";:LINE INPUT Q1 200 PRINT FNCR$(14,4);"Do you want a personalized cover? (Y or N): ";:INPUT Q2 210 IF Q2<>"Y" AND Q2<>"y" THEN 230 220 PRINT FNCR$(16,8);"Enter the callsign of the station: ";:LINE INPUT SIGN$ 230 PRINT FNCR$(14,4);" Enter coordinates for ";PL1;" " 240 PRINT FNCR$(16,0);"Latitude: Degrees ___, Minutes __, Seconds __, N/S _" 250 PRINT FNCR$(18,0);"Longitude: Degrees ___, Minutes __, Seconds __, E/W _" 260 PRINT FNCR$(16,19);:INPUT"",DEG1:PRINT FNCR$(16,32);:INPUT"",MIN1 270 PRINT FNCR$(16,44);:INPUT"",SEC1:PRINT FNCR$(16,52);:INPUT"",H1$ 280 PRINT FNCR$(18,19);:INPUT"",DEG3:PRINT FNCR$(18,32);:INPUT"",MIN3 290 PRINT FNCR$(18,44);:INPUT"",SEC3:PRINT FNCR$(18,52);:INPUT"",H3$ 300 LAT1= FNDMS(DEG1,MIN1,SEC1): IF H1$="s" THEN H1$="S" 310 LON1= FNDMS(DEG3,MIN3,SEC3): IF H3$="e" THEN H3$="E" 320 IF H1$="S" AND D=1 THEN LAT1= LAT1*-1 330 IF H3$="E" AND D=1 THEN LON1= LON1*-1 350 PRINT FNCR$(8,4);" TO " 360 PRINT FNCR$(14,4)" The" 500 ' ------- Read Data File ------------ 510 OPEN "I",1, "GCDATA.SDF" 520 IF Q="Y" OR Q="y" THEN OPEN "O",2,Q1:' Disk File 530 IF Q2="Y" OR Q2="y" THEN GOSUB 3010:' Personalized Cover 540 IF Q="Y" OR Q="y" AND Q2="Y" OR Q2="y" THEN GOSUB 5010 'Disk File Cover 550 IF Q="Y" OR Q="y" THEN GOSUB 4020 'Disk File Page Heading 560 IF Q3="Y" OR Q3="y" THEN GOSUB 2010: ' Line Printer Heading 570 WHILE NOT EOF(1) 580 INPUT #1,PL2$,ST2$,DEG2,MIN2,SEC2,H2$,DEG4,MIN4,SEC4,H4$ 590 PLA=PL2$+", "+ST2$:IF PLA=PL1 THEN 740 600 PRINT FNCR$(6,8);"Now calculating for ";PLA;" " 610 LAT2= FNDMS(DEG2,MIN2,SEC2) 620 LON2= FNDMS(DEG4,MIN4,SEC4) 630 IF H2$="S" THEN LAT2= LAT2*-1 640 IF H4$="E" THEN LON2= LON2*-1 660 GOSUB 1000 670 IL=IL+1: IF IL>54 THEN IL=0:IP=IP+1 680 IF IL=0 AND Q="Y" OR Q="y" THEN PRINT #2, CHR$(12):GOSUB 4020:' File, New Page 690 IF IL=0 AND Q3="Y" OR Q3="y" THEN LPRINT CHR$(12):GOSUB 2010:' Printout, New Page 700 IF Q<>"Y" AND Q<>"y" THEN 720:' File NOT wanted 710 PRINT #2, USING V6;PLA,BA!,BR!,STMI!,NAMI!,KM! 720 IF Q3<>"Y" AND Q3<>"y" THEN 740:' Printout NOT wanted 730 LPRINT TAB(5);PLA;TAB(27);:LPRINT USING V1;BA!;:LPRINT V4;" ";:LPRINT USING V1;BR!;:LPRINT V4;TAB(48);Z;:LPRINT USING V;STMI!;:LPRINT TAB(59);Z;:LPRINT USING V;NAMI!;:LPRINT TAB(70);Z;:LPRINT USING V;KM! 740 WEND 750 IF Q="Y" OR Q="y" THEN PRINT #2, CHR$(12) 760 PRINT CHR$(26): IF Q3="Y" OR Q3="y" THEN LPRINT CHR$(12) 770 CLOSE: PRINT FNCR$(10,12)"THAT'S ALL!!!" 780 END 1000 ' ------ Distance & Heading SBR ---------- 1010 L3=(LON2-LON1) 1020 A=FNSN(LAT1)*FNSN(LAT2)+FNCS(LAT1)*FNCS(LAT2)*FNCS(L3) 1030 IF A=>1 THEN D=0: GOTO 1060 1040 IF A=<-1 THEN D=10800: GOTO 1060 1050 D= FNARC(A)*60*M 1060 B=(FNSN(LAT2)-(FNSN(LAT1)*A))/(FNSN(D/60)*FNCS(LAT1)) 1070 IF B=>1 THEN H=0: GOTO 1100 1080 IF B=<-1 THEN H=180: GOTO 1100 1085 H= FNARC(B)*M: IF FNSN(L3)=>0 THEN H= 360-H 1090 ' ---- Round off to one decimal --- 1100 I=D: GOSUB 1310 1110 NAMI!=CSNG(I) 1120 I=D*1.852: GOSUB 1310 1130 KM!=CSNG(I) 1140 I=D*1.15: GOSUB 1310 1150 STMI!=CSNG(I) 1160 I=H: GOSUB 1310 1170 BA!=CSNG(I) 1180 ' ----- Reverse Calculation SBR -------- 1190 L3=(LON1-LON2) 1200 A=FNSN(LAT2)*FNSN(LAT1)+FNCS(LAT2)*FNCS(LAT1)*FNCS(L3) 1210 IF A=>1 THEN D=0: GOTO 1240 1220 IF A=<-1 THEN D=10800: GOTO 1240 1230 D= FNARC(A)*60*M 1240 B=(FNSN(LAT1)-(FNSN(LAT2)*A))/(FNSN(D/60)*FNCS(LAT2)) 1250 IF B=>1 THEN H=0: GOTO 1270 1260 IF B=<-1 THEN H=180: GOTO 1270 1265 H= FNARC(B)*M: IF FNSN(L3)=>0 THEN H= 360-H 1270 I=H: GOSUB 1310 1280 BR!=CSNG(I) 1290 RETURN 1300 ' ---- Round off to one place ---- 1310 I=INT((I)*10+.5)/10 1320 RETURN 2000 ' ------ Line Printer Heading -------- 2010 LPRINT STRING$(80,"-") 2020 LPRINT V2;PL1;TAB(72);V3;IP:LPRINT STRING$(80,"-") 2030 LPRINT TAB(28);"BEARING";TAB(39);"BEARING";TAB(49);"---------- DISTANCE ----------" 2040 LPRINT TAB(5);"LOCATION";TAB(30);"TO";TAB(40);"FROM";TAB(48)"|ST. MILES |NAU. MILES|KILOMETERS" 2050 RETURN 3000 ' ------- Personalized Cover SBR ---------- 3010 LPRINT CHR$(30);CHR$(31);STRING$(9,10) 3020 LPRINT TAB(9);"G R E A T C I R C L E";STRING$(3,10) 3030 LPRINT TAB(17);"BEARINGS";CHR$(29);CHR$(31);STRING$(3,10) 3040 LPRINT TAB(32);"AND";CHR$(30);CHR$(31);STRING$(3,10) 3050 LPRINT TAB(16);"DISTANCES";STRING$(3,10) 3060 LPRINT TAB(19);"FROM";STRING$(3,10) 3070 LPRINT TAB(10);"AMATEUR RADIO STATION";STRING$(3,10) 3080 V5$=SPACE$(19-(INT(LEN(SIGN$)/2))):LPRINT V5$;SIGN$;CHR$(29);CHR$(31);STRING$(3,10) 3090 LPRINT TAB(29);"LOCATED AT";CHR$(30);CHR$(31);STRING$(3,10) 3100 V5$=SPACE$(19-(INT(LEN(PL1$)/2))):LPRINT V5$;PL1$;CHR$(29);CHR$(31);STRING$(3,10) 3110 LPRINT TAB(28);"COORDINATES";CHR$(30);STRING$(3,10) 3120 LPRINT TAB(15);"Latitude: ";DEG1;" Degrees,";MIN1;" Minutes,";SEC1;" Seconds ";H1$ 3130 LPRINT  TAB(15);"Longitude:";DEG3;" Degrees,";MIN3;" Minutes,";SEC3;" Seconds ";H3$ 3140 LPRINT STRING$(7,10) 3150 LPRINT TAB(40);"Prepared by Orbra W. Bliss, W9GEK/HC1BW" 3160 LPRINT CHR$(12) 3170 RETURN 4000 ' ----------- File Page Heading ------------- 4020 PRINT #2, STRING$(80,"-") 4030 PRINT #2, USING V7;V2,PL1,V3,IP 4040 PRINT #2, STRING$(80,"-") 4050 PRINT #2, " BEARING BEARING ------------ DISTANCE -----------" 4060 PRINT #2, " TO FROM |ST. MILES |NAU. MILES|KILOMETERS" 4070 RETURN 4080 ' ------------ File Personalized Cover -------------- 5010 PRINT #2, CHR$(30);CHR$(31);STRING$(9,10) 5020 PRINT #2, TAB(9);"G R E A T C I R C L E";STRING$(3,10) 5030 PRINT #2, TAB(17);"BEARINGS";CHR$(29);CHR$(31);STRING$(3,10) 5040 PRINT #2, TAB(32);"AND";CHR$(30);CHR$(31);STRING$(3,10) 5050 PRINT #2, TAB(16);"DISTANCES";STRING$(3,10) 5060 PRINT #2, TAB(19);"FROM";STRING$(3,10) 5070 PRINT #2, TAB(10);"AMATEUR RADIO STATION";STRING$(3,10) 5080 V5$=SPACE$(19-(INT(LEN(SIGN$)/2))):PRINT #2, V5$;SIGN$;CHR$(29);CHR$(31);STRING$(3,10) 5090 PRINT #2, TAB(29);"LOCATED AT";CHR$(30);CHR$(31);STRING$(3,10) 5100 V5$=SPACE$(19-(INT(LEN(PL1$)/2))):PRINT #2, V5$;PL1$;CHR$(29);CHR$(31);STRING$(3,10) 5110 PRINT #2, TAB(28);"COORDINATES";CHR$(30);STRING$(3,10) 5120 PRINT #2, TAB(15);"Latitude: ";DEG1;" Degrees,";MIN1;" Minutes,";SEC1;" Seconds ";H1$ 5130 PRINT #2, TAB(15);"Longitude:";DEG3;" Degrees,";MIN3;" Minutes,";SEC3;" Seconds ";H3$ 5140 PRINT #2, STRING$(7,10) 5150 PRINT #2, TAB(40);"Prepared by Orbra W. Bliss, W9GEK/HC1BW" 5160 PRINT #2, CHR$(12) 5170 RETURN INT #2, , CHR$(30);CHR$(31);STRING$(9,10) 5020 PRINT #2, TAB(9);"G R E A T C I R C L E";STRING$(3,10) 5030 PRINT #2, TAB(17);"BEARINGS";CHR$(29);CHR$(31);STRING$(3,10) 5040 PRINT #2, TAB(32);"AND";CHR$(30);CHR$(31);STRING$(3,10) 5050 PRINT #2, TAB(16);"DISTANCES";STRING$(3,10) 5060 PRINT #2, TAB(19);"FROM";STRING$(3,10) 5070 PRINT #2, TAB(10);"AMATEUR RADIO STATION";STRING$(3,10) 5Abidjan, Ivory Coast, 5,30, 0,N, 4, 0, 0,W Accra, Ghana, 05,33,00,N, 00,13,00,W Addis Abba, Ethiopia, 09,00,00,N, 38,50,00,E Adelaide, Australia, 34,55,00,S,138,35,00,E Amman, Jordan, 32, 0, 0,N, 36, 0, 0,E Amsterdam, Neth., 52,24, 0,N, 4,54, 0,E Ankara, Turkey, 39,54, 0,N, 32,54, 0,E Ascension Island,, 8, 0, 0,S, 14, 0, 0,W Asuncion, Paraguay, 25,18, 0,S, 57,42, 0,W Athens, Greece, 38, 0, 0,N, 23,42, 0,E Auckland, NZ, 36,09,00,S,174,08,00,E Baghdad, Iraq, 33, 0, 0,N, 44,30, 0,E Bamako, Mali, 13, 0, 0,N, 8, 0, 0,W Bangkok, Thailand, 13,48, 0,N,100,30, 0,E Beirut, Lebanon, 33,54, 0,N, 35,30, 0,E Belfast, North. Ire., 54,36, 0,N, 5,54, 0,W Belgrade, Yugoslavia, 44,54, 0,N, 20,30, 0,E Berlin, Germany, 52,30,00,N, 13,22,00,E Bermuda,, 32,18, 0,N, 64,42, 0,W Bern, Switzerland, 47, 0, 0,N, 7, 0, 0,E Bogota, Columbia, 5, 0, 0,N, 74, 0, 0,W Bombay, India, 19,11,00,N, 72,50,00,E Bonaire, Neth. Ant., 12,10,00,N, 68,15,00,W Bonn, W. Germany, 51, 0, 0,N, 6, 0, 0,E Brasilia, Brazil, 16, 0, 0,S, 48, 0, 0,W Brisbane, Australia, 27,26,00,S,153,10,00,E Brussels, Belguim, 50,54, 0,N, 4,24, 0,E Bucharest, Romania, 44,24, 0,N, 26, 6, 0,E Budapest, Hungary, 47,30, 0,N, 19, 6, 0,E Buenos Aires, Argent, 34,36, 0,S, 58,24, 0,W Byrd Station, Antarc, 80, 0, 0,S,120, 0, 0,W Cairo, Egypt, 30,03,00,N, 31,15,00,E Canberra, Australia, 35,30, 0,S,149, 0, 0,E Cape Horn, So. Amer., 53,09,00,S, 70,55,00,W Cape Town, So.Africa, 33,56,00,S, 18,29,00,E Cape of Good Hope,SA, 34,18,00,S, 18,26,00,E Caracas, Venezuela, 10,30, 0,N, 67, 0, 0,W Casablanca, Morocco, 33, 0, 0,N, 8, 0, 0,W Christchurch, NZ, 43,36,00,S,172,42,00,E Christmas Island,, 10,30, 0,S,105,42, 0,E Copenhagen, Denmark, 55,42, 0,N, 12,36, 0,E Dacca, Bangladesh, 24, 0, 0,N, 90,30, 0,E Dakar, Senagal, 14,40,00,N, 17,26,00,W Darwin, Australia, 12,28,00,S,130,50,00,E Djakarta, Indonesia, 06,10,00,S,106,48,00,E Dunedin, NZ, 45,53,00,S,170,30,00,E ELWA, Liberia, 06,15,00,N, 10,47,00,W Falkland Islands,, 52, 0, 0,S, 60, 0, 0,W Freetown,SierraLeone, 08,30,00,N, 13,15,00,W Galapagos Is.,, 2, 0, 0,S, 92, 0, 0,W Gibraltar,, 36, 0, 0,N, 5,30, 0,W Glasgow, Scotland, 55,48, 0,N, 4,18, 0,W Greenwich, England, 51,28,40,N, 00,00,00,W Grenada,, 12, 0, 0,N, 61,48, 0,W Guadeloupe,, 16,15,00,N, 61,30,00,W Guam,, 13,27,00,N,144,45,00,E Guantanamo Bay, Cuba, 20, 0, 0,N, 75, 0, 0,W Guatemala City, Guat, 14,36, 0,N, 90,30, 0,W Guayaquil, Ecuador, 02,10,00,S, 79,50,00,W Havana, Cuba, 23, 6, 0,N, 82,24, 0,W Helsinki, Finland, 60,10,00,N, 24,58,00,E Hobart, Tasmania, 42,54, 0,S,147,18, 0,E Hong Kong,, 22,16,00,N,114,12,00,E Honolulu, HI, 22,00,00,N,157,00,00,W Jamaica,, 18, 0, 0,N, 76, 0, 0,W Jerusalem, Israel, 31,46,00,N, 35,13,00,E Jos, Nigeria, 09,55,00,N, 08,53,00,E Kaliningrad, USSR, 54,48,00,N, 20,36,00,E Kandahar,Afghanistan, 32, 0, 0,N, 65, 0, 0,E Kano, Nigeria, 12,00,00,N, 08,30,00,E Kekaha Kauai, Hawaii, 22,00,00,N,159,40,00,W Kiev, USSR, 50,30, 0,N, 31, 0, 0,E Kinshasa, Zaire, 04,18,00,S, 15,18,00,E La Paz, Bolivia, 16,30, 00,S, 68,09,00,W Lagos, Nigeria, 06,27,00,N, 03,24,00,E Leningrad, USSR, 60, 0, 0,N, 30, 0, 0,E Lima, Peru, 12,03,00,S, 77,03,00,W Lisbon, Portugal, 38,42, 0,N, 9,12, 0,W Liverpool, England, 53,24,00,N, 03,04,00,W London, England, 51,30,00,N, 00,02,00,W Madrid, Spain, 40,24, 0,N, 3,42, 0,W Mahe, Seychelles, 04,36,00,S, 55,28,00,E Managua, Nicaragua, 12, 0, 0,N, 86, 0, 0,W Manila, Philippines, 14,36,00,N,120,58,00,E McMurdo Sound,Antarc, 77,30, 0,S,167, 0, 0,E Melbourne, Australia, 37,50,00,S,145,00,00,E Mexico City, Mexico, 19,25,00,N, 99,10,00,W Minsk, USSR, 54, 0, 0,N, 27,30, 0,E Monrovia, Liberia, 06,05,42,N, 10,54,00,W Monte Carlo, Monaco, 43,45,00,N, 07,25,00,E Montevideo, Urguay, 34,53,00,S, 56,11,00,W Moscow, USSR, 55,45,00,N, 37,35,00,E Nairobi, Kenya, 1,30, 0,S, 37,30, 0,E Natal, Brazil, 6, 0, 0,S, 35,12, 0,W New Delhi, India, 28, 0, 0,N, 77, 0, 0,E Oslo, Norway, 60, 0, 0,N, 10,42, 0,E Palmer Sta.,Antarct, 65, 0, 0,S, 64, 0, 0,W Panama City, Panama, 09,00,00,N, 78,33,39,W  Paris, France, 48,52,00,N, 02,20,00,E Peking, China, 39,55,00,N,116,25,00,E Perth, Australia, 32,00,00,S,115,50,00,E Pifo, Ecuador, 00,13,48,S, 78,21,00,W Pitcairn Island,, 25, 6, 0,S,130, 6, 0,W Port-Au-Prince,Haiti, 19,00,00,N, 71,00,00,W Prague, Czech., 50, 6, 0,N, 14,24, 0,E Quito, Ecuador, 00,10,00,S, 78,29,23,W Recife, Brazil, 08,03,00,S, 34,54,00,W Reykjavik, Iceland, 64, 6, 0,N, 22, 0, 0,W Riga, Latvia, 57, 0, 0,N, 24, 0, 0,E Rio de Janeiro, Braz, 22,54,00,S, 43,10,00,W Rome, Italy, 41,54,00,N, 12,29,00,E Saigon, Veitnam, 10,48, 0,N,106,42, 0,E Saipan, Marianas, 16, 0, 0,N,146, 0, 0,E San Jose, Costa Rica, 09,56,00,N, 84,05,00,W San Juan, PuertoRico, 21,59,00,N, 80,08,00,W San Salvador, El Sal, 14, 0, 0,N, 89, 0, 0,W Santiago, Chile, 33,30, 0,S, 70,48, 0,W Seoul, Korea, 37,30, 0,N,127, 0, 0,E Shanghi, China, 31,10,00,N,121,30,00,E Singapore,, 01,23,00,N,103,48,00,E Sofia, Bulgaria, 42,42, 0,N, 23,18, 0,E Stockholm, Sweden, 59,18, 0,N, 18, 6, 0,E Surinam,, 6, 0, 0,S, 55, 0, 0,W Svalbard Island,, 78, 0, 0,N, 16, 0, 0,E Sydney, Australia, 33,51,04,S,151,12,25,E Taipei, Taiwan, 24,00,00,N,121,00,00,E Tegucigalpa,Honduras, 14, 0, 0,N, 87, 0, 0,W Tehran, Iran, 35,48, 0,N, 51,48, 0,E Tirana, Albania, 41,30, 0,W, 19,30, 0,E Tokyo, Japan, 35,40,00,N,139,45,00,E Ukarumpa, New Guinea, 04,00,00,S,143,00,00,E Ulan Bator, Mongolia, 48, 0, 0,N,107, 0, 0,E Valpariso, Chile, 33,02,00,S, 71,39,00,W Vienna, Austria, 48,12, 0,N, 16,18, 0,E Vladivostok, USSR, 40,05,35,N,131,52,03,E Wake Island,, 19, 0, 0,N,167, 0, 0,E Warsaw, Poland, 52,12, 0,N, 21, 0, 0,E Wellington, NZ, 41,18,00,S,174,48,00,E Yaounde, Cameroon, 4, 0, 0,N, 12, 0, 0,E Akron, OH, 41,05,00,N, 81,31,00,W Albany, NY, 42,39,00,N, 73,45,00,W Anchorage, AL, 61,13,00,N,149,53,00,W Atlanta, GA, 33,48, 0,N, 84,24, 0,W Auburn, NY, 42,56,00,N, 76,34,00,W Binghamton,NY, 42,08,00,N, 75,54,00,W Boston, MA, 42,21,00,N, 71,04,00,W Buffalo, NY, 42,53,00,N, 78,53,00,W Cheyenne, WY, 41, 6, 0,N,104,48, 0,W Chicago, IL, 41,50,00,N, 87,38,00,W Cincinnati, OH, 39, 6, 0,N, 84,30, 0,W Cleveland, OH, 41,30, 0,N, 81,42, 0,W Dallas, TX, 32,48, 0,N, 96,48, 0,W Denver, CO, 39,42, 0,N,105, 0, 0,W Detroit, MI, 42,18, 0,N, 83, 0, 0,W Doylestown, OH, 41,02,58,N, 81,40,44,W Edinburg, TX, 26,10,48,N, 98,06,00,W Edmonton, Alberta, 53,30, 0,N,113,30, 0,W El Paso, TX, 31,48, 0,N,106,30, 0,W Elkhart, IN, 41,40,00,N, 85,58,32,W Fairport, NY, 43,00,31,N, 77,24,27,W Glendale, WI, 43,07,00,N, 87,57,00,W Goose Bay, Labrador, 51,18, 0,N, 60,24, 0,W Grand Rapids, MI, 42,58,00,N, 85,40,00,W Greenville, NC, 35,37,00,N, 77,23,00,W Halifax, Nova Scotia, 44,36, 0,N, 63,36, 0,W Hartford, CT, 41,48, 0,N, 72,42, 0,W Houghton, NY, 42,22,48,N, 78,09,45,W Indianapolis, IN, 39,48, 0,N, 86,12, 0,W Janesville, WI, 42,41,00,N, 89,01,00,W Juneau, AK, 58,18, 0,N,134,24, 0,W Kansas City, MO, 39, 6, 0,N, 94,36, 0,W Knoxville, TN, 36, 0, 0,N, 83,54, 0,W Little Rock, AK, 34,42, 0,N, 92,18, 0,W Los Angeles, CA, 34,03,00,N,118,15,00,W Madison, WI, 43,05,00,N, 89,22,00,W Mason, OH, 39,17,00,N, 84,19,00,W Memphis, TN, 35, 6, 0,N, 90, 6, 0,W Mexico, NY, 43,28,00,N, 76,14,00,W Miami, FL, 25,46,00,N, 80,12,00,W Milwaukee, WI, 43,05,00,N, 87,27,00,W Minneapolis, MN, 45, 0, 0,N, 93,18, 0,W Montreal, Canada, 45,27,00,N, 73,42,00,W Neenah, WI, 44,11,00,N, 88,28,00,W New Orleans, LA, 29,54, 0,N, 90, 6, 0,W New York, NY, 40,43,00,N, 74,00,00,W Nome, AL, 64,30,00,N,165,24,00,W Omaha, NB, 41,18, 0,N, 95,54, 0,W Phoenix, AZ, 33,30, 0,N,112, 6, 0,W Pittsburg, PA, 40,24, 0,N, 80, 0, 0,W Portland, ME, 43,42, 0,N, 70,18, 0,W Portland, OR, 45,30, 0,N,122,42, 0,W Providence, RI, 41,50,00,N, 71,24,00,W Rochester, NY, 43,10,00,N, 77,36,00,W San Diego, CA, 32,43,00,N,117,10,00,W San Francisco, CA, 37,48,00,N,122,25,00,W Seattle, WA, 47,36,00,N,122,20,00,W Slippery Rock, PA, 41,04,00,N, 80,03,00,W Spokane, WA, 47,36,12,N,117,25,18,W St. John's, Newfndln, 47,36, 0,N, 52,42, 0,W St. John, New Brunsw, 45,18, 0,N, 66, 6, 0,W St. Louis, MO, 38,36, 0,N, 90,12, 0, W Syracuse, NY, 43,03,00,N, 76,09,00,W Toronto, Ontario, 43,42, 0,N, 79,24, 0,W Upland, IN, 40,28,36,N, 86,30,00,W Vancouver, B.C., 49,18, 0,N,123, 6, 0,W Wadsworth, OH, 41,00,00,N, 81,44,10,W Washington, DC, 38,54,00,N, 77,01,00,W Webster, NY, 43,13,00,N, 77,26,00,W Winnipeg, Manitoba, 49,54, 0,N, 97, 6, 0,W  74,00,00,W Nome, AL, 64,30,00,N,165,24,00,W Omaha, NB, 41,18, 0,N, 95,54, 0,W Phoenix, AZ, 33,30, 0,N,112, 6, 0,W Pittsburg, PA, 40,24, 0,N, 80, 0, 0,W Portland, ME, 43,42, 0,N, 70,18, 0,W Portland, OR, 45,30, 0,N,122,42, 0,W Providence, RI, 41,50,00,N, 71,24,00,W Rochester, NY, 43,10,00,N, 77,36,00,W San Diego, CA, 32,43,00,N,117,10,00,W San Francisco, CA, 37,48,00,N,122,25,00,W Seattle, WA, 47,36,00,N,122,20,00,W Slippery Rock, PA, 41,04,00,N, 80,03,00,W Spokane, WA, 47,36,12,N,117,25,18,W St. John's, Newfndln, 47,36, 0,N, 52,42, 0,W St. John, New Brunsw, 45,18, 0,N, 66, 6, 0,W St. Louis, MO, 38,36, 0,N, 90,12, 0,%INCLUDE GC/INIT %INCLUDE GC/ENTRY %INCLUDE GC/DSKRD %INCLUDE GC/NUCAL %INCLUDE GC/PRTHD %INCLUDE GC/COVER 99.9 END GC/DSKRDBAS GC/ENTRYBAS GC/INIT BASGC/NUCALBASGC/PRTHDBASGCDATA SDFDGCNORTAMSDF !GCPRNT37BAS="#$%&'()GCWORLD SDFC*+,-./012GRTCIR-C$$$1$57.29577951308254$1.570796326794896$3.141592653589794$2.0$.05$1.8519$1.1507765$*@ _8######.####.#| deg.GREAT CIRCLE BEARINGS AND DISTANCES FROM Page  \ \###.# deg. ###.# deg.| #####.# | #####.# | #####.#\ \ \ \ \ \ ## -------------------------------------------------------------------------------   p . .6,", #,76\gpp$Now calculating for $,$ $d4Pof-$%&.()*'S7+--p+W7?..pA///67`//7vPof R$d4 PofJ,$Jdc0#d$ $dc1#d$0J$dc2#d;J$dc3#dFJ$dc4#d46\ R$d4@gR$d4 p p$THAT'S ALL!!!$d46 ^gPRESS 'C' TO CONTINUE, 'S' TO STOP$d4xRC73xRS7>65 6- 7! 8. 9.:p;5F5H87F6H87E< ;Gp87p879 87p87A9 7̀<78>7=?6@56@5?A<:p6mB87AB97 .B.9BC5E6E5F6FBFDC 0A.1<.E78>7=?6@56@5?A<:p6mB87AB97 .B.9BC5E6E5F6FBFDC 0A.1<.E "Y" THEN 810 840 : 850 ' ---- Screen #4 Repeat Menu ---- 860 PRINT CHR$(26) 870 PRINT FNCR$(5,10);"GREAT CIRCLE DISTANCE and HEADING" 880 PRINT FNCR$(9,10);"You now have a choice:" 890 PRINT FNCR$(11,12);"A - Keep the SAME home location" 900 PRINT FNCR$(13,12);"B - Choose a NEW home location" 910 PRINT FNCR$(15,12);"C - QUIT" 920 PRINT FNCR$(17,10);"Which will it be, A, B, or C ?" 930 PRINT FNCR$(17,36);:A$=INKEY$ 940 IF A$= "A" THEN 300 950 IF A$= "B" THEN 100 960 IF A$= "C" THEN 980 970 GOTO 930 980 PRINT CHR$(26) 990 END 1000 ' ------ Distance & Heading SBR ---------- 1010 L=(LON1-LON2)/M 1020 E=SIN(A)*SIN(B)+COS(A)*COS(B)*COS(L) 1030 D=-ATN(E/SQR(1-E*E))+1.57079 1040 C=(SIN(B)-SIN(A)*E)/(COS(A)*SIN(D)) 1050 : 1060 C=-ATN(C/SQR(1-C*C))+1.57079 1070 C=C*M 1080 IF SIN(L)<0 THEN C= 360-C 1090 : 1100 ' ---- Round off to one decimal --- 1110 I=D*S*M: GOSUB 1210 1120 STMI=I 1130 I=D*K*M: GOSUB 1210 1140 KM=I 1150 I=D*N*M: GOSUB 1210 1160 NAMI=I 1170 I=C: GOSUB 1210 1180 B=I 1190 : 1200 ' ---- Rounding to two places ---- 1210 I=INT((I*100)+.5)/100 1220 RETURN NG" 880 PRINT FNCR$(9,10);"You now have a choice:" 890 PRINT FNCR$(11,12);"A - Keep the SAME home location" 900 PRINT FNCR$(13,12);"B - Choose a NEW home location" 910 PRINT FNCR$(15,12);"C - QUIT" 920 PRINT FNCR$(17,10);"Which will it be, A, B, or C ?" 930 PRINT FNCR$(17,36);:A$=INKEY$ 940 IF A$= "A" THEN 300 950 IF A$= "B" THEN 100 960 IF A$= "C" THEN 980 970 GOTO 930  ---------- DOCUMENTATION FOR LOG.CMD ------------ loggin syste fo Amateu Radi writte b Orbr W Bliss W9GEK/HC1BW. Thi syste consist o seven file beside thi documentation. They are: LOG.CMD - This is the master command program LOGENTRY.CMD - A sub-command program for data entry. LOGCHNG.CMD - A sub-command program for data correction. LOGSERCH.CM - sub-comman progra tha wil searc fo an strin i an selecte field. LOGSORT.CM - sub-comman progra tha firs indexe th chose .DB fil o selecte field Then i desired cop fil ca b mad usin th newl create index. LOGPRINT.CM - formatte printou t th lis devic an als t dis file i tha optio i chosen. HAMLOG.DB - Th basi lo format File ma b kep unde othe name usin thi structur an accesse throug th system Thi lo mus exis o Driv B an ma b use o lef a structure i make n difference I ne fil i started th structure is copied from HAMLOG. Befor usin thi system mak backu copie o th file an the using WordSta i th "N mode modif th variou .CM files substitutin you ow cal letter instea o HC1BW. HAMLOG.DB furnishe th structur fo itsel an furthe file suc a specia file fo contests etc T spee processing ne file ca b starte suc a ever month Start the process by entering "DO LOG" and follow the menus. believ tha thi syste ha wid applicatio fo bot genera loggin an specia use suc a contests I yo com u wit embellishments, please let me know. My addresses are at the end. Thi loggin syste wa writte b m an place i th publi domain.. IT IS NOT TO BE SOLD ! ! ! ! Orbra W. Bliss HC1BW / W9GEK Radio Station HCJB, Casilla 691, Quito, ECUADOR or Box 553000, Opa Locka, FL 33055  * ---------------------------------------------------------------- * | LOG.CMD Version 1.5 | * | Master .CMD file for HAM RADIO logging program | * | Written 6/84 by Orbra W. Bliss, Amateur Radio W9GEK / HC1BW | * ---------------------------------------------------------------- * Revised 2/3/85 to permit selection of any drive for data files. * 2/16/85 adding sorting and printout options * SEVEN files are needed: LOG.CMD * LOGENTRY.CMD * LOGCHNG.CMD * LOGSERCH.CMD * LOGSORT.CMD * LOGPRINT.CMD * HAMLOG.DBF * ERASE RESET SET FORMAT TO SCREEN SET TALK OFF STORE ' ' TO MFILE, MDATE STORE ' ' TO MDRV, ACTION DO WHILE T ERASE @ 2,10 SAY 'HAM RADIO LOG PROGRAM' @ 6,10 SAY '0) Exit to CP/M' @ 7,10 SAY '1) Make log entries' @ 8,10 SAY '2) Search a file' @ 9,10 SAY '3) Index a file on any field' @ 10,10 SAY '4) Edit a file' @ 11,10 SAY '5) Printout a file' @ 12,10 SAY '6) Exit to dBASE' @ 18,10 SAY 'On which Drive are the data files ?' GET MDRV PICTURE 'A' @ 15,10 SAY 'Enter number of desired action' GET ACTION PICTURE '9' READ IF ACTION= '0' ERASE QUIT ENDIF action 0 IF ACTION= '1' ERASE @ 6,10 SAY '1) Make entries into an old file' @ 8,10 SAY '2) Start a new file' @ 11,10 SAY 'Enter number of desired action' WAIT TO CHOICE IF CHOICE= '1' ERASE LIST FILES ON &MDRV @ 15,5 SAY 'Enter name of data file to be used.' GET MFILE READ USE &MDRV.:&MFILE DO LOGENTRY ENDIF choice 1 IF CHOICE= '2' ERASE @ 10,10 SAY 'What is the name of the new file?' GET MFILE READ STORE TRIM(MFILE) TO MFILE USE &MDRV.:HAMLOG COPY STRUCTURE TO &MDRV.:&MFILE USE &MDRV.:&MFILE DO LOGENTRY ENDIF choice 2 ENDIF action 1 IF ACTION= '2' DO LOGSERCH ENDIF action 2 IF ACTION= '3' DO LOGSORT ENDIF action 3 IF ACTION= '4' ERASE LIST FILES ON &MDRV @ 15,5 SAY 'Enter name of data file to be used.' GET MFILE READ USE &MDRV.:&MFILE STORE ' ' TO RECNUM DO WHILE RECNUM # 0 ERASE @ 15,5 SAY 'Enter number of record to be changed.' GET RECNUM READ STORE &RECNUM TO RECNUM DO LOGCHNG ENDDO recnum # 0 ENDIF action 4 IF ACTION= '5' ERASE LIST FILES ON &MDRV STORE ' ' TO MDSK @ 12,5 SAY 'Enter name of data file to be used.' GET MFILE @ 15,5 SAY 'Should this be written to a disk file? ' GET MDSK READ IF !(MDSK)= 'Y' STORE ' ' TO LOGPRNT @ 19,12 SAY '(A different drive may be specified.)' @ 18,5 SAY 'What is the name of the disk file?' GET LOGPRNT READ ENDIF mdsk='y' USE &MDRV.:&MFILE DO LOGPRINT ENDIF action 5 IF ACTION= '6' USE RETURN ENDIF action 6 ENDDO while t SET TALK ON RETURN LOGPRINT ENDIF action 5 IF ACTILIST FILES ON &MDRV @ 15,5 SAY 'Enter name of data file to be used.' GET MFILE READ USE &MDRV.:&MFILE STORE ' ' TO RECNUM DO WHILE RECNUM # 0 ERASE @ 15,5 SAY 'Enter number of record to be changed.' GET RECNUM READ STORE &RECNUM TO RECNUM DO LOGCHNG ENDDO recnum # 0 ENDIF action 4 IF ACTION= '5' ERASE LIST FILES ON &MDRV STORE ' ' TO MDSK @ 12,5 SAY 'Enter name of data file to be used.' GET MFILE @ 15,5 SAY 'Should this be written to a disk file? ' GET MDSK READ IF !(MDSK)= 'Y' STORE ' ' TO LOGPRNT @ 19,12 SAY '(A different drive may be specified.)' @ 18,5 SAY 'What is the name of the disk* - ----------------------------------------- * - | LOGCHNG.CMD a subroutine of LOG.CMD | * - | Permits correcting an entry before | * - | it is finally stored.. | * - | Written by Orbra W. Bliss 2/3/85 | * - ----------------------------------------- * - Revised 2/16/85 formatting corrected. OWB * - GOTO RECNUM * --------- Initialize variables with data from record --------- DO WHILE RECNUM > 0 STORE BAND TO MBAND STORE MODE TO MMODE STORE DATE TO MDATE STORE RPT TO MRPT STORE TIME TO MTIME STORE STATION TO MSTATION STORE NAME TO MNAME STORE QTH TO MQTH STORE REMARKS TO MREMARKS IF * STORE 'DELETED' TO MDEL ELSE STORE ' ' TO MDEL ENDIF * ------ Set up screen for Entry of Possible Changes ------ ERASE * - Other Stations Insert Your Call Here ------- @ 2,21 SAY 'LOG OF HC1BW' @ 4,10 SAY '------ Make Changes as Needed ------' @ 5,3 SAY 'THE DATE IS ' GET MDATE PICTURE '99/99/99' @ 5,30 SAY 'TIME ' GET MTIME PICTURE '9999' * - Change the indicated time, if necessary. @ 5,42 SAY 'E.S.T.' @ 7,14 SAY 'STATION ' GET MSTATION @ 9,17 SAY 'NAME ' GET MNAME @ 11,18 SAY 'QTH ' GET MQTH @ 13,10 SAY 'RPT ' GET MRPT @ 13,25 SAY 'BAND ' GET MBAND @ 13,35 SAY 'MODE ' GET MMODE @ 15,3 SAY 'REMARKS ' GET MREMARKS @ 18,10 SAY 'Delete Entire Record ? Y/N ' GET MDEL READ IF !(MDEL)= 'Y' DELETE STORE 0 TO RECNUM ERASE @ 7,1 SAY 'Record Number'+ STR(#,4,0) + ' has been DELETED' ? ? WAIT ELSE * -- substitute input variables for database variables REPLACE DATE WITH MDATE REPLACE TIME WITH MTIME, STATION WITH !(MSTATION) REPLACE NAME WITH !(MNAME), QTH WITH !(MQTH), RPT WITH MRPT REPLACE BAND WITH MBAND, MODE WITH !(MMODE), REMARKS WITH MREMARKS * -------- Verification of entry ---------- * - Other Stations Insert Your Call Here ------- @ 2,21 SAY 'LOG OF HC1BW' @ 4,10 SAY ' ' @ 5,3 SAY 'THE DATE IS ' +DATE @ 5,30 SAY 'TIME ' +TIME * -- Change indicated time, if necessary. @ 5,42 SAY 'E.S.T.' @ 7,14 SAY 'STATION ' +STATION @ 9,17 SAY 'NAME ' +NAME @ 11,18 SAY 'QTH ' +QTH @ 13,10 SAY 'RPT ' +RPT @ 13,25 SAY 'BAND ' +BAND @ 13,35 SAY 'MODE ' +MODE @ 15,3 SAY 'REMARKS: ' +REMARKS @ 18,10 SAY 'IS THE ABOVE DATA CORRECT ? Y/N ' WAIT TO ANSWER STORE 0 TO RECNUM IF !(ANSWER)='N' STORE # TO RECNUM LOOP ENDIF answer='n' ENDIF mdel='y' ENDDO while recnum >0 RETURN for what group of characters ? 'GET MSEARCH READ IF MSEARCH = ' ' RETURN ENDIF STORE TRIM(MSEARCH) TO MSEARCH STORE "'" + MSEARCH + "'" TO MSEARCH1 @ 12,10 SAY 'In which field is it found:' @ 14,10 SAY '1) Date 6) RPT' @ 15,10 SAY '2) Time 7) Band' @ 16,10 SAY '3) Station 8) Mode' @ 17,1N for what group of characters ? 'GET MSEARCH READ IF MSEARCH = ' ' RETURN ENDIF STORE TRIM(MSEARCH) TO MSEARCH STORE "'" + MSEARCH + "'" TO MSEARCH1 @ 12,10 SAY 'In which field is it found:' @ 14,10 SAY '1) Date 6) RPT' @ 15,10 SAY '2) Time 7) Band' @ 16,10 SAY '3) Station 8) Mode' @ 17,1* ------------------------------------ * | LOGENTRY.CMD | * | Entry routine to HAMLOG.DBF | * | a subroutine of HAMLOG.CMD | * | Written 6/84 by Orbra W. Bliss | * | Amateur Radio W9GEK / HC1BW | * ------------------------------------ * Modified 2/3/85 to provide verification and correction. * Revised 2/16/85 formatting corrected. OWB * ERASE GO BOTTOM * -- initialize mband & mode here so that they stay the same until changed STORE ' ' TO MBAND STORE ' ' TO MMODE STORE ' ' TO MDATE DO WHILE T * -- initialize variables to blank STORE ' ' TO MRPT STORE ' ' TO MTIME STORE ' ' TO MSTATION STORE ' ' TO MNAME STORE ' ' TO MQTH STORE ' ' TO MREMARKS ERASE * - Other Stations Insert Your Call Here ------- @ 2,21 SAY 'LOG OF HC1BW' @ 5,3 SAY 'THE DATE IS ' GET MDATE PICTURE '99/99/99' @ 5,30 SAY 'TIME ' GET MTIME PICTURE '9999' @ 5,42 SAY 'E.S.T.' @ 7,14 SAY 'STATION ' GET MSTATION @ 9,17 SAY 'NAME ' GET MNAME @ 11,18 SAY 'QTH ' GET MQTH @ 13,10 SAY 'RPT ' GET MRPT @ 13,25 SAY 'BAND ' GET MBAND @ 13,35 SAY 'MODE ' GET MMODE @ 15,3 SAY 'REMARKS ' GET MREMARKS * -- read format file READ * -- check to see if ready to exit IF MSTATION=' ' * -- close file USE RETURN ENDIF * -- add a blank record to DBF file APPEND BLANK * -- substitute input variables for database variables REPLACE DATE WITH MDATE REPLACE TIME WITH MTIME, STATION WITH !(MSTATION) REPLACE NAME WITH !(MNAME), QTH WITH !(MQTH), RPT WITH MRPT REPLACE BAND WITH MBAND, MODE WITH !(MMODE), REMARKS WITH MREMARKS * -------- Verification of entry ---------- * - Other Stations Insert Your Call Here ------- @ 2,21 SAY 'LOG OF HC1BW' @ 5,3 SAY 'THE DATE IS ' +DATE @ 5,30 SAY 'TIME ' +TIME @ 5,42 SAY 'E.S.T.' @ 7,14 SAY 'STATION ' +STATION @ 9,17 SAY 'NAME ' +NAME @ 11,18 SAY 'QTH ' +QTH @ 13,10 SAY 'RPT ' +RPT @ 13,25 SAY 'BAND ' +BAND @ 13,35 SAY 'MODE ' +MODE @ 15,3 SAY 'REMARKS: ' +REMARKS @ 18,10 SAY 'IS THE ABOVE DATA CORRECT ? Y/N ' WAIT TO ANSWER IF !(ANSWER)='N' STORE # TO RECNUM DO LOGCHNG ENDIF ENDDO RETURN  ready to exit IF MSTATION=' ' * -- close file USE RETURN ENDIF * -- add a blank record to DBF file APPEND BLANK * -- substitute input variables for database variables REPLACE DATE WITH MDATE REPLACE TIME WITH MTIME, STATION WITH !(MSTATION) REPLACE NAME WITH !(MNAME), QTH WITH !(MQTH), RPT WITH MRPT REPLACE BAND WITH MBAND, MODE WITH !(MMODE), REMARKS WITH MREMARKS * -------- Verification of entry ---------- * - Other Stations Insert Your Call Here ------- @ 2,21 SAY 'LOG OF HC1BW' @ 5,3 SAY 'THE DATE IS ' +DATE @ 5,30 SAY 'TIME ' +TIME @ 5,42 SAY 'E.S.T.' * - *********************************** * - * LOGPRINT.CMD * * - * Formatted Printout of Ham Log * * - *********************************** * - Written 2/16/85 by Orbra W. Bliss * - ERASE SET MARGIN TO 0 SET EJECT OFF SET TALK OFF IF MDSK= 'Y' SET ALTERNATE TO &LOGPRNT SET ALTERNATE ON ENDIF STORE 'LOG OF AMATEUR RADIO STATION HC1BW' TO TITLE STORE ' DATE EST CALL NAME' TO HEAD1 STORE 'QTH RPT BND MODE' TO HEAD2 STORE 1 TO A STORE 1 TO PAGE SET FORMAT TO PRINT @ A,20 SAY TITLE STORE A+2 TO A @ A,1 SAY HEAD1 @ A,47 SAY HEAD2 STORE A+2 TO A GO TOP DO WHILE .NOT. EOF IF * SKIP ENDIF STORE BAND TO MBAND STORE MODE TO MMODE STORE DATE TO MDATE STORE RPT TO MRPT STORE TIME TO MTIME STORE STATION TO MSTATION STORE NAME TO MNAME STORE QTH TO MQTH SKIP SET FORMAT TO PRINT @ A,1 SAY MDATE @ A,10 SAY CHR(124) @ A,12 SAY MTIME @ A,17 SAY CHR(124) @ A,19 SAY MSTATION @ A,29 SAY MNAME @ A,44 SAY MQTH @ A,65 SAY MRPT @ A,69 SAY CHR(124) @ A,71 SAY MBAND @ A,74 SAY CHR(124) @ A,76 SAY MMODE STORE A+1 TO A IF A=60 STORE A+1 TO A @ A,30 SAY PAGE STORE PAGE+1 TO PAGE ? CHR(12) STORE 1 TO A @ A,20 SAY TITLE STORE A+2 TO A @ A,1 SAY HEAD1 @ A,47 SAY HEAD2 STORE A+2 TO A ENDIF ENDDO STORE 60 TO A @ A,30 SAY PAGE ? CHR(12)+CHR(13) SET ALTE OFF SET PRINT OFF SET TALK ON SET FORMAT TO SCREEN ? CHR(7) RETURN 1 TO A STORE 1 TO PAGE SET FORMAT TO PRINT @ A,20 SAY TITLE STORE A+2 TO A @ A,1 SAY HEAD1 @ A,47 SAY HEAD2 STORE A+2 TO A GO TOP DO WHILE .NOT. EOF IF * SKIP ENDIF STORE BAND TO MBAND STORE MODE TO MMODE STORE DATE TO MDATE STORE RPT TO MRPT STORE TIME TO MTIME STORE STATION TO MSTATION STORE NAME TO MNAME STORE QTH TO MQTH SKIP SET FORMAT TO PRINT @ A,1 SAY MDATE @ A,10 SAY CHR(124) @ A,12 SAY MTIME @ A,17 SAY CHR(124) @ A,19 SAY MSTATION @ A,29 SAY MNAME @ A,* - --------------------------------------------------- * - | LOGSERCH.CMD a subroutine of LOG.CMD | * - | Permits searching for any string in any field. | * - | Written by Orbra W. Bliss 2/3/85 | * - --------------------------------------------------- * - Updated as of 2/16/85 * - ERASE LIST FILES ON &MDRV @ 15,1 SAY 'What is the name of the file to be searched?' GET MFILE READ STORE TRIM(MFILE) TO MFILE USE &MDRV.:&MFILE STORE 'X' TO CHOICE DO WHILE CHOICE .NOT. '0' GO TOP ERASE STORE ' ' TO MSEARCH @ 10,10 SAY 'Search for what group of characters ? 'GET MSEARCH READ IF MSEARCH = ' ' RETURN ENDIF STORE TRIM(MSEARCH) TO MSEARCH STORE "'" + MSEARCH + "'" TO MSEARCH1 @ 12,10 SAY 'In which field is it found:' @ 14,10 SAY '1) Date 6) RPT' @ 15,10 SAY '2) Time 7) Band' @ 16,10 SAY '3) Station 8) Mode' @ 17,10 SAY '4) Name 9) Remarks' @ 18,10 SAY '5) QTH 0) Return to menu' WAIT TO CHOICE DO CASE CASE CHOICE = '1' STORE 'DATE' TO MFIELD CASE CHOICE = '2' STORE 'TIME' TO MFIELD CASE CHOICE = '3' STORE 'STATION' TO MFIELD CASE CHOICE = '4' STORE 'NAME' TO MFIELD CASE CHOICE = '5' STORE 'QTH' TO MFIELD CASE CHOICE = '6' STORE 'RPT' TO MFIELD CASE CHOICE = '7' STORE 'BAND' TO MFIELD CASE CHOICE = '8' STORE 'MODE' TO MFIELD CASE CHOICE = '9' STORE 'REMARKS' TO MFIELD ENDCASE ERASE @ 10,10 SAY 'Do you want it listed on the screen?' @ 12,10 SAY 'Enter "N" for other options' WAIT TO OPTION IF !(OPTION) # 'N' STORE '1' TO CHOICE ELSE ERASE @ 10,10 SAY 'Do you want it: 1) Listed on the screen' @ 11,27 SAY '2) Printed out' @ 12,27 SAY '3) Written to a disk file' @ 13,27 SAY '4) None of the above' WAIT TO CHOICE ENDIF DO CASE CASE CHOICE = '1' ERASE DISPLAY FOR &MSEARCH1 $&MFIELD ? WAIT CASE CHOICE = '2' ERASE SET PRINT ON SET MARGIN TO 5 DISPLAY FOR &MSEARCH1 $&MFIELD EJECT SET PRINT OFF CASE CHOICE = '3' ERASE SET ALTERNATE TO &MDRV.:&MSEARCH SET ALTERNATE ON DISPLAY FOR &MSEARCH1 $&MFIELD SET ALTERNATE OFF ? ? ? ' File is Stored as &MDRV.:&MSEARCH..TXT' WAIT CASE CHOICE = '4' STORE 0 TO CHOICE ENDCASE ENDDO choice not 0 RETURN .TXT' WAIO &MDRV.:&MSEARCH SET ALTERNATE ON DISPLAY FOR &MSEARCH1 $&MFIELD SET ALTERNATE OFF ? ? ? ' File is Stored as &MDRV.:&MSEARCH..TXT' WAIT CASE CHOICE = '4' STORE 0 TO CHOICE ENDCASE ENDDO choice not 0 RETURN .TXT' WAI* - ----------------------------------------- * - | LOGSORT.CMD a subroutine of LOG.CMD | * - | Permits indexing on any field and | * - | copying to another file with the index| * - | Written by Orbra W. Bliss 2/4/85 | * - ----------------------------------------- * - Updated as of 2/16/85 * - ERASE LIST FILES ON &MDRV @ 10,1 SAY 'What is the name of the file to be indexed?' GET MFILE READ STORE !(TRIM(MFILE)) TO MFILE USE &MDRV.:&MFILE ERASE @ 6,10 SAY 'Index on which field ?' @ 8,10 SAY '1) Date 6) RPT' @ 9,10 SAY '2) Time 7) Band' @ 10,10 SAY '3) Station 8) Mode' @ 11,10 SAY '4) Name 0) Return to menu' @ 12,10 SAY '5) QTH' WAIT TO CHOICE DO CASE CASE CHOICE = '1' INDEX ON $(DATE,7,2)+$(DATE,1,6) TO &MDRV.:DATE ? ?' &MDRV.:&MFILE is now indexed with &MDRV.:DATE.NDX' STORE 'DATE.NDX' TO MNDX CASE CHOICE = '2' INDEX ON TIME TO TIME ?' &MDRV.:&MFILE is now indexed with &MDRV.:TIME.NDX' STORE 'TIME.NDX' TO MNDX CASE CHOICE = '3' INDEX ON STATION TO STATION ?' &MDRV.:&MFILE is now indexed with &MDRV.:STATION.NDX' STORE 'STATION.NDX' TO MNDX CASE CHOICE = '4' INDEX ON NAME TO NAME ?' &MDRV.:&MFILE is now indexed with &MDRV.:NAME.NDX' STORE 'NAME.NDX' TO MNDX CASE CHOICE = '5' INDEX ON QTH TO QTH ?' &MDRV.:&MFILE is now indexed with &MDRV.:QTH.NDX' STORE 'QTH.NDX' TO MNDX CASE CHOICE = '6' INDEX ON RPT TO RPT ?' &MDRV.:&MFILE is now indexed with &MDRV.:RPT.NDX' STORE 'RPT.NDX' TO MNDX CASE CHOICE = '7' INDEX ON BAND TO BAND ?' &MDRV.:&MFILE is now indexed with &MDRV.:BAND.NDX' STORE 'BAND.NDX' TO MNDX CASE CHOICE = '8' INDEX ON MODE TO MODE ?' &MDRV.:&MFILE is now indexed with &MDRV.:MODE.NDX' STORE 'MODE.NDX' TO MNDX CASE CHOICE = '0' RETURN ENDCASE  @ 15,1 SAY ' Do you want to copy to another .DBF file using this index? Y/N' WAIT TO ANSWER IF !(ANSWER) = 'Y' ERASE STORE ' ' TO NUFILE @ 18,10 SAY 'Include Drive designation if Not Logged drive.' @ 17,10 SAY 'Enter the name of the receiving file.' GET NUFILE READ USE &MDRV.:&MFILE INDEX &MDRV.:&MNDX COPY TO &NUFILE ENDIF RETURN  CASE CHOICE = '5' INDEX ON QTH TO QTH ?' &MDRV.:&MFILE is now indexed with &MDRV.:QTH.NDX' STORE 'QTH.NDX' TO MNDX CASE CHOICE = '6' INDEX ON RPT TO RPT ?' &MDRV.:&MFILE is now indexed with &MDRV.:RPT.NDX' STORE 'RPT.NDX' TO MNDX CASE CHOICE = '7' INDEX ON BAND TO BAND ?' &MDRV.:&MFILE is now indexed with &MDRV.:BAND.NDX' STORE 'BAND.NDX' TO MNDX CASE CHOICE = '8' INDEX ON MODE TO MODE ?' &MDRV.:&MFILE is now indexed with &MDRV.:MODE.NDX' STORE 'MODE.NDX' TO MNDX CASE CHOICE = '0' RETURN ENDCASE U/1DATEClTIMEClSTATIONC lNAMEClQTHClRPTC mMODEC mBANDCmREMARKSC(m KA2FAJ IRWIN BABYLON, NY 57 | 20 | SSB 09/24/84 | | N8DRE PAUL BELLBROOK, OH 55 | 20 | RTTY 09/28/84 | 1400 | KA8MOP DAVE COLUMBUS, OH | 15 | SSB 09/28/84 | 1400 | W8CCS JOHN | 15 | SSB 09/28/84 | 1410 | N8RO JOHN | 15 | SSB 09/28/84 | 1433 | KA8PGG OTTO MARATHON, FL 56 | 15 | SSB 09/30/84 | | WA7TZW 10 DATA 37,23.5,122,10.5 20 DATA 5 100 REM THIS PROGRAM CALCULATES MOON AIMING DATA FROM A SPECIFIED 110 REM QTH AT SELECTED TIME INTERVALS DURING THE HOUR. 120 REM 130 REM DATA REQUIREMENTS ARE AS FOLLOWS: 140 REM 150 REM LINE 10 - LATITUDE DEGREES, LATITUDE MINUTES, 160 REM LONGITUDE DEGREES, LONGITUDE MINUTES 170 REM 180 REM LINE 20 - TIME INTERVAL FOR CALCULATIONS IN MINUTES 190 REM 200 REM LINE 1050--ALMANAC DATA CONSISTING OF THE TIME, GHA DEGREES 210 REM GHA MINUTES, DECLINATION DEGREES AND DECLINATION 220 REM MINUTES 230 REM 240 REM DATA MUST BE GIVEN FOR BOTH THE BEGINNING AND 250 REM END OF THE HOUR. THAT IS, IF AIMING DATA IS 260 REM DESIRED FOR HOURS BEGINNING 0900,1000, AND 1100 270 REM YOU MUST SHOW DATA FOR 0900,1000,1100 AND 1200 280 REM 290 REM TO INDICATE THE END OF THE HOURLY DATA INCLUDE A SINGLE 300 REM DATA LINE WITH A ONE, A TWO FOR FINISHED MONTH 305 REM WITH THIS METHOD A MONTH AT A TIME CAN BE DONE 310 REM 320 LET R=1.74533E-02 330 LET P1=180*R 340 LET P3=360*R 350 READ L3,L4 360 LET L1=(L3+L4/60)*R 370 READ L3,L4 380 LET L2=(L3+L4/60)*R 390 LET L3=SIN(L1) 400 LET L4=COS(L1) 405 READ J1 406 LET J=60/J1 410 PRINT 420 PRINT 430 PRINT 440 PRINT "MOON AIMING DATA SPECIFICALLY PREPARED FOR K6MYC" 450 PRINT 460 PRINT 470 PRINT "TIME","AZIMUTH","ELEVATION" 480 PRINT 510 READ B 530 READ B1,B2,B3,B4 540 LET G1=(B1+B2/60)*R 550 LET D1=(B3+B4/60)*R 560 READ B5 570 IF B5=1 THEN 450 576 IF B5=2 THEN 2000 577 IF B5=3 THEN 480 580 READ B1,B2,B3,B4 590 LET G2=(B1+B2/60)*R 600 LET D2=(B3+B4/60)*R 610 LET G0=(G2-G1)/J 620 IF G0>0 THEN 640 630 LET G0=(G2+P3-G1)/J 640 LET D0=(D2-D1)/J 650 LET G=G1 660 LET D=D1 670 FOR I=0 TO 59 STEP J1 680 LET D3=SIN(D) 690 LET D4=COS(D) 700 LET H=L2-G 710 IF H-P1<0 THEN 750 720 IF H-P1=0 THEN 770 730 LET H=P3-H 740 GOTO 770 750 IF H+P1 >= 0 THEN 770 760 LET H=P3+H 770 LET A=0 780 LET E=0 790 LET E3=L3*D3+L4*D4*COS(H) 800 IF E3<0 THEN 940 900 IF A >= 0 THEN 940 910 LET A=P3+A 920 GOTO 940 930 LET A=P1-A 940 LET A=INT(10*A/R+.5)/10 950 PRINT B+1,A,E 960 LET G=G+G0 970 LET D=D+D0 980 NEXT I 990 LET G1=G2 1000 LET D1=D2 1010 LET B=B5 1020 GOTO 560 2000 END  PREPARED FOR K6MYC" 450 PRINT 460 PRINT 470 PRINT "TIME","AZIMUTH","ELEVATION" 480 PRINT 510 READ B 530 READ B1,B2,B3,B4 540 LET G1=(B1+B2/60)*R 550 LET D1=(B3+B4/60)*R 560 READ B5 570 IF B5=1 THEN 450 576 IF B5=2 THEN 2000 577 IF B5=3 THEN 480 580 READ B1,B2,B3,B4 590 LET G2=(B1+B2/60)*R 600 LET D2=(B3+B4/60)*R 610 LET G0=(G2-G1)/J 620 IF G0>0 THEN 640 630 LET G0=(G2+P3-G1)/J 640 LET D0=(D2-D1)/J 650 LET G=G1 660 LET D=D1 670 FOR I=0 TO 59 STEP J1 680 LET D3=SIN(D) 690 LET D4=COS(D) 700 LET H=L2-G 710 IF H-P1<0 THEN 750 720 IF H-P1=0 THEN 770 730 LET H=P3-H 740 GOTO 770 750 IF H+P1 >= 0 THEN 770 760 LET H=P3+H 770 LET A=0 780 LET E=0 790 LET E3=L3*D3+L4*D4*COS(H) 800 IF E3<0 THEN 940 900 IF A >= 0 THEN 940 910 LET A=P3+100 DATA 37,34,122,18 110 DATA 15 120 REM THIS PROGRAM CALCULATES MOON AIMING DATA FROM A SPECIFIED 130 REM QTH AT SELECTED TIME INTERVALS DURING THE HOUR. 140 REM 150 REM DATA REQUIREMENTS ARE AS FOLLOWS: 160 REM 170 REM LINE 100 - LATITUDE DEGREES, LATITUDE MINUTES, 180 REM LONGITUDE DEGREES, LONGITUDE MINUTES 190 REM 200 REM LINE 110 - TIME INTERVAL FOR CALCULATIONS IN MINUTES 210 REM 220 REM LINE 1270--ALMANAC DATA CONSISTING OF THE TIME, GHA DEGREES 230 REM GHA MINUTES, DECLINATION DEGREES AND DECLINATION 240 REM MINUTES 250 REM 260 REM DATA MUST BE GIVEN FOR BOTH THE BEGINNING AND 270 REM END OF THE HOUR. THAT IS, IF AIMING DATA IS 280 REM DESIRED FOR HOURS BEGINNING 0900,1000, AND 1100 290 REM YOU MUST SHOW DATA FOR 0900,1000,1100 AND 1200 300 REM 310 REM TO INDICATE THE END OF THE HOURLY DATA INCLUDE A SINGLE 320 REM DATA LINE WITH A ONE, A TWO FOR FINISHED MONTH 330 REM WITH THIS METHOD A MONTH AT A TIME CAN BE DONE 340 REM 350 LET R=1.74533E-02 360 LET P1=180*R 370 LET P3=360*R 380 READ L3,L4 390 LET L1=(L3+L4/60)*R 400 READ L3,L4 410 LET L2=(L3+L4/60)*R 420 LET L3=SIN(L1) 430 LET L4=COS(L1) 440 READ J1 450 LET J=60/J1 460 PRINT 470 PRINT 480 PRINT 490 PRINT "MOON AIMING DATA SPECIFICALLY PREPARED FOR W6PO" 500 PRINT 510 PRINT "MINIMUM AZIMUTH"; 520 INPUT Z1 530 PRINT "MAXIMUM AZIMUTH"; 540 INPUT Z2 550 PRINT "MINIMUM ELEVATION"; 560 INPUT M 570 PRINT "MAXIMUM ELEVATION"; 580 INPUT N 590 PRINT 600 PRINT 610 PRINT "DATE"; 620 INPUT X 630 PRINT 640 PRINT 650 PRINT "GMT","AZIMUTH","ELEVATION" 660 PRINT 670 READ B 680 READ B1,B2,B3,B4 690 LET G1=(B1+B2/60)*R 700 LET D1=(B3+B4/60)*R 710 READ B5 720 IF B5=1 THEN 590 730 IF B5=2 THEN 2000 740 IF B5=3 THEN 660 750 READ B1,B2,B3,B4 760 LET G2=(B1+B2/60)*R 770 LET D2=(B3+B4/60)*R 780 LET G0=(G2-G1)/J 790 IF G0>0 THEN 810 800 LET G0=(G2+P3-G1)/J 810 LET D0=D2-D1/J 820 LET G=G1 830 LET D=D1 840 FOR I=0 TO 59 STEP J1 850 LET D3=SIN(D) 860 LET D4=COS(D) 870 LET H=L2-G 880 IF H-P1<0 THEN 920 890 IF H-P1=0 THEN 940 900 LET H=P3-H 910 GOTO 940 920 IF H+P1 >= 0 THEN 940 930 LET H=P3+H 940 LET A=0 950 LET E=0 960 LET E3=L3*D3+L4*D4*COS(H) 970 IF E3<0 THEN 1110 980 LET E4=SQR(1-E3^2) 990 LET A3=SIN(H)*D4/E4 1000 LET A4=SQR(1-A3^2) 1010 LET A=ATN(A3/A4) 1020 LET E0=E3/E4-4/(240*E4) 1030 IF E0 <= 0 THEN 1170 1040 LET E=ATN(E0)/R 1050 LET E=INT(10*E+.5)/10 1060 IF L3*E3-D3>0 THEN 1100 1070 IF A >= 0 THEN 1110 1080 LET A=P3+A 1090 GOTO 1110 1100 LET A=P1-A 1110 LET A=INT(10*A/R+.5)/10 1120 IF E=0 THEN 1200 1130 IF A>Z1 THEN 1140 ELSE 1200 1140 IF AM THEN 1160 ELSE 1200 1160 IF E=3 THEN 1160 1090 IF INT((Y-1853)/4)<11 THEN 1120 1100 LET C1=-1 1110 GOTO 1130 1120 LET C1=0 1130 LET J1=365*(Y-1853)+D+30*(M+9)+INT((M+10)/2) 1140 LET J2=INT((Y-1853)/4)+1+C1 1150 GOTO 1270 1160 IF INT((Y-1852)/4)<11 THEN 1190 1170 LET C1=-1 1180 GOTO 1200 1190 LET C1=0 1200 IF M=9 THEN 1240 1210 IF M=11 THEN 1240 1220 LET C2=0 1230 GOTO 1250 1240 LET C2=1 1250 LET J1=365*(Y-1852)+D+30*(M-3)+INT((M-2)/2) 1260 LET J2=INT((Y-1852)/4)+C1+C2 1270 LET J=J1+J2 !(JULIAN DATE-2397547.5) FOR 0 HOURS GMT 1280 LET T1=J-17472.5 1290 LET D9=(B-INT(B/100)*100)+INT(B/100)*60 1300 LET D6=(E1-INT(E1/100)*100)+INT(E1/100)*60 1310 LET D7=D9-D6 1320 LET D8=D7-I 1330 IF D7>0 THEN 1350 1340 GOTO 1380 1350 IF D8>=0 THEN 2220 1360 LET B=E1 1370 !CALCULATION OF LATITUDE AND LONGITUDE OF MOON 1380 LET T=(B-INT(B/100)*100)/1440+INT(B/100)*24 1390 LET T5=T1+T 1400 LET K1=FNB(.751213+.036601102*T5) 1410 LET K2=FNB(.822513+.0362916457*T5) 1420 LET K3=FNB(.995766+.00273777852*T5) 1430 LET K4=FNB(.974271+.0338631922*T5) 1440 LET K5=FNB(.0312525+.0367481957*T5) 1450 LET L8=K1+.658*R5*SIN(2*K4)+6.289*R5*SIN(K2) 1460 LET L8=L8-1.274*R5*SIN(K2-2*K4)-.186*R5*SIN(K2-2*K4)-.186*R5*SIN(K3) 1470 LET L8=L8+.214*R5*SIN(2*K2)-.114*R5*SIN(2*K5) 1480 LET L8=L8-.059*R5*SIN(2*K2-2*K4)-.057*R5*SIN(K2+K3-2*K4) 1490 LET K6=K5+.6593*R5*SIN(2*K4)+6.2303*R5*SIN(K2)-1.272*R5*SIN(K2-2*K4) 1500 LET L7=5.144*R5*SIN(K6)-.146*R5*SIN(K5-2*K4) 1510 !CALCULATION OF RIGHT ASCENSION (A=R1) AND DECLINATION (D1) 1520 LET D1=COS(L7)*SIN(L8)*.397821+SIN(L7)*.917463 1530 LET D1=ATN(D1/(SQR(1-D1^2))) 1540 LET A2=COS(L7)*COS(L8)/COS(D1) 1550 LET A2=COS(L7)*SIN(L8)*.917463-SIN(L7)*.397821)/COS(D1) 1560 LET A=ATN(A1/A2) 1570 GOSUB 1860 1580 LET R1=A 1590 LET L1=.065709822*T1 1600 LET L=T*24*1.002738+6.646055+(L1-INT(L1/24)*24 1610 LET L=(L-INT(L/24)*24) 1620! CALCULATION OF GREENWICH HOUR ANGLE,G, FROM LOCAL SIDEREAL TIME 1630 LET G=(L/24)*P5-R1 1640 IF GI6*R5 THEN 2170 1780! CALCULATION OF AZIMUTH,A, OF OBJECT 1790 LET A2=SIN(D1)/(COS(L5)*COS(E)) 1800 LET A2=A2-(SIN(L5)/COS(L5))*(SIN(E)/COS(E)) 1810 LET A1=SIN(L5)*SIN(D1)+COS(L5)*COS(D1)*COS(H) 1820 LET A1=(SIN(H)*COS(D1))/(SQR(1-A1^2)) 1830 LET A=ATN(A1/A2) !AZIMUTH=ARCTAN (SIN OF AZ/COS OF AZ) 1840 GOSUB 1860 1850 GOTO 2020 1860! REMOVAL OF AMBIGUITIES INCURRED WITH ATN FUNCTION 1870 IF A=0 THEN 1890 1880 GOTO 1930 1890 IF A2<0 THEN 1910 1900 GOTO 2010 1910 LET A=P5/2 1920 GOTO 2010 1930 IF A>0THEN 1990 1940 IF A2<0 THEN 1970 1950 LET A=P5+A 1960 GOTO 2010 1970 LET A=P5+(A-P5/2) 1980 GOTO 2010 1990 IF A2>=0 THEN 2010 2000 LET A=A+P5/2 2010 RETURN 2020 IF (T-I1)>(2*I)/1440 THEN 2040 2030 GOTO 2145 2040 PRINT 2145 PRINT IN FORM "4D":(INT(B+.5)) 2150 PRINT IN IMAGE " %%%.% %%.% %%%.% %%%.%":FNA(A),FNA(E),FNA(G),FNA(D1) 2160 LET I1=T 2170 LET B=B+1 2180 LET Z=(B-INT(B/100)*100)-60 2190 IF Z<0 THEN 1290 2200 LET B=INT(B/100)*100+1100+Z 2210 GOTO 1290 2220 NEXT N 2230 LET N=0 2240 PRINT 2250 PRINT 2260 PRINT 2270 PRINT "DO YOU WANT MORE INFORMATION": 2280 INPUT D$ 2290 IF D$="YES" THEN 540 2300 END 500 DIM F(31), V(31), Y(31), Q(31), S(31) 560 P5=2.0000000000*3.1415926535 570 D5=360.0000000000/P5 580 R5=P5/360.0000000000 582 DEF FNA(X)=INT(X*D5*10+.5)/10 584 DEF FNB(X)=(X-INT(X))*P5 585 PRINT "WHAT ARE THE STATION CALL LETTERS"; 586 INPUT W$ 590 PRINT "WHAT IS YOUR LATITUDE IN DEGREES, MINUTES"; 600 INPUT L5,U5 610 PRINT "WHAT IS YOUR LONGITUDE IN DEGREES, MINUTES"; 620 INPUT L6,U6 630 LET L5=(L5+U5/60)*R5 640 LET L6=(L6+U6/60)*R5 650 PRINT "WHAT IS THE DESIRED PRINTING INCREMENT IN MINUTES"; 660 INPUT I 670 PRINT "DO YOU ONLY WANT PRINTOUT WHEN THE MOON IS NEAR THE HORIZON"; 690 INPUT B$ 700 IF B$="YES" THEN 730 710 LET I6=100 720 GOTO 800 730 PRINT "BELOW WHAT ELEVATION IN DEGREES DO YOU WANT PRINTOUT TO OCCUR"; 740 INPUT I6 750 PRINT "WHAT ARE THE GMT MONTH,DAY,YEAR DESIRED": 760 FOR N=1 TO 31 770 INPUT F(N),V(N),Y(N) 780 IF F(N)=0 THEN 860 785 NEXT N 790 GOTO 760 800 PRINT "WHAT ARE THE GMT MONTH,DAY,YEAR,TIME BEGINNING,TIME ENDING" 820 FOR N=1 TO 31 830 INPUT F(N),V(N),Y(N),Q(N),S(N) 840 IF F(N)=0 THEN 860 845 NEXT N 850 GOTO 820 860 LET N5=N-1 870 FOR N=1 TO N5 880 IF B$="YES" THEN 900 890 GOTO 930 900 E1=2400 910 B=0 920 GOTO 950 930 E1=S(N) 940 B=Q(N) 950 M=F(N) 960 D=V(N) 970 Y=Y(N) 980 Y1=Y-(INT(Y/100)*100) 990 PRINT 1000 PRINT 1010 PRINT "POSITION OF MOON ON ";M;"/";D;"/";Y1;"GMT FROM";W$ 1020 PRINT 1030 PRINT " GMT"," AZ"," EL"," GHA"," DEC" 1040 PRINT " ---"," --"," --"," ---"," ---" 1050 PRINT 1060 I1=2 1080 IF M>=3 THEN 1160 1090 IF INT((Y-1853)/4)<11 THEN 1120 1100 C1=-1 1110 GOTO 1130 1120 C1=0 1130 J1=365*(Y-1853)+D+30*(M+9)+INT((M+10)/2) 1140 J2=INT((Y-1853)/4)+1+C1 1150 GOTO 1270 1160 IF INT((Y-1852)/4)<11 THEN 1190 1170 LET C1=-1 1180 GOTO 1200 1190 LET C1=0 1200 IF M=9 THEN 1240 1210 IF M=11 THEN 1240 1220 C2=0 1230 GOTO 1250 1240 C2=1 1250 J1=365*(Y-1852)+D+30*(M-3)+INT((M-2)/2) 1260 J2=INT((Y-1852)/4)+C1+C2 1270 J=J1+J2 1280 T1=J-17472.5 1290 D9=(B-INT(B/100)*100)+INT(B/100)*60 1300 D6=(E1-INT(E1/100)*100)+INT(E1/100)*60 1310 D7=D9-D6 1320 D8=D7-I 1330 IF D7>0 THEN 1350 1340 GOTO 1380 1350 IF D8>=0 THEN 2220 1360 B=E1 1380 T=(B-INT(B/100)*100)/1440+INT(B/100)*24 1390 T5=T1+T 1400 K1=FNB(.751213+.036601102*T5) 1410 K2=FNB(.822513+.0362916457*T5) 1420 K3=FNB(.995766+.00273777852*T5) 1430 K4=FNB(.974271+.0338631922*T5) 1440 K5=FNB(.0312525+.0367481957*T5) 1450 L8=K1+.658*R5*SIN(2*K4)+6.289*R5*SIN(K2) 1460 L8=L8-1.274*R5*SIN(K2-2*K4)-.186*R5*SIN(K2-2*K4)-.186*R5*SIN(K3) 1470 L8=L8+.214*R5*SIN(2*K2)-.114*R5*SIN(2*K5) 1480 L8=L8-.059*R5*SIN(2*K2-2*K4)-.057*R5*SIN(K2+K3-2*K4) 1490 K6=K5+.6593*R5*SIN(2*K4)+6.2303*R5*SIN(K2)-1.272*R5*SIN(K2-2*K4) 1500 L7=5.144*R5*SIN(K6)-.146*R5*SIN(K5-2*K4) 1520 D1=COS(L7)*SIN(L8)*.397821+SIN(L7)*.917463 1530 D1=ATN(D1/(SQR(1-D1^2))) 1531 G1=50+.5+((D1)/(.792))*D5 1532 G2=80+((D1)/(.808))*D5 1533 G3=141.5-((D1)*(.738)*D5) 1534 G4=170.5-((D1)*(.857)*D5) 1540 A2=COS(L7)*COS(L8)/COS(D1) 1550 A1=(COS(L7)*SIN(L8)*.917463-SIN(L7)*.397821)/COS(D1) 1560 LET A=ATN(A1/A2) 1570 GOSUB 1870 1580 R1=A 1590 L1=.065709822*T1 1600 L=T*24*1.002738+6.646055+(L1-INT(L1/24)*24 1610 L=(L-INT(L/24)*24) 1630 G=(L/24)*P5-R1 1640 IF GI6*R5 THEN 2178 1790 A2=SIN(D1)/(COS(L5)*COS(F)) 1800 A2=A2-(SIN(L5)/COS(L5))*(SIN(F)/COS(F)) 1810 A1=SIN(L5)*SIN(D1)+COS(L5)*COS(D1)*COS(H) 1820 A1=(SIN(H)*COS(D1))/(SQR(1-A1^2)) 1830 A=ATN(A1/A2) 1840 GOSUB 1870 1850 GOTO 2020 1870 IF A=0 THEN 1890 1880 GOTO 1930 1890 IF A2<0 THEN 1910 1900 GOTO 2010 1910 A=P5/2 1920 GOTO 2010 1930 IF A>0THEN 1990 1940 IF A2<0 THEN 1970 1950 A=P5+A 1960 GOTO 2010 1970 A=P5+(A-P5/2) 1980 GOTO 2010 1990 IF A2>=0 THEN 2010 2000 A=A+P5/2 2010 RETURN 2020 IF (T-I1)>(2*I)/1440 THEN 2040 2030 GOTO 2050 2040 PRINT 2050 IF INT(B+.5)>9 THEN 2080 2060 S$=" " 2070 GOTO 2142 2080 IF INT(B+.5)>99 THEN 2110 2090 S$=" " 2100 GOTO 2142 2110 IF INT(B+.5)>999 THEN 2140 2120 S$=" " 2130 GOTO 2142 2140 S$="" 2142 Z1=FNA(A) 2144 Z2=FNA(E) 2146 Z3=FNA(G) 2148 Z4=FNA(D1) 2150 IF Z4<0 THEN 2163 2151 IF Z3G2 THEN 2154 2153 GOTO 2157 2154 IF Z3G4 THEN 2163 2156 GOTO 2161 2157 Y$="U" 2158 GOTO 2170 2159 Y$="W" 2160 GOTO 2170 2161 Y$="J" 2162 GOTO 2170 2163 Y$=" " 2170 PRINT S$;STR$(INT(B+.5)),Z1,Z2,Z3,Z4;Y$ 2180 Z=(B-INT(B/100)*100)-60 2190 IF Z<0 THEN 1290 2200 B=INT(B/100)*100+100+Z 2210 GOTO 1290 2220 NEXT N 2230 N=0 2240 PRINT 2260 PRINT 2270 PRINT "DO YOU WANT MORE INFORMATION": 2280 INPUT D$ 2290 IF D$="YES" THEN 560 2300 END 2000 A=A+P5/2 2010 RETURN 2020 IF (T-I1)>(2*I)/1440 THEN 2040 2030 GOTO 2050 2040 PRINT 2050 IF INT(B+.5)>9 THEN 2080 2060; ;=========================================== ; ; ASCII TO BAUDOT TO ASCII PROGRAM ; WITH BUFFER TO DISK AND DISK TO BUFFER ; ROUTINES TAKEN FROM 'LINK.ASM' BY L.E.HUGHS ; ; RANDY SUESS 12/20/78 ;============================================ ; ;08/12/79 MODIFICATIONS BY JIM MILLS WB9KFP TO ALLOW ;OPERATION USING PMMI MM-103 DIRECT-CONNECT MODEM ; ; ; CTRL-R SEND TEXT FILE FROM DISK TO CYBER ; CTRL-Y ENABLE TEXT-FILE-LOADER (INTO MEMORY) ; CTRL-Q DISABLE TEXT FILE LOADER, WRITE MEMORY TO DISK ; BDOS ENTRY POINT AND FUNCTION CODES BDOS EQU 0005H OFFC EQU 15 ;OPEN FILE CFFC EQU 16 ;CLOSE FILE DFFC EQU 19 ;DELETE FILE RRFC EQU 20 ;READ RECORD WRFC EQU 21 ;WRITE RECORD MFFC EQU 22 ;MAKE FILE ; DEFAULT FCB AND FIELD DEFINITIONS FCB EQU 5CH FN EQU 1 ;FILE NAME FIELD (REL) FT EQU 9 ;FILE TYPE FIELD (REL) NR EQU 32 ;NEXT RECORD FIELD (REL) DBUF EQU 80H ;DEFAULT DISK BUFFER ADDRESS ; ASCII CONTROL CHARACTERS BEL EQU 007Q ;BELL LF EQU 012Q ;LINE FEED CR EQU 015Q ;CARRIAGE RETURN DEL EQU 177Q ;DELETE ; I/O PORT ADDRESSES COND EQU 005Q ;CONSOLE DATA PORT COND1 EQU 07H ;SECOND CONSOLE CONS EQU 004Q ;CONSOLE STATUS PORT CONS1 EQU 06H ;2ND CONSOLE MODD EQU FF01H ;MODEM DATA PORT MODS EQU FF00H ;MODEM STATUS PORT ; PMMI PORT ADDRESSES PMMI EQU FF00H ;PMMI BASE ADDRESS PMMIUS EQU PMMI ;PMMI UART STATUS PMMIRD EQU PMMI+1 ;PMMI RCV DATA PMMIMS EQU PMMI+2 ;PMMI MODEM STATUS PMMIIM EQU PMMI+3 ;PMMI INPUT MASK PMMICON EQU PMMI ;PMMI UART/MODEM CONTROL PMMIXD EQU PMMI+1 ;PMMI XMIT DATA PMMIT EQU PMMI+2 ;PMMI TIMER PMMIOM EQU PMMI+3 ;PMMI OUTPUT MASK PMMIMC EQU PMMI+4 ;PMMI MODEM CONTROL ; I/O SYMBOL DEFINITIONS CTBE EQU 02H ;CONSOLE TRANSMIT BUFFER EMPTY CRDA EQU 01H ;CONSOLE READ DATA AVAILABLE MTBE EQU 080H ;RTTY TRANSMIT BUFFER EMPTY MRDA EQU 01H ;RTTY READ DATA AVAILABLE ; MAIN PROGRAM ORG 100H LINK: LXI H,0 ;SAVE OLD STACK POINTER DAD SP SHLD OLDSP LXI SP,STACK+64 ;CREATE LOCAL STACK LINK2: XRA A ;CLEAR CHAR BUFFERS STA INCH STA OUTCH STA FLAG ;CLEAR TEXT SAVE FLAG LXI H,TBUF ;SET PTR TO TBUF SHLD PTR LXI H,0 ;SIZE = 0 SHLD SIZE CALL WCCR ;WRITE CR/LF TO CONSOLE MVI A,BEL ;RING BELL ON CONSOLE, TO LET CALL WCC ; CLONE KNOW WE'RE READY ; MAIN LOOP LINK3: IN CONS ;JUMP IF NO DATA FROM CONSOLE ANI CRDA JZ LINK44 IN COND ;ELSE READ CONSOLE DATA OUT COND ;ECHO TO TERMINAL ANI 177Q ;CALL PCC IF CONTROL CHAR CPI 40Q CC PCC JC LINK4 ;JUMP IF PCC HANDLED CHAR ORI 200Q ;ELSE SET VALID DATA BIT STA INCH ;AND STORE IN INPUT CHAR BUFFER LINK44: IN CONS1 ANI CRDA JZ LINK4 IN COND1 OUT COND1 ANI 07FH CPI 40Q CC PCC JC LINK4 ORI 200Q STA INCH LINK4: IN CONS1 ;JUMP IF CONSOLE XMIT BUFFER BUSY ANI CTBE JZ LINK5 LDA OUTCH ;JUMP IF NO DATA FOR CONSOLE ORA A JP LINK5 ANI 177Q ;ELSE DISCARD VALID DATA BIT OUT COND ; AND OUTPUT CHAR TO CONSOLE OUT COND1 XRA A ; THEN CLEAR OUTPUT CHAR BUFFER STA OUTCH LINK5: IN MODS ;JUMP IF NO DATA FROM RTTY ANI MRDA JNZ LINK6 TTYREAD: ; **** CALL ; ****RTTY READ ROUTINE CALL RMC CALL SAVE ;SAVE CHAR IN TEXT BUFFER IF FLAG ON ORI 200Q ;SET DATA VALID BIT STA OUTCH ;STORE IN OUTPUT CHAR BUFFER LINK6: IN MODS ;JUMP IF RTTY XMIT BUFFER BUSY ANI MTBE JNZ LINK7 LDA INCH ;JUMP IF NO DATA FOR RTTY ORA A JP LINK7 ANI 177Q ;ELSE DISCARD VALID DATA BIT ; ********* CALL RTTY OUT ROUTINE ;****** ADDED CODE TO SEND 2 CR'S AND 1 LF ; FOR EACH CR CPI CR JNZ LNKX MVI A,CR CALL WMC MVI A,LF OUT 1 ;ECHO LF TO CONSOLE CALL WMC LNKX: CALL WMC XRA A ; THEN CLEAR INPUT CHAR BUFFER STA INCH LINK7: JMP LINK3 ;END OF MAIN LOOP LINKX: LHLD OLDSP SPHL XRA A OUT 202Q RET ; PCC - PROCESS CONTROL CHARACTER PCC: CPI 'D'-100Q ;JUMP IF NOT CONTROL-D JNZ PCC1 LHLD OLDSP ;ELSE CLEAN UP ACT AND GO HOME SPHL RET PCC1: CPI 'O'-100Q ;JUMP IF NOT CONTROL-Q JNZ PCC2 CALL STF ;SEND TEXT FILE TO RTTY STC ;TELL LINK TO IGNORE THIS CHARACTER RET PCC2: CPI 'Y'-100Q ;JUMP IF NOT CONTROL-Y JNZ PCC3 MVI A,1 ;TURN ON TEXT SAVE FLAG STA FLAG STC RET PCC3: CPI 'Q'-100Q ;JUMP IF NOT CONTROL-Q JNZ PCC4 XRA A ;TURN OFF TEXT SAVE FLAG STA FLAG CALL WTB ;WRITE TEXT BUFFER TO DISK LXI H,TBUF ;CLEAR TEXT BUFFER SHLD PTR LXI H,0 SHLD SIZE STC RET PCC4: STC ;LET LINK HANDLE ALL OTHER CONTROL CODES CMC RET ; STF - SEND TEXT FILE (TO RTTY) STF: CALL GFN ;GET NAME OF DISK FILE TO SEND JC STF6 ;JUMP IF FILE NAME ERROR CALL OPEN ;TRY TO OPEN SPECIFIED FILE CPI 255 ;JUMP IF FILE NOT FOUND JZ STF7 XRA A ;ELSE REWIND FILE AND GET ON WITH IT STA FCB+NR STF1: CALL READ ;READ NEXT RECORD INTO DBUF CPI 1 ;JUMP IF END-OF-FILE JZ STF5 LXI H,DBUF ;POINT TO DISK BUFFER MVI C,128 STF2: MOV A,M ;FETCH NEXT CHAR FROM DBUF INX H CPI 'Z'-100Q ;JUMP IF END-OF-FILE CHARACTER JZ STF5 CALL WMC ;WRITE CHARACTER TO RTTY CALL WCC ;WRITE CHARACTER TO CONSOLE IN 01 ;CHECK FOR CTRL D ABORT ANI 7FH CPI 04H JZ STF5 STF4: DCR C ;LOOP THRU REST OF DBUF JNZ STF2 JMP STF1 ;GO GET NEXT RECORD FROM DISK STF5: CALL CLOSE ;CLEAN UP ACT AND GO HOME MVI A,BEL ;RING BELL TO LET CLONE CALL WCC ; KNOW WE'RE THROUGH RET STF6: LXI H,STFS1 ;PRINT 'FILE NAME ERROR' CALL WCS RET STF7: LXI H,STFS2 ;PRINT 'FILE NOT FOUND' CALL WCS RET STFS1: DB 'FILE NAME ERROR',CR,LF,0 STFS2: DB 'FILE NOT FOUND',CR,LF,0 ; SAVE - SAVE CHAR IN TEXT BUFFER IF FLAG ON ; ; ENTRY CONDITIONS ; A - CHARACTER TO SAVE SAVE: PUSH PSW LDA FLAG ORA A JNZ SAVE1 POP PSW  RET SAVE1: POP PSW PUSH H LHLD PTR ANI 7FH ;DISCARD PARITY BIT JZ SAVE2 ;JUMP IF CHAR IS A NULL MOV M,A INX H SAVE2: CMA ;DISPLAY CHAR ON LIGHTS OUT 0FFH CMA SHLD PTR LHLD SIZE ;SIZE = SIZE + 1 INX H SHLD SIZE POP H RET ; WTB - WRITE TEXT BUFFER TO DISK WTB: LHLD SIZE ;JUMP IF TEXT BUFFER EMPTY MOV A,L ORA H JZ WTB5 CALL GFN ;GET FILE NAME JC WTB6 ;JUMP IF FILE NAME ERROR CALL DELT ;DELETE OLD FILE, IF ANY CALL MAKE ;MAKE NEW FILE XRA A ;REWIND FILE STA FCB+NR LHLD SIZE ;DE = TBUF SIZE XCHG LXI H,DBUF ;TOP OF STACK POINTS TO DBUF PUSH H LXI H,TBUF ;HL POINTS TO TBUF WTB1: MVI C,128 ;DISK BUFFER SIZE WTB2: MOV A,M ;FETCH NEXT BYTE OF TBUF INX H XTHL MOV M,A ;STORE IN DBUF INX H XTHL DCX D ;SIZE = SIZE - 1 MOV A,D ;EXIT LOOP IF SIZE = 0 ORA E JZ WTB3 DCR C ;LOOP UNTIL DBUF FULL JNZ WTB2 CALL WRITE ;WRITE FULL DBUF TO DISK XTHL ;TOP OF STACK POINTS TO DBUF LXI H,DBUF XTHL JMP WTB1 ;LOOP UNTIL END OF TBUF WTB3: POP H ;HL POINTS TO CURRENT PLACE IN DBUF WTB4: MVI M,'Z'-100Q ;STORE EOF CODE INX H DCR C ;LOOP THRU REST OF DBUF JNZ WTB4 CALL WRITE ;WRITE LAST SECTOR TO DISK CALL CLOSE ;CLEAN UP ACT AND GO HOME MVI A,BEL ;RING BELL TO LET CLONE CALL WCC ; KNOW WE'RE THROUGH RET WTB5: LXI H,WTBS1 ;PRINT 'TEXT BUFFER EMPTY' CALL WCS RET WTB6: LXI H,WTBS2 ;PRINT 'FILE NAME ERROR' CALL WCS RET WTBS1: DB 'TEXT BUFFER EMPTY',CR,LF,0 WTBS2: DB 'FILE NAME ERROR',CR,LF,0 ; WCS - WRITE CONSOLE STRING ; ; ENTRY CONDITIONS ; HL - POINTS TO STRING (TERM BY ZERO BYTE) WCS: MOV A,M INX H ORA A RZ CALL WCC JMP WCS ; WCCR - WRITE CONSOLE CARRIAGE RETURN (AND LINE FEED) WCCR: MVI A,CR CALL WCC MVI A,LF ; WCC - WRITE CONSOLE CHARACTER ; ; ENTRY CONDITIONS: ; A - CHARACTER TO WRITE WCC: PUSH PSW IN CONS ANI CTBE JZ $-4 POP PSW OUT COND PUSH PSW IN CONS1 ANI CTBE JZ $-4 POP PSW OUT COND1 RET ; RCS - READ CONSOLE STRING (WITH ECHO) ; ; EXIT CONDITIONS ; B - NUMBER OF CHARACTERS READ (<255) ; HL - POINTS TO LAST CHAR STORED (CR) RCS: LXI H,IBUF MVI B,0 RCS1: CALL RCC ;READ NEXT CHAR FROM CONSOLE CPI DEL ;JUMP IF NOT DEL JNZ RCS2 INR B ;IGNORE DEL IF IBUF ALREADY EMPTY DCR B JZ RCS1 DCX H ;ELSE DISCARD LAST CHAR MOV A,M ;ECHO DISCARDED CHAR TO CONSOLE CALL WCC DCR B ;DECREMENT COUNT JMP RCS1 ; AND LOOP RCS2: CPI 'U'-100Q ;JUMP IF NOT CONTROL-U JNZ RCS3 CALL WCCR  ;ELSE ABORT CURRENT LINE JMP RCS ; AND START OVER RCS3: CALL WCC ;ECHO CHAR TO CONSOLE MOV M,A ;STORE CHAR IN IBUF INR B ;INCREMENT COUNT CPI CR ;JUMP IF CARRIAGE RETURN JZ RCS4 INX H ;ELSE ADVANCE POINTER JMP RCS1 ; AND LOOP RCS4: MVI A,LF ;ISSUE LINE FEED AND RETURN CALL WCC RET ; RCC - READ CONSOLE CHARACTER ; ; EXIT CONDITIONS ; A - CHARACTER READ RCC: IN CONS ANI CRDA JZ RCCC IN COND ANI 177Q RET RCCC: IN CONS1 ANI CRDA JZ RCC IN COND1 ANI 177Q RET ; WMC - WRITE RTTY CHARACTER ; ; ENTRY CONDITIONS ; A - CHARACTER TO WRITE WMC: ; CALL RTTYOUT ;*************************** CALL RTTYXMIT PUSH PSW ;GONNA PRINT IT? IN 0FFH ANI 80H JNZ DIABLO POP PSW RET ; ; RMC - READ RTTY CHARACTER ; ; EXIT CONDITIONS: ; A - CHARACTER READ RMC: ; CALL RMC ;******************** CALL RTTYREAD PUSH PSW ; ********* OUT TO PRINTER ALSO IF 80H UP IN 0FFH ANI 80H JNZ DIABLO POP PSW RET DIABLO: POP PSW PUSH PSW PUSH B PUSH D PUSH H MOV E,A MVI C,5 CALL BDOS POP H POP D POP B POP PSW RET ; ; ASCRCV(4), VER. 2 ; BY KEITH PETERSEN, W8SDZ. 10/30/78. ; ; THIS IS A PROGRAM TO CHANGE ; ASCII-CODED-BAUDOT TO ASCII. ; THE ROUTINE RETURNS WITH A 0FFH ; IN THE 'A' REGISTER IF CHARACTER ; IS TO BE IGNORED. OTHERWISE IT ; RETURNS WITH THE ASCII CHARACTER ; IN THE 'A' REGISTER. IT IS ASSUMED ; THAT A STATUS TEST HAS BEEN DONE BEFORE ; CALLING THIS ROUTINE TO DETERMINE THAT ; A BAUDOT CHARACTER IS AVAILABLE. ; ; EQUATES ; BTTY: EQU 05H ;BAUDOT UART DATA PORT BELL: EQU 07H ;ASCII BELL LTRS: EQU 1FH ;BAUDOT 'LTRS' SPACE: EQU 04H ;BAUDOT 'SPACE' FIGS: EQU 1BH ;BAUDOT 'FIGS' APOS: EQU 27H ;APOSTROPHE CNTC: EQU 03H ;CONTROL C LARW: EQU 5FH ;LEFT ARROW ASPC: EQU 20H ;ASCII SPACE ATSN: EQU 40H ;"AT" SIGN CNTV: EQU 16H ;CONTROL V CNTO: EQU 0FH ;CONTROL O RUBT: EQU 7FH ;RUBOUT CNTE: EQU 05H ;CONTROL E PCT: EQU 25H ;PERCENT SIGN EQL: EQU 3DH ;EQUALS SIGN GRTH: EQU 3EH ;GREATER-THAN SIGN CNTH: EQU 08H ;CONTROL H LETH: EQU 3CH ;LESS-THAN SIGN CNTB: EQU 02H ;CONTROL B STAR: EQU 2AH ;ASTERISK CNTI: EQU 09H ;CONTROL I CNTZ: EQU 1AH ;CONTROL Z CNTA: EQU 01H ;CONTROL A CNTX: EQU 18H ;CONTROL X UARW: EQU 5EH ;UP-ARROW PLUS: EQU 2BH ;PLUS SIGN RESL: EQU 5CH ;REVERSE SLANT LBKT: EQU 5BH ;LEFT BRACKET RBKT: EQU 5DH ;RIGHT BRACKET ESCP: EQU 1BH ;ESCAPE KEY ALMD: EQU 7DH ;ALTERNATE MODE KEY ; ; PROGRAM STARTS HERE ; RTTYREAD: ; ASCRCV: PUSH H ;SAVE HL REGISTERS LHLD CASAVE ;GET PRESENT CASE ; START: IN BTTY ;GET BAUDOT CHARACTER ANI 1FH ;BAUDOT CHARACTERS ONLY CPI FIGS JZ UCASE CPI LTRS JZ LCASE ORA A ;BAUDOT 'BLANK' ? JZ TCASE CPI SPACE JNZ START1 LXI H,LTABLE ;SPACE GIVES LOWER CASE ; START1: SHLD CASAVE ;SAVE PRESENT CASE ADD L ;ADD CHAR. TO TABLE ADRS. MOV L,A ;L POINTS TO ASCII CHAR. MOV A,H ;GET H FOR CORRECTION ACI 0 ;SEE IF CORRECTION NEEDED MOV H,A ;H IS CORRECT NOW XRA A ;PUT ZERO IN A REG. STA FLAGR ;CLEAR LTRS-FIGS LAST FLAG MOV A,M ;GET ASCII EQUIVALENT POP H ;RESTORE HL REGISTERS ORA A ;IS IT PRINTABLE? RNZ ;YES, VALID CHAR. RETURN CMA ;MAKE 0FFH 'IGNORE FLAG' RET ;RETURN TO CALLING PROGRAM ; LCASE: LXI H,LTABLE ;LOWER CASE TABLE ADDRESS JMP SETFLG ;SET LTRS LAST FLAG, EXIT ; UCASE: LXI H,UTABLE ;UPPER CASE TABLE ADDRESS JMP SETFLG ;SET FIGS LAST FLAG, EXIT ; TCASE: LDA FLAGR ;GET SHIFT REMINDER FLAG CPI FIGS JNZ FCASE LXI H,TTABLE ;THIRD CASE TABLE ADDRESS JMP CLRFLG ; FCASE: CPI LTRS ;CHECK FOR LTRS LAST JNZ CLRFLG LXI H,FTABLE ;FOURTH CASE TABLE ADDRESS ; CLRFLG: XRA A ;READY TO CLEAR FLAG ; SETFLG: STA FLAGR ;LTRS-FIGS LAST FLAG SHLD CASAVE ;SAVE PRESENT CASE MVI A,0FFH ;'IGNORE FLAG' POP H ;RESTORE HL REGS. RET ;RETURN TO CALLING PROGRAM ; ; THIS IS THE LOWER-CASE TABLE. ; LTABLE: DB 0,'E',LF,'A SIU',CR,'DRJNFCK' DB 'TZLWHYPQOBG',FIGS,'MXV' ; ; THIS IS THE UPPER-CASE TABLE. ; UTABLE: DB 0,'3',LF,'- ',BELL,'87',CR,'$4' DB APOS,',!:(5")2#6019?&',FIGS,'./;' ; ; THIS IS THE THIRD-CASE TABLE. ; IT IS USED FOR SPECIAL CHARACTERS. ; THE FIRST COLUMN IN THE TABLE ; THE ASCII CHARACTER EQUIVALENT. ; THE SECOND COLUMN IS THE SPECIAL ; CASE BAUDOT CHARACTER FROM WHICH ; THE CONVERSION IS MADE. ; TTABLE: DB 0,CNTC,LF ;BL 3 LF DB LARW,ASPC,ATSN ;- SP BELL DB CNTV,CNTO,CR ;8 7 CR DB ALMD,CNTE,PCT ;$ 4 ' DB RUBT,EQL,ESCP ;, ! : DB LETH,CNTH,LBKT ;( 5 " DB GRTH,CNTB,STAR ;) 2 # DB CNTI,CNTZ,CNTA ;6 0 1 DB CNTX,UARW,PLUS ;9 ? & DB 0,RBKT,RESL ;FIG . / DB 0 ;; ; ; THIS IS THE FOURTH CASE TABLE ; FOR LOWER-CASE ALPHA CHARACTERS. ; FTABLE: DB 0,65H,LF,61H,ASPC,73H DB 69H,75H,CR,64H,72H,6AH DB 6EH,66H,63H,6BH,74H,7AH DB 6CH,77H,68H,79H,70H,71H DB 6FH,62H,67H,FIGS,6DH,78H DB 76H ; ; TEMPORARY STORAGE AREA ; CASAVE: DW LTABLE ;PRESENT CASE REMINDER FLAGR: DB 0 ;FIGS/LTRS LAST FLAG ; ; ; ASCXMT(4) REV. 2 ; BY KEITH PETERSEN, W8SDZ. 10/29/78. ; ; THIS PROGRAM IS FOR TRANSMITTING ASCII ; THROUGH A BAUDOT MEDIUM USE A SPECIAL ; FORMAT OF FIGURES BLANK (X) - WHERE (X) ; IS A SPECIAL BAUDOT CHARACTER USED TO ; CONVEY THE ASCII EQUIVALENT CHARACTER TO THE ; RECEIVING END WHERE IT IS THEN CONVERTED BACK ; TO ASCII AGAIN. LOWER CASE ALPHA CHARACTERS ; ARE TRANSMITTED VIA A 4TH CASE, LTRS BLANK (X). ; ; EQUATES ; LTRSX: EQU 1FH FIGSX: EQU 1BH CRX: EQU 48H LFX: EQU 42H STATUS: EQU 04H ;BAUDOT UART STATUS PORT TBE: EQU 80H ;UART TRANS. BUF. EMPTY FLAG BTTY: EQU 05H ;BAUDOT UART DATA PORT ALTMOD: EQU 7DH ;ALTERNATE MODE KEY ; ; PROGRAM STARTS HERE. ; CALL WITH ASCII CHARACTER IN ACCUMULATOR. ; ; RTTYXMIT: STARTX: PUSH PSW ;SAVE REGISTERS USED PUSH B PUSH H ; BAUDOT: MVI C,0 ;SET UP COUNTER ANI 7FH ;STRIP PARITY BIT CPI ALTMOD ;ALTERNATE MODE KEY? JNZ BAUD2 ;NO, IGNORE NEXT ROUTINE MVI A,09H ;BAUDOT '$' JMP BAUD3 ; BAUD2: CPI 7BH ;ABOVE L.C. 'Z' ? JNC TTY0 ;IF SO, IGNORE IT LXI H,BTABLE ;POINT TO TABLE START ADD L ;ADD CHARACTER VALUE MOV L,A ;L POINTS TO BAUDOT CHAR. MOV A,H ;GET H FOR CORRECTION ACI 0 ;CORRECT IF NECESSARY MOV H,A ;H IS NOW CORRECT MOV A,M ;GET BAUDOT CHARACTER ORA A ;IS IT A NON-PRINTING CHAR? JZ TTY0 ;IF SO IGNORE IT CPI CRX ;IS IT A CARRIAGE RETURN? JZ TTYOUT-1 ;YES, HANDLE WITHOUT CASE TEST CPI LFX ;IS IT A LINE FEED? JNZ BAUD3 ;NO, IGNORE NEXT ROUTINE MVI A,LTRSX PUSH PSW ;SAVE IT ON STACK MVI A,LFX LXI H,SCASE ;POINT TO PRESENT CASE REG. MVI M,40H ;SET IT TO LOWER CASE JMP TTYOUT-2 ;SEND LF AND LTRS ; BAUD3: PUSH PSW ;SAVE CHARACTER ANI 0C0H ;STRIP ALL BUT CASE BITS LXI H,SCASE ;POINT TO PRESENT CASE REG. CMP M ;SAME CASE AS PREVIOUS CHARACTER? JZ TTYOUT ;YES NO CHANGE NECESSARY MOV M,A ;UPDATE CASE REGISTER ORA A JZ TCASEX CPI 80H JZ UCASEX CPI 0C0H JNZ LCASSEX ; FCASEX: XRA A ;GET A BAUDOT 'BLANK' PUSH PSW ;SAVE IT ON THE STACK INR C ;INCREMENT CHARACTER COUNT ; LCASSEX: MVI A,LTRSX JMP TTYOUT-2 ; TCASEX: XRA A ;GET A BAUDOT 'BLANK' PUSH PSW ;SAVE IT ON THE STACK INR C ;INCREMENT CHARACTER COUNT ; UCASEX: MVI A,FIGSX INR C ;INCREMENT CHARACTER COUNT PUSH PSW ;SAVE IT ON THE STACK ; TTYOUT: IN STATUS ;BAUDOT UART STATUS ANI TBE ;TRANS. BUFFER EMPTY? JNZ TTYOUT ;IF NOT, LOOP AND WAIT POP PSW ;GET CHARACTER ; ; OMIT NSEXT THREE LINES IF NO LIGHTS. ; CMA ;INVERT FOR LIGHTS OUT 0FFH ;PUT ON FRONT PANEL LIGHTS CMA ;INVERT BACK TO NORMAL ; ; OMIT ABOVE THREE LINES IF NO LIGHTS. ; ORI 0E0H ;MAKE UPPER 3 BITS MARKING OUT BTTY ;SEND TO BAUDOT UART PORT DCR C ;MORE TO SEND? JP TTYOUT ;YES, CONTINUE SENDING ; TTY0: POP H ;RESTORE REGISTERS POP B POP PSW RET ;RETURN TO CALLING PROGRAM ; BTABLE: DB 5FH,17H,13H ;NUL SOH STX DB 1,0,0AH ;ETX EOT ENQ DB 0,85H,10H ;ACK BEL BS DB 15H,42H,0C2H ;HT LF VT DB 2,48H,0 ;FF CR SO DB 7,0,0 ;SI DLE DC1 DB 0,0,0 ;DC2 DC3 DC4 DB 0,6,0 ;NAK SYN ETB DB 18H,0,16H ;CAN EM SUB DB 0EH,0,0 ;ESC FS GS DB 0,0,44H ;RS US SPACE DB 8DH,91H,94H ;! " # DB 89H,0BH,9AH ;$ PCT & DB 8BH,8FH,92H ;' ( ) DB 14H,1AH,8CH ;AS PL , DB 83H,9CH,9DH ;- . / DB 96H,97H,93H ;0 1 2 DB 81H,8AH,90H ;3 4 5 DB 95H,87H,86H ;6 7 8 DB 98H,8EH,9EH ;9 : ; DB 0FH,0DH,12H ;LT EQ GT DB 99H,5,43H ;? AT A DB 59H,4EH,49H ;B C D DB 41H,4DH,5AH ;E F G DB 54H,46H,4BH ;H I J DB 4FH,52H,5CH ;K L M DB 4CH,58H,56H ;N O P DB 57H,4AH,45H ;Q R S DB 50H,47H,5EH ;T U V DB 53H,5DH,55H ;W X Y DB 51H,11H,1DH ;Z LB LS DB 1CH,19H,3 ;RB UA LA ; ; THESE ARE THE LOWER CASE ALPHA CHARACTERS ; DB 0,0C3H,0D9H ;' A B  DB 0CEH,0C9H,0C1H ;C D E DB 0CDH,0DAH,0D4H ;F G H DB 0C6H,0CBH,0CFH ;I J K DB 0D2H,0DCH,0CCH ;L M N DB 0D8H,0D6H,0D7H ;O P Q DB 0CAH,0C5H,0D0H ;R S T DB 0C7H,0DEH,0D3H ;U V W DB 0DDH,0D5H,0D1H ;X Y Z ; ; TEMPORARY STORAGE AREA ; SCASE: DB 40H ;PRESENT CASE REGISTER ; GFN: CALL WCCR LXI H,GFNS1 ;PRINT 'FILENAME? ' CALL WCS CALL RCS ;READ RESPONSE INTO IBUF LXI H,FCB+FN ;BLANK FILL FN AND FT FIELDS MVI C,11 GFN1: MVI M,' ' INX H DCR C JNZ GFN1 LXI H,IBUF ;POINT TO INPUT BUFFER LXI D,FCB+FN ;SCAN OFF FN FIELD MVI C,9 GFN2: MOV A,M ;FETCH NSEXT CHAR FROM IBUF INX H CPI 141Q ;IF LC, CONVERT TO UC JC $+5 SUI 40Q CPI CR ;JUMP IF END OF LINE  JZ GFN5 CPI '.' ;JUMP IF END OF NAME JZ GFN3 STAX D ;ELSE STORE CHAR IN FN FIELD INX D DCR C ;LOOP IF 8 OR LESS CHARS SO FAR JNZ GFN2 JMP GFN6 ;ELSE TAKE ERROR SEXIT GFN3: LXI D,FCB+FT ;SCAN OFF FT FIELD MVI C,4 GFN4: MOV A,M ;FETCH NSEXT CHAR FROM IBUF INX H CPI 141Q ;IF LC, CONVERT TO UC JC $+5 SUI 40Q CPI CR ;JUMP IF END OF LINE JZ GFN5 STAX D ;ELSE STORE CHAR IN FT FIELD INX D DCR C ;LOOP IF 3 OR LESS CHARS SO FAR JNZ GFN4 JMP GFN6 ;ELSE TAKE ERROR SEXIT GFN5: STC ;CLEAR ERROR FLAG AND RETURN CMC RET GFN6: STC ;SET ERROR FLAG AND RETURN RET GFNS1: DB 'FILENAME? ',0 ; OPEN - OPEN DISK FILE OPEN: PUSH H PUSH D PUSH B LXI D,FCB MVI C,OFFC CALL BDOS POP B POP D POP H RET ; READ - READ RECORD FROM DISK FILE READ: PUSH H PUSH D PUSH B LXI D,FCB MVI C,RRFC CALL BDOS POP B POP D POP H RET ; CLOSE - CLOSE DISK FILE CLOSE: PUSH H PUSH D PUSH B LXI D,FCB MVI C,CFFC CALL BDOS POP B POP D POP H RET ; DELT - DELETE DISK FILE DELT: PUSH H PUSH D PUSH B LXI D,FCB MVI C,DFFC CALL BDOS POP B POP D POP H RET ; WRITE - WRITE RECORD TO DISK WRITE: PUSH H PUSH D PUSH B LXI D,FCB MVI C,WRFC CALL BDOS POP B POP D POP H RET ; MAKE - MAKE NEW DISK FILE MAKE: PUSH H PUSH D PUSH B LXI D,FCB MVI C,MFFC CALL BDOS POP B POP D POP H RET ; DATA AREA MCB: DS 1 ;RTTY CONTROL BYTE INCH: DS 1 ;INPUT CHAR BUFFER (TO CYBER) OUTCH: DS 1 ;OUTPUT CHAR BUFFER (FROM CYBER) OLDSP: DS 2 ;OLD STACK POINTER STACK: DS 128 ;LOCAL STACK IBUF: DS 256 ; TSEXT BUFFER FLAG: DS 1 ;TSEXT SAVE FLAG PTR: DS 2 ;TSEXT BUFFER POINTER SIZE: DS 2 ;TSEXT BUFFER SIZE TBUF EQU $ ;START OF TSEXT BUFFER NUM EQU TBUF ;TEMPORARY BUFFER FOR PHONE NUMBER END LINK  POP H RET ; MAKE - MAKE NEW DISK FILE MAKE: PUSH H PUSH D PUSH B LXI D,FCB MVI C,MFFC CALL BDOS POP B POP D POP H RET ; DATA AREA MCB: DS 1 ;RTTY CONTROL BYTE INCH: DS 1 ;INPUT CHAR BUFFER (TO CYBER) OUTCH: DS 1 ;OUTPUT CHAR BUFFER (FROM CYBER) OLDSP: DS 2 ;OLD STACK POINTER STACK: DS 128 ;LOCAL STACK IBUF: DS 256 ; TSEXT BUFFER FLAG: DS 1 ;TSEXT SAVE FLAG PTR: DS 2 ;TSEXT BUFFER POINTER SIZE: DS 2;SYSTEM EQUATES UART1 EQU 02400H ;ASCII PORT UART2 EQU 02B00H ;TTY PORT ; ; BEGINING OF ROUTINE ORG 0400H ; LOOP: LDA UART1+1 ANI 02H JZ LOOP1 LDA UART1 ANI 7FH CPI 0DH CZ CRLF STA UART1 CALL TTYXMIT LOOP1: LDA UART2+1 ANI 02H JZ LOOP CALL TTYRCV STA UART1 JMP LOOP CRLF: PUSH PSW CALL TTYXMIT MVI A,0DH CALL TTYXMIT MVI A,0AH STA UART1 CALL TTYXMIT POP PSW RET ; ASCRCV(4), VER. 2 ; BY KEITH PETERSEN, W8SDZ. 10/30/78. ; ; THIS IS A PROGRAM TO CHANGE ; ASCII-CODED-BAUDOT TO ASCII. ; THE ROUTINE RETURNS WITH A 0FFH ; IN THE 'A' REGISTER IF CHARACTER ; IS TO BE IGNORED. OTHERWISE IT ; RETURNS WITH THE ASCII CHARACTER ; IN THE 'A' REGISTER. IT IS ASSUMED ; THAT A STATUS TEST HAS BEEN DONE BEFORE ; CALLING THIS ROUTINE TO DETERMINE THAT ; A BAUDOT CHARACTER IS AVAILABLE. ; ; EQUATES ; BTTY: EQU 02B00H ;BAUDOT UART DATA PORT CR: EQU 0DH ;ASCII CARRIAGE RETURN LF: EQU 0AH ;ASCII LINE FEED BELL: EQU 07H ;ASCII BELL LTRS: EQU 1FH ;BAUDOT 'LTRS' SPACE: EQU 04H ;BAUDOT 'SPACE' FIGS: EQU 1BH ;BAUDOT 'FIGS' APOS: EQU 27H ;APOSTROPHE CNTC: EQU 03H ;CONTROL C LARW: EQU 5FH ;LEFT ARROW ASPC: EQU 20H ;ASCII SPACE ATSN: EQU 40H ;"AT" SIGN CNTV: EQU 16H ;CONTROL V CNTO: EQU 0FH ;CONTROL O RUBT: EQU 7FH ;RUBOUT CNTE: EQU 05H ;CONTROL E PCT: EQU 25H ;PERCENT SIGN EQUL: EQU 3DH ;EQUALS SIGN GRTH: EQU 3EH ;GREATER-THAN SIGN CNTH: EQU 08H ;CONTROL H LETH: EQU 3CH ;LESS-THAN SIGN CNTB: EQU 02H ;CONTROL B STAR: EQU 2AH ;ASTERISK CNTI: EQU 09H ;CONTROL I CNTZ: EQU 1AH ;CONTROL Z CNTA: EQU 01H ;CONTROL A CNTX: EQU 18H ;CONTROL X UARW: EQU 5EH ;UP-ARROW PLUS: EQU 2BH ;PLUS SIGN RESL: EQU 5CH ;REVERSE SLANT LBKT: EQU 5BH ;LEFT BRACKET RBKT: EQU 5DH ;RIGHT BRACKET ESCP: EQU 1BH ;ESCAPE KEY ALMD: EQU 7DH ;ALTERNATE MODE KEY BEGIN: EQU $ ;MY ADDRESS FOR THIS PROGRAM ; ; PROGRAM STARTS HERE ; TTYRCV: ; ASCRCV: PUSH H ;SAVE HL REGISTERS LHLD CASAVE ;GET PRESENT CASE ; START: LDA BTTY ;GET BAUDOT CHARACTER ANI 1FH ;BAUDOT CHARACTERS ONLY CPI FIGS JZ UCASE CPI LTRS JZ LCASE ORA A ;BAUDOT 'BLANK' ? JZ TCASE CPI SPACE JNZ START1 LXI H,LTABLE ;SPACE GIVES LOWER CASE ; START1: SHLD CASAVE ;SAVE PRESENT CASE ADD L ;ADD CHAR. TO TABLE ADRS. MOV L,A ;L POINTS TO ASCII CHAR. MOV A,H ;GET H FOR CORRECTION ACI 0 ;SEE IF CORRECTION NEEDED MOV H,A ;H IS CORRECT NOW XRA A ;PUT ZERO IN A REG. STA FLAG ;CLEAR LTRS-FIGS LAST FLAG MOV A,M ;GET ASCII EQUIVALENT POP H ;RESTORE HL REGISTERS ORA A ;IS IT PRINTABLE? RNZ ;YES, VALID CHAR. RETURN CMA ;MAKE 0FFH 'IGNORE FLAG' RET ;RETURN TO CALLING PROGRAM ; LCASE: LXI H,LTABLE ;LOWER CASE TABLE ADDRESS JMP SETFLG ;SET LTRS LAST FLAG, EXIT ; UCASE: LXI H,UTABLE ;UPPER CASE TABLE ADDRESS JMP SETFLG ;SET FIGS LAST FLAG, EXIT ; TCASE: LDA FLAG ;GET SHIFT REMINDER FLAG CPI FIGS JNZ FCASE LXI H,TTABLE ;THIRD CASE TABLE ADDRESS JMP CLRFLG ; FCASE: CPI LTRS ;CHECK FOR LTRS LAST JNZ CLRFLG LXI H,FTABLE ;FOURTH CASE TABLE ADDRESS ; CLRFLG: XRA A ;READY TO CLEAR FLAG ; SETFLG: STA FLAG ;LTRS-FIGS LAST FLAG SHLD CASAVE ;SAVE PRESENT CASE MVI A,0FFH ;'IGNORE FLAG' POP H ;RESTORE HL REGS. RET ;RETURN TO CALLING PROGRAM ; ; THIS IS THE LOWER-CASE TABLE. ; LTABLE: DB 0,'E',LF,'A SIU',CR,'DRJNFCK' DB 'TZLWHYPQOBG',FIGS,'MXV' ; ; THIS IS THE UPPER-CASE TABLE. ; UTABLE: DB 0,'3',LF,'- ',BELL,'87',CR,'$4' DB APOS,',!:(5")2#6019?&',FIGS,'./;' ; ; THIS IS THE THIRD-CASE TABLE. ; IT IS USED FOR SPECIAL CHARACTERS. ; THE FIRST COLUMN IN THE TABLE ; THE ASCII CHARACTER EQUIVALENT. ; THE SECOND COLUMN IS THE SPECIAL ; CASE BAUDOT CHARACTER FROM WHICH ; THE CONVERSION IS MADE. ; TTABLE: DB 0,CNTC,LF ;BL 3 LF DB LARW,ASPC,ATSN ;- SP BELL DB CNTV,CNTO,CR ;8 7 CR DB ALMD,CNTE,PCT ;$ 4 ' DB RUBT,EQUL,ESCP ;, ! : DB LETH,CNTH,LBKT ;( 5 " DB GRTH,CNTB,STAR ;) 2 # DB CNTI,CNTZ,CNTA ;6 0 1 DB CNTX,UARW,PLUS ;9 ? & DB 0,RBKT,RESL ;FIG . / DB 0 ;; ; ; THIS IS THE FOURTH CASE TABLE ; FOR LOWER-CASE ALPHA CHARACTERS. ; FTABLE: DB 0,65H,LF,61H,ASPC,73H DB 69H,75H,CR,64H,72H,6AH DB 6EH,66H,63H,6BH,74H,7AH DB 6CH,77H,68H,79H,70H,71H DB 6FH,62H,67H,FIGS,6DH,78H DB 76H ; ; TEMPORARY STORAGE AREA ; ; ; ; ASCXMT(4) REV. 2 ; BY KEITH PETERSEN, W8SDZ. 10/29/78. ; ; THIS PROGRAM IS FOR TRANSMITTING ASCII ; THROUGH A BAUDOT MEDIUM USE A SPECIAL ; FORMAT OF FIGURES BLANK (X) - WHERE (X) ; IS A SPECIAL BAUDOT CHARACTER USED TO ; CONVEY THE ASCII EQUIVALENT CHARACTER TO THE ; RECEIVING END WHERE IT IS THEN CONVERTED BACK ; TO ASCII AGAIN. LOWER CASE ALPHA CHARACTERS ; ARE TRANSMITTED VIA A 4TH CASE, LTRSX BLANK (X). ; ; EQUATES ; LTRSX: EQU 1FH FIGSX: EQU 1BH CRX: EQU 48H LFX: EQU 42H ALTMOD: EQU 7DH ;ALTERNATE MODE KEY ; ; PROGRAM STARTS HERE. TTYXMIT: ; CALL WITH ASCII CHARACTER IN ACCUMULATOR. ; ; STARTX: PUSH PSW ;SAVE REGISTERS USED PUSH B PUSH H ; BAUDOT: MVI C,0 ;SET UP COUNTER ANI 7FH ;STRIP PARITY BIT CPI ALTMOD ;ALTERNATE MODE KEY? JNZ BAUD2 ;NO, IGNORE NEXT ROUTINE MVI A,09H ;BAUDOT '$' JMP BAUD3 ; BAUD2: CPI 7BH ;ABOVE L.C. 'Z' ? JNC TTY0 ;IF SO, IGNORE IT LXI H,BTABLE ;POINT TO TABLE START ADD L ;ADD CHARACTER VALUE MOV L,A ;L POINTS TO BAUDOT CHAR. MOV A,H ;GET H FOR CORRECTION ACI 0 ;CORRECT IF NECESSARY MOV H,A ;H IS NOW CORRECT MOV A,M ;GET BAUDOT CHARACTER ORA A ;IS IT A NON-PRINTING CHAR? JZ TTY0 ;IF SO IGNORE IT CPI CRX ;IS IT A CARRIAGE RETURN? JZ TTYOUT-1 ;YES, HANDLE WITHOUT CASE TEST CPI LFX ;IS IT A LINE FEED? JNZ BAUD3 ;NO, IGNORE NEXT ROUTINE MVI A,LTRSX PUSH PSW ;SAVE IT ON STACK MVI A,LFX LXI H,SCASE ;POINT TO PRESENT CASE REG. MVI M,40H ;SET IT TO LOWER CASE JMP TTYOUT-2 ;SEND LF AND LTRSX ; BAUD3: PUSH PSW ;SAVE CHARACTER ANI 0C0H ;STRIP ALL BUT CASE BITS LXI H,SCASE ;POINT TO PRESENT CASE REG. CMP M ;SAME CASE AS PREVIOUS CHARACTER? JZ TTYOUT ;YES NO CHANGE NECESSARY MOV M,A ;UPDATE CASE REGISTER ORA A JZ TCASEX CPI 80H JZ UCASEX CPI 0C0H JNZ LCASEX ; FCASEX: XRA A ;GET A BAUDOT 'BLANK' PUSH PSW ;SAVE IT ON THE STACK INR C ;INCRXEMENT CHARACTER COUNT ; LCASEX: MVI A,LTRSX JMP TTYOUT-2 ; TCASEX: XRA A ;GET A BAUDOT 'BLANK' PUSH PSW ;SAVE IT ON THE STACK INR C ;INCRXEMENT CHARACTER COUNT ; UCASEX: MVI A,FIGSX INR C ;INCRXEMENT CHARACTER COUNT PUSH PSW ;SAVE IT ON THE STACK ; TTYOUT: LDA UART2+1 ANI 1 JZ TTYOUT POP PSW ;GET CHARACTER ; ; ; ORI 0E0H ;MAKE UPPER 3 BITS MARKING STA UART2 ;SEND TO BAUDOT PORT DCR C ;MORE TO SEND? JP TTYOUT ;YES, CONTINUE SENDING ; TTY0: POP H ;RESTORE REGISTERS POP B POP PSW RET ;RETURN TO CALLING PROGRAM ; BTABLE: DB 5FH,17H,13H ;NUL SOH STX DB 1,0,0AH ;ETX EOT ENQ DB 0,85H,10H ;ACK BEL BS DB 15H,42H,0C2H ;HT LF VT DB 2,48H,0 ;FF CRX SO DB 7,0,0 ;SI DLE DC1 DB 0,0,0 ;DC2 DC3 DC4 DB 0,6,0 ;NAK SYN ETB DB 18H,0,16H ;CAN EM SUB DB 0EH,0,0 ;ESC FS GS DB 0,0,44H ;RS US SPACE DB 8DH,91H,94H ;! " # DB 89H,0BH,9AH ;$ PCT & DB 8BH,8FH,92H ;' ( ) DB 14H,1AH,8CH ;AS PL , DB 83H,9CH,9DH ;- . / DB 96H,97H,93H ;0 1 2 DB 81H,8AH,90H ;3 4 5 DB 95H,87H,86H ;6 7 8 DB 98H,8EH,9EH ;9 : ; DB 0FH,0DH,12H ;LT EQ GT DB 99H,5,43H ;? AT A DB 59H,4EH,49H ;B C D DB 41H,4DH,5AH ;E F G DB 54H,46H,4BH ;H I J DB 4FH,52H,5CH ;K L M DB 4CH,58H,56H ;N O P DB 57H,4AH,45H ;Q R S DB 50H,47H,5EH ;T U V DB 53H,5DH,55H ;W X Y DB 51H,11H,1DH ;Z LB LS DB 1CH,19H,3 ;RB UA LA ; ; THESE ARE THE LOWER CASE ALPHA CHARACTERS ; DB 0,0C3H,0D9H ;' A B DB 0CEH,0C9H,0C1H ;C D E DB 0CDH,0DAH,0D4H ;F G H DB 0C6H,0CBH,0CFH ;I J K DB 0D2H,0DCH,0CCH ;L M N DB 0D8H,0D6H,0D7H ;O P Q DB 0CAH,0C5H,0D0H ;R S T DB 0C7H,0DEH,0D3H ;U V W DB 0DDH,0D5H,0D1H ;X Y Z ; ; TEMPORARY STORAGE AREA ; RAM EQU 1400H ORG RAM SCASE: DB 40H ;PRESENT CASE REGISTER ; ; TEMPORARY STORAGE AREA ; CASAVE: DW LTABLE ;PRESENT CASE REMINDER FLAG: DB 0 ;FIGS/LTRS LAST FLAG ; / DB 96H,97H,93H ;0 1 2 DB 81H,8AH,90H ;3 4 5 DB 95H,87H,86H ;6 7 8 DB 98H,8EH,9EH ;9 : ; DB 0FH,0DH,12H ;LT EQ GT DB 99H,5,43H ;? AT A DB 59H,4EH,49H ;B C D DB 41H,4DH,5AH ;E F G DB 54H,46H,4BH ;H I J DB 4FH,52H,5CH ;K L M DB 4CH,58H,56H ;N O P DB 57H,4AH,45H ;Q R S DB 50H,47H,5EH ;T U V DB 53H,5DH,55H ;W X Y DB 51H,11H,1DH ;Z LB LS DB 1CH,19H,3 ;RB UA LA ; ; THESE ARE THE LOWER CASE ALPHA CHARACTERS ; DB 0,0C3H,0D9H ;' A B DB 0CEH,0C9H,0C1H ;C D E DB 0CDH,0DAH,0D4H ;F G H DB 0C6H,0CBH,0CFH ;I J K DB 0D2H,0DCH,0CCH ;L M N DB 0D8H,0D6H,0D7H ;O P Q DB 0CAH,0C5H,0D0H ;R S T DB 0C7H,0DEH,0D3H ;U V W DB 0DDH,0D5H,0D1H ;X Y Z ; ; TEMPORARY STORAGE AREA ; RAM EQU 1400H ORG RAM SCASE: DB 40H ;PRESENT CASE REGISTER ; ; TEMPORARY ; ; ASCRCV(4), VER. 2 ; BY KEITH PETERSEN, W8SDZ. 10/30/78. ; ; THIS IS A PROGRAM TO CHANGE ; ASCII-CODED-BAUDOT TO ASCII. ; THE ROUTINE RETURNS WITH A 0FFH ; IN THE 'A' REGISTER IF CHARACTER ; IS TO BE IGNORED. OTHERWISE IT ; RETURNS WITH THE ASCII CHARACTER ; IN THE 'A' REGISTER. IT IS ASSUMED ; THAT A STATUS TEST HAS BEEN DONE BEFORE ; CALLING THIS ROUTINE TO DETERMINE THAT ; A BAUDOT CHARACTER IS AVAILABLE. ; ; EQUATES ; BTTY: EQU 0BH ;BAUDOT UART DATA PORT CR: EQU 0DH ;ASCII CARRIAGE RETURN LF: EQU 0AH ;ASCII LINE FEED BELL: EQU 07H ;ASCII BELL LTRS: EQU 1FH ;BAUDOT 'LTRS' SPACE: EQU 04H ;BAUDOT 'SPACE' FIGS: EQU 1BH ;BAUDOT 'FIGS' APOS: EQU 27H ;APOSTROPHE CNTC: EQU 03H ;CONTROL C LARW: EQU 5FH ;LEFT ARROW ASPC: EQU 20H ;ASCII SPACE ATSN: EQU 40H ;"AT" SIGN CNTV: EQU 16H ;CONTROL V CNTO: EQU 0FH ;CONTROL O RUBT: EQU 7FH ;RUBOUT CNTE: EQU 05H ;CONTROL E PCT: EQU 25H ;PERCENT SIGN EQUL: EQU 3DH ;EQUALS SIGN GRTH: EQU 3EH ;GREATER-THAN SIGN CNTH: EQU 08H ;CONTROL H LETH: EQU 3CH ;LESS-THAN SIGN CNTB: EQU 02H ;CONTROL B STAR: EQU 2AH ;ASTERISK CNTI: EQU 09H ;CONTROL I CNTZ: EQU 1AH ;CONTROL Z CNTA: EQU 01H ;CONTROL A CNTX: EQU 18H ;CONTROL X UARW: EQU 5EH ;UP-ARROW PLUS: EQU 2BH ;PLUS SIGN RESL: EQU 5CH ;REVERSE SLANT LBKT: EQU 5BH ;LEFT BRACKET RBKT: EQU 5DH ;RIGHT BRACKET ESCP: EQU 1BH ;ESCAPE KEY ALMD: EQU 7DH ;ALTERNATE MODE KEY BEGIN: EQU 0FB00H ;MY ADDRESS FOR THIS PROGRAM ; ; PROGRAM STARTS HERE ; ORG BEGIN ;PUT DESIRED ADDRESS HERE ; ASCRCV: PUSH H ;SAVE HL REGISTERS LHLD CASAVE ;GET PRESENT CASE ; START: IN BTTY ;GET BAUDOT CHARACTER ANI 1FH ;BAUDOT CHARACTERS ONLY CPI FIGS JZ UCASE CPI LTRS JZ LCASE ORA A ;BAUDOT 'BLANK' ? JZ TCASE CPI SPACE JNZ START1 LXI H,LTABLE ;SPACE GIVES LOWER CASE ; START1: SHLD CASAVE ;SAVE PRESENT CASE ADD L ;ADD CHAR. TO TABLE ADRS. MOV L,A ;L POINTS TO ASCII CHAR. MOV A,H ;GET H FOR CORRECTION ACI 0 ;SEE IF CORRECTION NEEDED MOV H,A ;H IS CORRECT NOW XRA A ;PUT ZERO IN A REG. STA FLAG ;CLEAR LTRS-FIGS LAST FLAG MOV A,M ;GET ASCII EQUIVALENT POP H ;RESTORE HL REGISTERS ORA A ;IS IT PRINTABLE? RNZ ;YES, VALID CHAR. RETURN CMA ;MAKE 0FFH 'IGNORE FLAG' RET ;RETURN TO CALLING PROGRAM ; LCASE: LXI H,LTABLE ;LOWER CASE TABLE ADDRESS JMP SETFLG ;SET LTRS LAST FLAG, EXIT ; UCASE: LXI H,UTABLE ;UPPER CASE TABLE ADDRESS JMP SETFLG ;SET FIGS LAST FLAG, EXIT ; TCASE: LDA FLAG ;GET SHIFT REMINDER FLAG CPI FIGS JNZ FCASE LXI H,TTABLE ;THIRD CASE TABLE ADDRESS JMP CLRFLG ; FCASE: CPI LTRS ;CHECK FOR LTRS LAST JNZ CLRFLG LXI H,FTABLE ;FOURTH CASE TABLE ADDRESS ; CLRFLG: XRA A ;READY TO CLEAR FLAG ; SETFLG: STA FLAG ;LTRS-FIGS LAST FLAG SHLD CASAVE ;SAVE PRESENT CASE MVI A,0FFH ;'IGNORE FLAG' POP H ;RESTORE HL REGS. RET ;RETURN TO CALLING PROGRAM ; ; THIS IS THE LOWER-CASE TABLE. ; LTABLE: DB 0,'E',LF,'A SIU',CR,'DRJNFCK' DB 'TZLWHYPQOBG',FIGS,'MXV' ; ; THIS IS THE UPPER-CASE TABLE. ; UTABLE: DB 0,'3',LF,'- ',BELL,'87',CR,'$4' DB APOS,',!:(5")2#6019?&',FIGS,'./;' ; ; THIS IS THE THIRD-CASE TABLE. ; IT IS USED FOR SPECIAL CHARACTERS. ; THE FIRST COLUMN IN THE TABLE ; THE ASCII CHARACTER EQUIVALENT. ; THE SECOND COLUMN IS THE SPECIAL ; CASE BAUDOT CHARACTER FROM WHICH ; THE CONVERSION IS MADE. ; TTABLE: DB 0,CNTC,LF ;BL 3 LF DB LARW,ASPC,ATSN ;- SP BELL DB CNTV,CNTO,CR ;8 7 CR DB ALMD,CNTE,PCT ;$ 4 ' DB RUBT,EQUL,ESCP ;, ! : DB LETH,CNTH,LBKT ;( 5 " DB GRTH,CNTB,STAR ;) 2 # DB CNTI,CNTZ,CNTA ;6 0 1 DB CNTX,UARW,PLUS ;9 ? & DB 0,RBKT,RESL ;FIG . / DB 0 ;; ; ; THIS IS THE FOURTH CASE TABLE ; FOR LOWER-CASE ALPHA CHARACTERS. ; FTABLE: DB 0,65H,LF,61H,ASPC,73H DB 69H,75H,CR,64H,72H,6AH DB 6EH,66H,63H,6BH,74H,7AH DB 6CH,77H,68H,79H,70H,71H DB 6FH,62H,67H,FIGS,6DH,78H DB 76H ; ; TEMPORARY STORAGE AREA ; CASAVE: DW LTABLE ;PRESENT CASE REMINDER FLAG: DB 0 ;FIGS/LTRS LAST FLAG ; END ; THIS IS A SAMPLE OF THE POLLING ROUTINE ; USED TO ALLOW INPUT FROM EITHER THE ASCII ; OR BAUDOT KEYBOARD INPUT PORTS. IT CAN ; BE LINKED TO ANY PROGRAM WHICH USES A ; NORMAL INPUT ROUTINE WHICH RETURNS WITH ; THE ASCII CHARACTER IN THE ACCUMULATOR. ; POLL: IN BSTATUS ;BAUDOT UART STATUS PORT ANI RDA ;TEST FOR RCVE DATA AVAIL FLAG JZ POLL2 ;NO CHAR. TEST ASCII (MAY NEED JNZ HERE) CALL ASCRCV4 ;CHARACTER THERE, GET AND CONVERT CPI 0FFH ;IGNORE FLAG THERE? RNZ ;NO, RETURN WITH ASCII CHARACTER ; POLL2: IN ASTATUS ;GET ASCII UART STATUS ANI RDA ;TEST DATA AVAIL. FLAG JZ POLL ;NO CHAR., RESUME POLLING (MAY NEED JNZ HERE) IN ADATA ;GET ASCII UART DATA ANI 7FH ;STRIP PARITY BIT RET ;ASCII CHAR. IN ACCUMULATOR ; ; END OF SAMPLE POLLING ROUTINE. B 6EH,66H,63H,6BH,74H,7AH DB 6CH,77H,68H,79H,70H,71H DB 6FH,62H,67H,FIGS,6DH,78H DB 76H ; ; TEMPORARY STORAGE AREA ; CASAVE: DW LTABLE ;PRESENT CASE REMINDER FLAG: DB 0 ;FIGS/LTRS LAST FLAG ; END ; THIS IS A SAMPLE OF THE POLLING ROUT ORG 100H LOOP IN 04 ANI 01 JNZ LOOP CALL ASCRCV CPI 0FFH JZ LOOP OUT 1 PUSH B MOV C,A IN 0FFH CPI 80H JNZ LOOP1 CALL 0E000H LOOP1 POP B IN 01 ANI 7FH CPI 1BH JZ 0 JMP LOOP ; ; ASCRCV(4), VER. 2 ; BY KEITH PETERSEN, W8SDZ. 10/30/78. ; ; THIS IS A PROGRAM TO CHANGE ; ASCII-CODED-BAUDOT TO ASCII. ; THE ROUTINE RETURNS WITH A 0FFH ; IN THE 'A' REGISTER IF CHARACTER ; IS TO BE IGNORED. OTHERWISE IT ; RETURNS WITH THE ASCII CHARACTER ; IN THE 'A' REGISTER. IT IS ASSUMED ; THAT A STATUS TEST HAS BEEN DONE BEFORE ; CALLING THIS ROUTINE TO DETERMINE THAT ; A BAUDOT CHARACTER IS AVAILABLE. ; ; EQUATES ; BTTY: EQU 05H ;BAUDOT UART DATA PORT CR: EQU 0DH ;ASCII CARRIAGE RETURN LF: EQU 0AH ;ASCII LINE FEED BELL: EQU 07H ;ASCII BELL LTRS: EQU 1FH ;BAUDOT 'LTRS' SPACE: EQU 04H ;BAUDOT 'SPACE' FIGS: EQU 1BH ;BAUDOT 'FIGS' APOS: EQU 27H ;APOSTROPHE CNTC: EQU 03H ;CONTROL C LARW: EQU 5FH ;LEFT ARROW ASPC: EQU 20H ;ASCII SPACE ATSN: EQU 40H ;"AT" SIGN CNTV: EQU 16H ;CONTROL V CNTO: EQU 0FH ;CONTROL O RUBT: EQU 7FH ;RUBOUT CNTE: EQU 05H ;CONTROL E PCT: EQU 25H ;PERCENT SIGN EQUL: EQU 3DH ;EQUALS SIGN GRTH: EQU 3EH ;GREATER-THAN SIGN CNTH: EQU 08H ;CONTROL H LETH: EQU 3CH ;LESS-THAN SIGN CNTB: EQU 02H ;CONTROL B STAR: EQU 2AH ;ASTERISK CNTI: EQU 09H ;CONTROL I CNTZ: EQU 1AH ;CONTROL Z CNTA: EQU 01H ;CONTROL A CNTX: EQU 18H ;CONTROL X UARW: EQU 5EH ;UP-ARROW PLUS: EQU 2BH ;PLUS SIGN RESL: EQU 5CH ;REVERSE SLANT LBKT: EQU 5BH ;LEFT BRACKET RBKT: EQU 5DH ;RIGHT BRACKET ESCP: EQU 1BH ;ESCAPE KEY ALMD: EQU 7DH ;ALTERNATE MODE KEY BEGIN: EQU 0200H ;MY ADDRESS FOR THIS PROGRAM ; ; PROGRAM STARTS HERE ; ; ASCRCV: PUSH H ;SAVE HL REGISTERS LHLD CASAVE ;GET PRESENT CASE ; START: IN BTTY ;GET BAUDOT CHARACTER ANI 1FH ;BAUDOT CHARACTERS ONLY CPI FIGS JZ UCASE CPI LTRS JZ LCASE ORA A ;BAUDOT 'BLANK' ? JZ TCASE CPI SPACE JNZ START1 LXI H,LTABLE ;SPACE GIVES LOWER CASE ; START1: SHLD CASAVE ;SAVE PRESENT CASE ADD L ;ADD CHAR. TO TABLE ADRS. MOV L,A ;L POINTS TO ASCII CHAR. MOV A,H ;GET H FOR CORRECTION ACI 0 ;SEE IF CORRECTION NEEDED MOV H,A ;H IS CORRECT NOW XRA A ;PUT ZERO IN A REG. STA FLAG ;CLEAR LTRS-FIGS LAST FLAG MOV A,M ;GET ASCII EQUIVALENT POP H ;RESTORE HL REGISTERS ORA A ;IS IT PRINTABLE? RNZ ;YES, VALID CHAR. RETURN CMA ;MAKE 0FFH 'IGNORE FLAG' RET ;RETURN TO CALLING PROGRAM ; LCASE: LXI H,LTABLE ;LOWER CASE TABLE ADDRESS JMP SETFLG ;SET LTRS LAST FLAG, EXIT ; UCASE: LXI H,UTABLE ;UPPER CASE TABLE ADDRESS JMP SETFLG ;SET FIGS LAST FLAG, EXIT ; TCASE: LDA FLAG ;GET SHIFT REMINDER FLAG CPI FIGS JNZ FCASE LXI H,TTABLE ;THIRD CASE TABLE ADDRESS JMP CLRFLG ; FCASE: CPI LTRS ;CHECK FOR LTRS LAST JNZ CLRFLG LXI H,FTABLE ;FOURTH CASE TABLE ADDRESS ; CLRFLG: XRA A ;READY TO CLEAR FLAG ; SETFLG: STA FLAG ;LTRS-FIGS LAST FLAG SHLD CASAVE ;SAVE PRESENT CASE MVI A,0FFH ;'IGNORE FLAG' POP H ;RESTORE HL REGS. RET ;RETURN TO CALLING PROGRAM ; ; THIS IS  THE LOWER-CASE TABLE. ; LTABLE: DB 0,'E',LF,'A SIU',CR,'DRJNFCK' DB 'TZLWHYPQOBG',FIGS,'MXV' ; ; THIS IS THE UPPER-CASE TABLE. ; UTABLE: DB 0,'3',LF,'- ',BELL,'87',CR,'$4' DB APOS,',!:(5")2#6019?&',FIGS,'./;' ; ; THIS IS THE THIRD-CASE TABLE. ; IT IS USED FOR SPECIAL CHARACTERS. ; THE FIRST COLUMN IN THE TABLE ; THE ASCII CHARACTER EQUIVALENT. ; THE SECOND COLUMN IS THE SPECIAL ; CASE BAUDOT CHARACTER FROM WHICH ; THE CONVERSION IS MADE. ; TTABLE: DB 0,CNTC,LF ;BL 3 LF DB LARW,ASPC,ATSN ;- SP BELL DB CNTV,CNTO,CR ;8 7 CR DB ALMD,CNTE,PCT ;$ 4 ' DB RUBT,EQUL,ESCP ;, ! : DB LETH,CNTH,LBKT ;( 5 " DB GRTH,CNTB,STAR ;) 2 # DB CNTI,CNTZ,CNTA ;6 0 1 DB CNTX,UARW,PLUS ;9 ? & DB 0,RBKT,RESL ;FIG . / DB 0 ;; ; ; THIS IS THE FOURTH CASE TABLE ; FOR LOWER-CASE ALPHA CHARACTERS. ; FTABLE: DB 0,65H,LF,61H,ASPC,73H DB 69H,75H,CR,64H,72H,6AH DB 6EH,66H,63H,6BH,74H,7AH DB 6CH,77H,68H,79H,70H,71H DB 6FH,62H,67H,FIGS,6DH,78H  DB 76H ; ; TEMPORARY STORAGE AREA ; CASAVE: DW LTABLE ;PRESENT CASE REMINDER FLAG: DB 0 ;FIGS/LTRS LAST FLAG ; END ; THIS IS A SAMPLE OF THE POLLING ROUTINE ; USED TO ALLOW INPUT FROM EITHER THE ASCII ; OR BAUDOT KEYBOARD INPUT PORTS. IT CAN ; BE LINKED TO ANY PROGRAM WHICH USES A ; NORMAL INPUT ROUTINE WHICH RETURNS WITH ; THE ASCII CHARACTER IN THE ACCUMULATOR. ; POLL: IN BSTATUS ;BAUDOT UART STATUS PORT ANI RDA ;TEST FOR RCVE DATA AVAIL FLAG JZ POLL2 ;NO CHAR. TEST ASCII (MAY NEED JNZ HERE) CALL ASCRCV4 ;CHARACTER THERE, GET AND CONVERT CPI 0FFH ;IGNORE FLAG THERE? RNZ ;NO, RETURN WITH ASCII CHARACTER ; POLL2: IN ASTATUS ;GET ASCII UART STATUS ANI RDA ;TEST DATA AVAIL. FLAG JZ POLL ;NO CHAR., RESUME POLLING (MAY NEED JNZ HERE) IN ADATA ;GET ASCII UART DATA ANI 7FH ;STRIP PARITY BIT RET ;ASCII CHAR. IN ACCUMULATOR ; ; END OF SAMPLE POLLING ROUTINE. ; ; ASCXMT(4) REV. 2 ; BY KEITH PETERSEN, W8SDZ. 10/29/78. ; ; THIS PROGRAM IS FOR TRANSMITTING ASCII ; THROUGH A BAUDOT MEDIUM USE A SPECIAL ; FORMAT OF FIGURES BLANK (X) - WHERE (X) ; IS A SPECIAL BAUDOT CHARACTER USED TO ; CONVEY THE ASCII EQUIVALENT CHARACTER TO THE ; RECEIVING END WHERE IT IS THEN CONVERTED BACK ; TO ASCII AGAIN. LOWER CASE ALPHA CHARACTERS ; ARE TRANSMITTED VIA A 4TH CASE, LTRS BLANK (X). ; ; EQUATES ; LTRS: EQU 1FH FIGS: EQU 1BH CR: EQU 48H LF: EQU 42H STATUS: EQU 0AH ;BAUDOT UART STATUS PORT TBE: EQU 80H ;UART TRANS. BUF. EMPTY FLAG BTTY: EQU 0BH ;BAUDOT UART DATA PORT ALTMOD: EQU 7DH ;ALTERNATE MODE KEY BEGIN: EQU 0FA00H ;MY ADDRESS FOR THIS PROGRAM ; ; PROGRAM STARTS HERE. ; CALL WITH ASCII CHARACTER IN ACCUMULATOR. ; ORG BEGIN ;PUT STARTING ADDRESS HERE ; START: PUSH PSW ;SAVE REGISTERS USED PUSH B PUSH H ; BAUDOT: MVI C,0 ;SET UP COUNTER ANI 7FH ;STRIP PARITY BIT CPI ALTMOD ;ALTERNATE MODE KEY? JNZ BAUD2 ;NO, IGNORE NEXT ROUTINE MVI A,09H ;BAUDOT '$' JMP BAUD3 ; BAUD2: CPI 7BH ;ABOVE L.C. 'Z' ? JNC TTY0 ;IF SO, IGNORE IT LXI H,BTABLE ;POINT TO TABLE START ADD L ;ADD CHARACTER VALUE MOV L,A ;L POINTS TO BAUDOT CHAR. MOV A,H ;GET H FOR CORRECTION ACI 0 ;CORRECT IF NECESSARY MOV H,A ;H IS NOW CORRECT MOV A,M ;GET BAUDOT CHARACTER ORA A ;IS IT A NON-PRINTING CHAR? JZ TTY0 ;IF SO IGNORE IT CPI CR ;IS IT A CARRIAGE RETURN? JZ TTYOUT-1 ;YES, HANDLE WITHOUT CASE TEST CPI LF ;IS IT A LINE FEED? JNZ BAUD3 ;NO, IGNORE NEXT ROUTINE MVI A,LTRS PUSH PSW ;SAVE IT ON STACK MVI A,LF LXI H,SCASE ;POINT TO PRESENT CASE REG. MVI M,40H ;SET IT TO LOWER CASE JMP TTYOUT-2 ;SEND LF AND LTRS ; BAUD3: PUSH PSW ;SAVE CHARACTER ANI 0C0H ;STRIP ALL BUT CASE BITS LXI H,SCASE ;POINT TO PRESENT CASE REG. CMP M ;SAME CASE AS PREVIOUS CHARACTER? JZ TTYOUT ;YES NO CHANGE NECESSARY MOV M,A ;UPDATE CASE REGISTER ORA A JZ TCASE CPI 80H JZ UCASE CPI 0C0H JNZ LCASE ; FCASE: XRA A ;GET A BAUDOT 'BLANK' PUSH PSW ;SAVE IT ON THE STACK INR C ;INCREMENT CHARACTER COUNT ; LCASE: MVI A,LTRS JMP TTYOUT-2 ; TCASE: XRA A ;GET A BAUDOT 'BLANK' PUSH PSW ;SAVE IT ON THE STACK INR C ;INCREMENT CHARACTER COUNT ; UCASE: MVI A,FIGS INR C ;INCREMENT CHARACTER COUNT PUSH PSW ;SAVE IT ON THE STACK ; TTYOUT: IN STATUS ;BAUDOT UART STATUS ANI TBE ;TRANS. BUFFER EMPTY? JZ TTYOUT ;IF NOT, LOOP AND WAIT POP PSW ;GET CHARACTER ; ; OMIT NEXT THREE LINES IF NO LIGHTS. ; CMA ;INVERT FOR LIGHTS OUT 0FFH ;PUT ON FRONT PANEL LIGHTS CMA ;INVERT BACK TO NORMAL ; ; OMIT ABOVE THREE LINES IF NO LIGHTS. ; ORI 0E0H ;MAKE UPPER 3 BITS MARKING OUT BTTY ;SEND TO BAUDOT UART PORT DCR C ;MORE TO SEND? JP TTYOUT ;YES, CONTINUE SENDING ; TTY0: POP H ;RESTORE REGISTERS POP B POP PSW RET ;RETURN TO CALLING PROGRAM ; BTABLE: DB 5FH,17H,13H ;NUL SOH STX DB 1,0,0AH ;ETX EOT ENQ DB 0,85H,10H ;ACK BEL BS DB 15H,42H,0C2H ;HT LF VT DB 2,48H,0 ;FF CR SO DB 7,0,0 ;!SI DLE DC1 DB 0,0,0 ;DC2 DC3 DC4 DB 0,6,0 ;NAK SYN ETB DB 18H,0,16H ;CAN EM SUB DB 0EH,0,0 ;ESC FS GS DB 0,0,44H ;RS US SPACE DB 8DH,91H,94H ;! " # DB 89H,0BH,9AH ;$ PCT & DB 8BH,8FH,92H ;' ( ) DB 14H,1AH,8CH ;AS PL , DB 83H,9CH,9DH ;- . / DB 96H,97H,93H ;0 1 2 DB 81H,8AH,90H ;3 4 5 DB 95H,87H,86H ;6 7 8 DB 98H,8EH,9EH ;9 : ; DB 0FH,0DH,12H ;LT EQ GT DB 99H,5,43H ;? AT A DB 59H,4EH,49H ;B C D DB 41H,4DH,5AH ;E F G DB 54H,46H,4BH ;H I J DB 4FH,52H,5CH ;K L M DB 4CH,58H,56H ;N O P DB 57H,4AH,45H ;Q R S DB 50H,47H,5EH ;T U V DB 53H,5DH,55H ;W X Y DB 51H,11H,1DH ;Z LB LS DB 1CH,19H,3 ;RB UA LA ; ; THESE ARE THE LOWER CASE ALPHA CHARACTERS ; DB 0,0C3H,0D9H ;' A B DB 0CEH,0C9H,0C1H ;C D E DB 0CDH,0DAH,0D4H ;F G H DB 0C6H,0CBH,0CFH ;I J K DB 0D2H,0DCH,0CCH ;L M N DB 0D8H,0D6H,0D7H ;O P Q DB 0CAH,0C5H,0D0H ;R S T DB 0C7H,0DEH,0D3H ;U V W DB 0DDH,0D5H,0D1H ;X Y Z ; ; TEMPORARY STORAGE AREA ; SCASE: DB 40H ;PRESENT CASE REGISTER ; END  ;RS US SPACE DB 8DH,91H,94H ;! " # DB 89H,0BH,9AH ;$ PCT & DB 8BH,8FH,92H ;' ( ) DB 14H,1AH,8CH ;AS PL , DB 83H,9CH,9DH ;- . / DB 96H,97H,93H ;0 1 2 DB 81H,8AH,90H ;3 4 5 DB 95H,87H,86H ;6 7 8 DB 98H,8EH,9EH ;9 : ; DB 0FH,0DH,12H ;LT EQ GT DB 99H,5,43H ;? AT A DB 59H,4EH,49H ;B C D DB 41H,4DH,5AH ;E F G DB 54H,46H,4BH ;H I J DB 4FH,52H,5CH ;K L M DB 4CH,58H,56H ;N O P DB 57H,4AH,45H ;Q R S DB 50H,47H,5EH ;T U V DB 53H,5DH,55H ;W X Y DB 51H,11H,1DH ;Z LB LS DB 1CH,19H,3 ;RB UA LA ; ; THESE ARE THE LOWER CASE ALPHA CHARACTERS ; DB 0,0C3H,0D9H ;' A B DB 0CEH,0C9H,0C1H ;C D E DB 0CDH,0DAH,0D4H ;F G H DB 0C6H,0CBH,0CFH ;I J K DB 0D2H,0DCH,0CCH ;L M N DB 0D8H,0D6H,0D7H ;O P Q DB 0CAH,0C5H,0D0H ;R S T DB 0C7H,0DEH,0D3H ;U  This is the release date of the disk. GC-CON1CBAS GC-COVERBAS GC-DSKRDBAS GC-ENTRYBAS GC-INIT BAS GC-NUCALBAS GC-PRTHDBAS GCDATA SDF "GCNORTAMSDF  GCPRNT37BAS "GCWORLD SDF *!GRTCIR-CBAS 3GRTCIR-CINT 4 GRTCIR10BAS 8GCNORTAM.SDF 88 29 3072 24 GCPRNT37.BAS 5A 20 7808 61 GCWORLD .SDF 6D BC 8576 67 GRTCIR-C.BAS 49 4F 128 1 GRTCIR-C.INT 74 B1 3328 26 GRTCIR10.BAS 3D E3 4736 37 HAMLOG .DOC 18 E5 2048 16 LOG .CMD B2 09 3328 26 LOGCHNG .CMD EA 42 4096 32 LOGENTRY.CMD FD C5 2432 19 LOGPRINT.CMD 83 16 1536 12 LOGSERCH.CMD 1F 80 4096 32 LOGSORT  Fog Library Disk FOG-CPM.014 Copyright (1985) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. Disk 2 of 2. Amateur Radio (Hams). Filename Description -12-00 .85 This is the release date of the disk. -CPM014 .DOC This is the description of the disk contents. GC-CON1C.INT B5BC 4K [Great Circle 1 of 15] Great Circle distance and headings for Ham Radio enthusiasts Written in CBasic (source included). GC-CON1C.BAS 82F4 6K [Great Circle 2 of 15] GC-COVER.BAS F782 2K [Great Circle 3 of 15] GC-DSKRD.BAS FFB3 2K [Great Circle 4 of 15] GC-ENTRY.BAS 22B4 2K [Great Circle 5 of 15] GC-INIT .BAS E36F 1K [Great Circle 6 of 15] GC-NUCAL.BAS 0CB4 1K [Great Circle 7 of 15] GC-PRTHD.BAS F0EC 1K [Great Circle 8 of 15] GCDATA .SDF 11F4 9K [Great Circle 9 of 15] GCNORTAM.SDF 8829 3K [Great Circle 10 of 15] GCPRNT37.BAS 5A20 8K [Great Circle 11 of 15] GCWORLD .SDF 6DBC 9K [Great Circle 12 of 15] GRTCIR-C.BAS 494F 1K [Great Circle 13 of 15] GRTCIR-C.INT 74B1 4K [Great Circle 14 o"f 15] GRTCIR10.BAS 3DE3 5K [Great Circle 15 of 15] HAMLOG .DOC 18E5 2K [Ham Radio Log 1 of 8] dBASE logging system for Amateur Radio. LOG .CMD B209 4K [Ham Radio Log 2 of 8] LOGCHNG .CMD EA42 4K [Ham Radio Log 3 of 8] LOGENTRY.CMD FDC5 3K [Ham Radio Log 4 of 8] LOGPRINT.CMD 8316 2K [Ham Radio Log 5 of 8] LOGSERCH.CMD 1F80 4K [Ham Radio Log 6 of 8] LOGSORT .CMD 2E8C 3K [Ham Radio Log 7 of 8] HAMLOG .DBF 68D2 1K [Ham Radio Log 8 of 8] MOONLOC1.BAS AC4A 3K [Moon Location 1 of 4] Calculates moon aiming, azimuth and elevation, and position for Hams. MOONLOC2.BAS 29F4 3K [Moon Location 2 of 4] MOONLOC3.BAS 3BF9 7K [Moon Location 3 of 4] MOONLOC5.BAS 49C9 5K [Moon Location 4 of 4] RTTY .ASM F0EA 26K [RTTY 1 of 5] ASCII to Baudot and back again for PMMI modem. TTY .ASM 82CA 9K [RTTY 2 of 5] TTYR .ASM B341 5K [RTTY 3 of 5] TTYR1 .ASM E0F1 5K [RTTY 4 of 5] TTYX .ASM 91D7 5K [RTTY 5 of 5]  for Hams. MOONLOC2.BAS 29F4 3K [Moon Location 2 of 4] MOONLOC3.BAS 3BF9 7K [Moon Location 3 of 4] MOONLOC5.BAS 49C9 5K [Moon Location 4 of 4] RTTY .ASM F0EA 26K [RTTY 1 of 5] ASCII to Baudot and MI modem. TTY .ASM 82CA 9K [RTTY 2 of 5] TTYR .ASM B341 5K [RTTY 3 of 5] TTYR1 .ASM E0F1 5K [RTTY 4 of 5] TTYX .ASM 91D7 5K [RTTY 5 of 5]  for Hams. MOONLOC2.BAS 29F4 3K [Moon Location 2 of 4] MOONLOC3.BAS 3BF9 7K [Moon Location 3 of 4] MOONLOC5.BAS 49C9 5K [Moon Location 4 of 4] RTTY .ASM F0EA 26K [RTTY 1 of 5] ASCII to Baudot and back again for PM#$%&'