WAS/QSL

Date: 198x
Type: Program
Platform(s): TS 1000
Tags: Ham Radio

This listing contains two separate BASIC programs: “WAS” (Worked All States) and “QSL”. The WAS program manages amateur radio contact and QSL card data for all 50 US states across seven bands/modes (SSB, CW, 80, 40, 20, 15, and 10 metres), storing dates and QSL status in a 5-character format (MMYYS/R). It provides routines for displaying per-state data, editing records, computing totals worked/sent/received, and listing states worked or not worked. The QSL program works with the Timex/Sinclair 2040 thermal printer to produce postcard-sized QSL confirmation cards, retaining repeated fields (mode, band, RST, rig, antenna) between cards to speed data entry, and uses block-graphic borders to simulate a printed card layout. Both programs use GOTO 100 / GOTO 9000 entry points rather than RUN, specifically to preserve pre-loaded string array data that RUN would erase by re-executing DIM statements.


Overview and Program Boundaries

The listing contains two independent programs that share the same file. The first, “WAS” (Worked All States), occupies lines 1–9010. The second, “QSL”, occupies lines 8–9010 with overlapping line numbers, indicating they are stored and loaded separately despite appearing concatenated here. Each ends with a SAVE statement and a jump back to its own start.

WAS Program Structure

The WAS program is organized into clearly delineated subroutine blocks:

  • Lines 1–79: REM header and array dimensioning
  • Lines 100–190: Main menu display and dispatch loop
  • Lines 1000–1130: Display routine (calls subroutine at 6000)
  • Lines 2000–2510: Data entry/change routine
  • Lines 3000–3230: Totals computation and display
  • Lines 4000–4760: States worked / not worked / no QSL listing
  • Lines 5000–5060: State abbreviation listing
  • Lines 6000–6190: State lookup and display subroutine
  • Lines 7000–7020: Exit with warning message
  • Lines 8000–8050: Key-wait subroutine (SLOW/PAUSE/FAST idiom)
  • Lines 9000–9010: SAVE and restart

Data Storage Design

The WAS program stores QSO/QSL data using parallel string arrays, each dimensioned 50×5. The 5-character format is documented as MMYYS/R, where the first four characters are month and year digits and the fifth character indicates QSL status: space = none, S = sent, R = received. Presence of a contact is detected by testing whether the first character of a slot is a non-space character.

ArrayBand/Mode
S$(50,5)SSB
C$(50,5)CW
E$(50,5)80 metres
F$(50,5)40 metres
T$(50,5)20 metres
I$(50,5)15 metres
H$(50,5)10 metres
N$(50,2)State abbreviations
B$(8,3)Band/mode names

Two additional arrays X$(50,5) and Y$(50,5) serve as working buffers in the states-worked routine (section 4000). X$ holds SSB data and Y$ holds CW data when computing Mixed totals.

Critical RUN Warning

The program’s most important design constraint is explicitly stated in the REM at line 1 and repeated in the exit routine at line 7000: executing RUN causes all DIM statements to re-execute, which blanks every string array and destroys all entered QSO data. The operator must use GOTO 100 to restart and GOTO 9000 to save. This is a fundamental limitation of Sinclair BASIC’s handling of DIM.

Key-Wait Subroutine (Line 8000)

The subroutine at line 8000 uses SLOW, PAUSE 20, and a spin loop on INKEY$ to wait for a keypress, then switches back to FAST mode. The SLOW/FAST keywords suggest this targets a ZX81 or TS1000, where SLOW enables display while FAST suppresses it for speed. After the keypress, the subroutine calls CLS before returning, so callers read the result from the retained INKEY$ value in subsequent IF INKEY$= tests rather than a variable.

Mixed-Mode Logic Anomaly

In the totals routine (lines 3092–3096), Mixed counts are derived solely from the SSB (S$) and CW (C$) arrays using OR logic. This means a state contacted only on, say, 40 metres (stored in F$) would not be counted as worked for Mixed. The same pattern applies in section 4000. Whether this reflects the author’s definition of “Mixed” (voice + CW) or an oversight is unclear, but it is a functional limitation.

States-Worked Routine Bug

At line 4541, after handling the non-mixed case, the code executes GOTO 4550 regardless. However, lines 4542–4544 handle the mixed case. The guard IF A<>8 THEN GOTO 4550 correctly skips them for non-mixed, but the counter XW is incremented both at 4540 and 4544 independently — meaning for mixed mode (A=8), line 4540 is skipped (correct) but the mixed-specific increment at 4544 fires. The worked count is therefore correct for mixed but only by skipping the non-mixed increment path. The logic is convoluted and fragile.

QSL Program Structure

The QSL program (lines 8–9010) produces printed QSL cards using the Timex/Sinclair 2040 thermal printer via the COPY command, which prints the current screen contents. The program is divided into:

  1. Lines 8–126: Intro display, exit check, and array/variable dimensioning
  2. Lines 130–152: Default value initialisation (mode, date, band, RST, rig, antenna)
  3. Lines 200–827: Per-QSO data entry loop with field-by-field prompting
  4. Lines 829–1250: Comment selection (10 pre-set “reason for QSO” lines + 10 “closing” lines, or free text)
  5. Lines 1250–5405: Card face rendering using block graphics borders
  6. Lines 5420–6065: Card back/confirmation rendering and COPY print
  7. Lines 6095–6130: Continue/exit loop
  8. Lines 7000–7010: “QSL received” alternate closing
  9. Lines 9000–9010: SAVE and restart

Default-Retention Data Entry

The QSL program retains values between cards for fields that typically do not change: mode (M$), day (D$), month (F$), year (Y$), band (B$), RST (R$), rig (E$), and antenna (L$). If the operator presses ENTER with an empty input, the previous value is kept. This is implemented with the pattern: INPUT I$: IF I$="" THEN GOTO [skip]: LET field=I$. Callsign, time, name, and QSO number must be re-entered each card.

Antenna Auto-Selection

Lines 777–795 auto-select one of three pre-stored antenna descriptions (A$(1)A$(3)) based on the entered band string B$. The matching covers several padding variants (e.g., "14 ", " 14", "21 ", "28 ") and also tests the first character of B$ for "7" or "3" to catch 40 and 80 metre entries. This is a pragmatic but verbose band-matching approach that could be fooled by unusual spacing.

Block Graphics Card Layout

The card face (lines 5285–5405) uses Spectrum block graphic escape sequences to draw a bordered rectangle. The top and bottom rules use \:' (▛) and \:' corners with \''\'' (▀) fill; side borders use \: (▌) and \ : (▐). A second section (lines 5390–5400) renders a stylised “W3ZQN” callsign in large block-graphic characters, an ambitious use of the character set. The card back (lines 5420–5460) uses \,, and \~~ sequences for ruled lines, likely UDG or alternate graphic characters.

Comment Array Architecture

The QSL program provides two banks of 10 canned comment strings: G$(10,32) for “reason for QSO” remarks and H$(10,32) for closing remarks. The operator selects up to four comments (one from G$, up to three from H$) by number, or enters 11 for free text, or 0 to stop. Selected comments are assembled into J$(4,32) for printing. Empty comment slots are detected by testing J$(3,1)=" " to suppress blank lines on the card.

Notable Idioms and Observations

  • Both programs use %X% style character spacing in PRINT strings — this is the ZX81 rendering of inverse-video characters, used for visual emphasis on labels.
  • Line 102 in WAS contains a very long string of inverse-video characters forming an on-screen instruction banner.
  • The QSL program hardcodes personal details (name, address, club affiliations, years licensed) into the card layout strings, making it a personalised rather than generic tool.
  • Line 6060 prints "(QSL BY SINCLAIR ZX-81 COMPUTER)", confirming the target platform explicitly within the card output.
  • The SAVE "WA%S" and SAVE "QS%L" at lines 9000 use % as a literal character in the filename strings; on the ZX81 this is a valid character in a string literal even if unusual.

Content

Appears On

Related Products

Related Articles

Related Content

Image Gallery

Source Code

   1 REM PROGRAM "WAS" BY R.J.  LEES- 705 JONATHAN RD., KING OF PRUSSIA, PA. 19406.   NOTE: THISPROGRAM CONTAINS 2 LETTER STATE ABBREVIATIONS IN STRING ARRAY   N$.   IT CONTAINS BAND/MODE     NAMES IN ARRAY B$.   IF "RUN"   HAS BEEN USED BY MISTAKE ALL    THIS DATA WILL BE GONE.   YOU   WILL HAVE TO REINSERT IT        MANUALLY OR BY USING A TEMPORARYPROGRAM.
  69 DIM B$(8,3)
  70 DIM N$(50,2)
  71 DIM S$(50,5)
  72 DIM C$(50,5)
  73 DIM E$(50,5)
  74 DIM F$(50,5)
  75 DIM T$(50,5)
  76 DIM I$(50,5)
  77 DIM H$(50,5)
  79 DIM X$(50,5)
  80 DIM Y$(50,5)
 100 PRINT TAB 8;"PROGRAM ""WAS"""
 101 PRINT "PROG. BY W3ZQN, R.J. LEES, 04/83"
 102 PRINT "%T%O% %R%U%N% %U%S%E% %"%G%O%T%O% %1%0%0%"% % % % % % % % % % % %T%O% %S%A%V%E% %U%S%E% %"%G%O%T%O% %9%0%0%0%"% % % % % % % % % %I%F% %"%R%U%N%"% %U%S%E%D%,% %A%L%L% %D%A%T%A% %I%S% %L%O%S%T% "
 103 PRINT 
 104 PRINT "QSO/QSL DATA IS STORED FOR THE  50 STATES.   EACH STATE HAS DATAFOR MIXED, SSB, CW, 80, 40, 20, 15, AND 10 METERS.   DATA IS IN THE FORMAT MMYYS/R WHERE:"
 105 PRINT " M = MONTH","Y = YEAR"
 106 PRINT " S = QSL SENT","R = QSL RECEIVED"
 107 PRINT 
 130 PRINT "%E%N%T%E%R% %R%O%U%T%I%N%E% %D%E%S%I%R%E%D%:",,,"D - DISPLAY DATA BY STATE","C - CHANGE DATA",,"T - TOTALS WORKED, SENT, REC.","S - STATES WORKED, NOT WORKED","A - LIST STATE ABBREVIATIONS","E - EXIT THE PROGRAM"
 140 GOSUB 8000
 150 IF INKEY$="D" THEN GOTO 1000
 160 IF INKEY$="C" THEN GOTO 2000
 170 IF INKEY$="T" THEN GOTO 3000
 180 IF INKEY$="S" THEN GOTO 4000
 185 IF INKEY$="A" THEN GOTO 5000
 186 IF INKEY$="E" THEN GOTO 7000
 190 GOTO 130
 1000 GOSUB 6000
 1090 PRINT AT 18,0;"ANOTHER? %Y%/%N"
 1100 GOSUB 8000
 1110 IF INKEY$="Y" THEN GOTO 1000
 1120 IF INKEY$="N" THEN GOTO 130
 1130 GOTO 1090
 2000 GOSUB 6000
 2010 PRINT 
 2030 PRINT "WHICH DATA CHANGES? %E%N%T%E%R% %N%O%.",,,
 2040 PRINT "1 - SSB","2 - CW","3 - 80","4 - 40","5 - 20","6 - 15","7 - 10","0 - TO EXIT"
 2050 INPUT A
 2060 PRINT 
 2065 IF A=0 THEN GOTO 2500
 2070 PRINT "ENTER THE ";B$(A);" DATA. %M%M%Y%Y%S%/%R"
 2080 IF A=1 THEN INPUT S$(C)
 2082 IF A=2 THEN INPUT C$(C)
 2084 IF A=3 THEN INPUT E$(C)
 2086 IF A=4 THEN INPUT F$(C)
 2088 IF A=5 THEN INPUT T$(C)
 2090 IF A=6 THEN INPUT I$(C)
 2092 IF A=7 THEN INPUT H$(C)
 2096 CLS 
 2100 GOSUB 6120
 2110 PRINT 
 2120 PRINT "MORE DATA FOR THIS STATE? %Y%/%N"
 2130 GOSUB 8000
 2135 IF INKEY$="N" THEN GOTO 2170
 2140 IF INKEY$="Y" THEN GOSUB 6120
 2145 GOTO 2010
 2160 GOTO 2130
 2170 CLS 
 2180 PRINT "ANOTHER STATE? %Y%/%N"
 2190 GOSUB 8000
 2200 IF INKEY$="Y" THEN GOTO 2000
 2210 IF INKEY$="N" THEN GOTO 130
 2220 GOTO 2180
 2500 CLS 
 2510 GOTO 130
 3000 CLS 
 3010 LET SW=0
 3011 LET SS=0
 3012 LET SR=0
 3013 LET CW=0
 3014 LET CS=0
 3015 LET CR=0
 3016 LET EW=0
 3017 LET ES=0
 3018 LET ER=0
 3019 LET FW=0
 3020 LET FS=0
 3021 LET FR=0
 3022 LET TW=0
 3023 LET TS=0
 3024 LET TR=0
 3025 LET IW=0
 3026 LET IS=0
 3027 LET IR=0
 3028 LET HW=0
 3029 LET HS=0
 3030 LET HR=0
 3031 LET MW=0
 3032 LET MS=0
 3033 LET MR=0
 3040 FOR N=1 TO 50
 3050 IF S$(N,1)<>" " THEN LET SW=SW+1
 3052 IF S$(N,5)="S" THEN LET SS=SS+1
 3054 IF S$(N,5)="R" THEN LET SR=SR+1
 3056 IF C$(N,1)<>" " THEN LET CW=CW+1
 3058 IF C$(N,5)="S" THEN LET CS=CS+1
 3060 IF C$(N,5)="R" THEN LET CR=CR+1
 3062 IF E$(N,1)<>" " THEN LET EW=EW+1
 3064 IF E$(N,5)="S" THEN LET ES=ES+1
 3066 IF E$(N,5)="R" THEN LET ER=ER+1
 3068 IF F$(N,1)<>" " THEN LET FW=FW+1
 3070 IF F$(N,5)="S" THEN LET FS=FS+1
 3072 IF F$(N,5)="R" THEN LET FR=FR+1
 3074 IF T$(N,1)<>" " THEN LET TW=TW+1
 3076 IF T$(N,5)="S" THEN LET TS=TS+1
 3078 IF T$(N,5)="R" THEN LET TR=TR+1
 3080 IF I$(N,1)<>" " THEN LET IW=IW+1
 3082 IF I$(N,5)="S" THEN LET IS=IS+1
 3084 IF I$(N,5)="R" THEN LET IR=IR+1
 3086 IF H$(N,1)<>" " THEN LET HW=HW+1
 3088 IF H$(N,5)="S" THEN LET HS=HS+1
 3090 IF H$(N,5)="R" THEN LET HR=HR+1
 3092 IF S$(N,1)<>" " OR C$(N,1)<>" " THEN LET MW=MW+1
 3094 IF S$(N,5)="S" OR C$(N,5)="S" THEN LET MS=MS+1
 3096 IF S$(N,5)="R" OR C$(N,5)="R" THEN LET MR=MR+1
 3100 NEXT N
 3110 PRINT TAB 6;"* ""WAS"" TOTALS *",,,
 3120 PRINT "      WORKED  QSL R  QSL S/NR",,,,,
 3130 PRINT "MIXED",,,,"SSB",,,,"CW",,,,"80",,,,"40",,,,"20",,,,"15",,,,"10"
 3140 PRINT ,,"%H%I%T% %A%N%Y% %K%E%Y% %T%O% %R%E%T%U%R%N"
 3145 PRINT AT 5,9;MW;AT 5,16;MR;AT 5,23;MS
 3150 PRINT AT 7,9;SW;AT 7,16;SR;AT 7,23;SS
 3160 PRINT AT 9,9;CW;AT 9,16;CR;AT 9,23;CS
 3170 PRINT AT 11,9;EW;AT 11,16;ER;AT 11,23;ES
 3180 PRINT AT 13,9;FW;AT 13,16;FR;AT 13,23;FS
 3190 PRINT AT 15,9;TW;AT 15,16;TR;AT 15,23;TS
 3200 PRINT AT 17,9;IW;AT 17,16;IR;AT 17,23;IS
 3210 PRINT AT 19,9;HW;AT 19,16;HR;AT 19,23;HS
 3220 GOSUB 8000
 3230 GOTO 2500
 4000 CLS 
 4010 LET XW=0
 4020 LET XX=0
 4030 PRINT "WHAT BAND/MODE? %E%N%T%E%R% %N%O%."
 4040 PRINT 
 4050 PRINT "1 - SSB","2 - CW","3 - 80","4 - 40","5 - 20","6 - 15","7 - 10","8 - MIXED","0 - TO EXIT"
 4060 INPUT A
 4070 CLS 
 4080 IF A<1 OR A>8 THEN GOTO 130
 4090 FOR N=1 TO 50
 4100 IF A=1 OR A=8 THEN LET X$(N)=S$(N)
 4110 IF A=2 THEN LET X$(N)=C$(N)
 4120 IF A=3 THEN LET X$(N)=E$(N)
 4130 IF A=4 THEN LET X$(N)=F$(N)
 4140 IF A=5 THEN LET X$(N)=T$(N)
 4150 IF A=6 THEN LET X$(N)=I$(N)
 4160 IF A=7 THEN LET X$(N)=H$(N)
 4162 IF A=8 THEN LET Y$(N)=C$(N)
 4170 NEXT N
 4180 GOSUB 4500
 4190 GOSUB 8000
 4200 IF INKEY$="N" THEN GOTO 130
 4210 IF INKEY$="Y" THEN GOTO 4000
 4220 GOSUB 4750
 4230 GOTO 4190
 4500 PRINT B$(A)
 4510 PRINT 
 4520 FOR N=1 TO 50
 4530 IF A<>8 AND X$(N,1)<>" " THEN PRINT N$(N);"  ";
 4540 IF A<>8 AND X$(N,1)<>" " THEN LET XW=XW+1
 4541 IF A<>8 THEN GOTO 4550
 4542 IF X$(N,1)<>" " OR Y$(N,1)<>" " THEN PRINT N$(N);"  ";
 4544 IF X$(N,1)<>" " OR Y$(N,1)<>" " THEN LET XW=XW+1
 4550 NEXT N
 4560 PRINT 
 4580 PRINT XW;" STATES WORKED"
 4590 PRINT 
 4600 FOR N=1 TO 50
 4610 IF A<>8 AND X$(N,1)=" " THEN PRINT N$(N);"  ";
 4615 IF A=8 AND X$(N,1)=" " AND Y$(N,1)=" " THEN PRINT N$(N);"  ";
 4620 NEXT N
 4630 PRINT 
 4650 PRINT 50-XW;" STATES NOT WORKED"
 4660 PRINT 
 4670 FOR N=1 TO 50
 4680 IF A<>8 AND X$(N,1)<>" " AND X$(N,5)<>"R" THEN PRINT N$(N);"  ";
 4690 IF A<>8 AND X$(N,1)<>" " AND X$(N,5)<>"R" THEN LET XX=XX+1
 4691 IF A<>8 THEN GOTO 4700
 4692 IF X$(N,1)<>" " AND X$(N,5)<>"R" THEN GOTO 4695
 4693 IF Y$(N,1)<>" " AND Y$(N,5)<>"R" THEN GOTO 4695
 4694 GOTO 4700
 4695 PRINT N$(N);"  ";
 4696 LET XX=XX+1
 4700 NEXT N
 4710 PRINT 
 4730 PRINT XX;" STATES WORKED BUT NO QSL"
 4740 PRINT 
 4750 PRINT "ANOTHER? %Y%/%N"
 4760 RETURN 
 5000 CLS 
 5004 PRINT "STATE ABBREVIATIONS USED:"
 5005 PRINT 
 5010 FOR N=1 TO 50
 5020 PRINT N$(N);"  ";
 5030 NEXT N
 5040 PRINT AT 20,0;"%H%I%T% %A%N%Y% %K%E%Y% %T%O% %R%E%T%U%R%N"
 5050 GOSUB 8000
 5060 GOTO 2500
 6000 CLS 
 6010 PRINT "WHAT STATE?  %E%N%T%E%R% %2% %L%E%T%T%E%R%S"
 6020 INPUT A$
 6030 FOR N=1 TO 50
 6040 IF A$=N$(N) THEN GOTO 6105
 6050 NEXT N
 6060 PRINT 
 6070 PRINT "WRONG ABBREVIATION.","TRY AGAIN? %Y%/%N"
 6080 GOSUB 8000
 6090 IF INKEY$="Y" THEN GOTO 6000
 6100 IF INKEY$="N" THEN GOTO 130
 6101 GOTO 6070
 6105 CLS 
 6110 LET C=N
 6120 PRINT N$(C);"   SSB   CW    80    40"
 6130 PRINT 
 6140 PRINT TAB 5;S$(C);" ";C$(C);" ";E$(C);" ";F$(C)
 6150 PRINT ,,,,
 6160 PRINT TAB 11;"20    15    10"
 6170 PRINT 
 6180 PRINT TAB 11;T$(C);" ";I$(C);" ";H$(C)
 6190 RETURN 
 7000 CLS 
 7010 PRINT "YOU HAVE STOPPED THE PROGRAM.",,,"REMEMBER: TO START IT AGAIN USE",TAB 10;"""GOTO 100""; TO SAVE IT";TAB 10;"USE ""GOTO 9000""",TAB 10;"NEVER USE ""RUN"" OR ",TAB 10;"DATA WILL BE LOST"
 7020 STOP 
 8000 SLOW 
 8010 PAUSE 20
 8020 IF INKEY$="" THEN GOTO 8020
 8030 FAST 
 8040 CLS 
 8050 RETURN 
 9000 SAVE "WA%S"
 9010 GOTO 100
 
   8 FAST 
   9 PRINT "         PROGRAM ""QSL"""
  10 PRINT "      BY R. J. LEES, W3ZQN"
  11 PRINT "        705 JONATHAN RD.,"
  12 PRINT " KING OF PRUSSIA, PA. 19406 USA"
  13 PRINT "           JULY, 1983"
  14 PRINT ,,,,
  15 PRINT "THIS PROGRAM, WHEN USED WITH THE"
  16 PRINT "TIMEX/SINCLAIR   2040   PRINTER,"
  17 PRINT "PRINTS POSTCARD SIZE QSLS.  DATA"
  18 PRINT "THAT MAY BE THE SAME FROM QSL TO"
  19 PRINT "QSL IS RETAINED TO ELIMINATE THE"
  20 PRINT "NEED TO REENTER IT.   DO NOT EX-"
  21 PRINT "CEED  THE  NUMBER OF  CHARACTERS"
  22 PRINT "SHOWN IN (). TURN ON THE PRINTER"
  23 PRINT "BEFORE STARTING THE PROGRAM. HIT"
  24 PRINT """ENTER"" TO START.   ENTER ""E"" TO"
  25 PRINT "EXIT."
  85 INPUT I$
  90 IF I$="E" THEN STOP 
  96 DIM L$(28)
  98 DIM J$(4,32)
 100 DIM M$(3)
 102 DIM C$(10)
 104 DIM D$(2)
 106 DIM F$(3)
 108 DIM Y$(2)
 110 DIM T$(4)
 112 DIM B$(3)
 114 DIM R$(3)
 116 DIM E$(28)
 118 DIM A$(3,28)
 120 DIM N$(9)
 122 DIM G$(10,32)
 124 DIM H$(10,32)
 126 DIM S$(4)
 130 LET M$="CW "
 134 LET D$="XX"
 136 LET F$="XXX"
 138 LET Y$="84"
 142 LET B$="14 "
 144 LET R$="579"
 146 LET E$="TEN-TEC CENTURY/21-60 WTS IN"
 148 LET A$(1)="2 EL HQ-1 MINI-QUAD  10 M HI"
 150 LET A$(2)="COAX FED DIPOLE  -  15 FT HI"
 152 LET A$(3)="100 FT END FED WIRE 20 FT HI"
 200 CLS 
 205 PRINT AT 0,0;"MODE   (3)"
 210 PRINT AT 21,1;M$
 220 INPUT I$
 230 IF I$="" THEN GOTO 250
 240 LET M$=I$
 250 PRINT AT 0,12;M$
 260 PRINT AT 1,0;"CALL   (10)"
 270 PRINT AT 21,1;"XXXXXXXXXX"
 280 INPUT C$
 310 PRINT AT 1,12;C$
 320 PRINT AT 2,0;"DAY    (2)"
 330 PRINT AT 21,1;D$;"         "
 340 INPUT I$
 350 IF I$="" THEN GOTO 370
 360 LET D$=I$
 370 PRINT AT 2,12;D$
 380 PRINT AT 3,0;"MONTH  (3)"
 390 PRINT AT 21,1;F$
 400 INPUT I$
 410 IF I$="" THEN GOTO 430
 420 LET F$=I$
 430 PRINT AT 3,12;F$
 440 PRINT AT 4,0;"YEAR   (2)"
 450 PRINT AT 21,1;Y$;" "
 460 INPUT I$
 470 IF I$="" THEN GOTO 490
 480 LET Y$=I$
 490 PRINT AT 4,12;Y$
 500 PRINT AT 5,0;"TIME   (4)"
 510 PRINT AT 21,1;"XXXX"
 520 INPUT T$
 550 PRINT AT 5,12;T$
 560 PRINT AT 6,0;"BAND   (3)"
 570 PRINT AT 21,1;B$;" "
 580 INPUT I$
 590 IF I$="" THEN GOTO 610
 600 LET B$=I$
 610 PRINT AT 6,12;B$
 620 PRINT AT 7,0;"RST    (3)"
 630 PRINT AT 21,1;R$
 640 INPUT I$
 650 IF I$="" THEN GOTO 670
 660 LET R$=I$
 670 PRINT AT 7,12;R$
 680 PRINT AT 8,0;"NAME   (9)"
 690 PRINT AT 21,1;"XXXXXXXXX"
 700 INPUT N$
 730 PRINT AT 8,12;N$
 735 PRINT AT 9,0;"RIG    (28)"
 740 PRINT AT 21,1;E$
 745 INPUT I$
 750 IF I$="" THEN GOTO 760
 755 LET E$=I$
 760 PRINT AT 9,12;E$( TO 20)
 765 PRINT AT 10,12;E$(21 TO )
 770 PRINT AT 11,0;"ANT    (28)"
 775 LET L$(1)=" "
 777 IF B$="14 " THEN LET L$=A$(1)
 779 IF B$=" 14" THEN LET L$=A$(1)
 781 IF B$="21 " THEN LET L$=A$(1)
 783 IF B$=" 21" THEN LET L$=A$(1)
 785 IF B$="28 " THEN LET L$=A$(1)
 787 IF B$=" 28" THEN LET L$=A$(1)
 789 IF B$(1)="7" THEN LET L$=A$(2)
 791 IF B$=" 7 " THEN LET L$=A$(2)
 793 IF B$="  7" THEN LET L$=A$(2)
 795 IF B$(1)="3" THEN LET L$=A$(3)
 797 PRINT AT 21,1;L$
 798 IF L$(1)=" " THEN PRINT AT 21,1;"INPUT ANT, 28 CHARACTERS MAX   "
 799 INPUT I$
 800 IF I$="" THEN GOTO 805
 802 LET L$=I$
 805 PRINT AT 11,12;L$( TO 20)
 807 PRINT AT 12,12;L$(21 TO )
 809 PRINT AT 13,0;"QSO NR (4)"
 811 PRINT AT 21,1;"XXXX                           "
 813 INPUT S$
 819 PRINT AT 13,12;S$
 821 PRINT AT 18,1;"FOR ""PSE QSL"" HIT ""ENTER"""," FOR ""QSL RECEIVED"" ENTER ""R"""," TO EXIT ENTER ""E"""," TO RECYCLE ENTER ANYTHING ELSE"
 823 INPUT I$
 825 IF I$="" OR I$="R" THEN GOTO 829
 826 IF I$="E" THEN STOP 
 827 GOTO 200
 829 CLS 
 872 LET G$(1)="THIS WAS A GOOD SOLID DX CONTACT"
 874 LET G$(2)="SOLID, ARMCHAIR COPY ALL THE WAY"
 876 LET G$(3)="CONDX WERE POOR BUT COPY WAS  OK"
 878 LET G$(4)="CONDITIONS  AND COPY  WERE  POOR"
 880 LET G$(5)="THIS WAS UR CONTEST QSO NR  "+S$
 882 LET G$(6)="I HAVE NO QSL FROM  YOUR COUNTRY"
 884 LET G$(7)="THIS QSO IS A NEW COUNTRY FOR ME"
 886 LET G$(8)="HV NO QSL FM UR STATE ON "+B$+" MHZ"
 888 LET G$(9)="ENJOYED  THIS PROLONGED  RAGCHEW"
 890 LET G$(10)="GLAD TO  MEET YOU IN THE CONTEST"
 892 LET H$(1)="I WOULD  LIKE UR QSL FOR MY FILE"
 894 LET H$(2)="I HOPE WE CAN CONTACT AGAIN SOON"
 896 LET H$(3)="LETS QSO AGN WHEN CONDX  IMPROVE"
 898 LET H$(4)="YOUR QSL NEEDED FOR 1 BAND ""WAS"""
 900 LET H$(5)="I WOULD LIKE YOUR QSL FOR ""DXCC"""
 902 LET H$(6)="GLAD TO HAVE MET U VIA HAM RADIO"
 904 LET H$(7)="GLAD TO SEND THE QSL U REQUESTED"
 906 LET H$(8)="BEEN A HAM 29 YRS--STILL LOVE IT"
 908 LET H$(9)="BEEN A HAM FOR 29 OF MY 44 YEARS"
 910 LET H$(10)="IM ON HF CW BANDS AND 2 METER FM"
 933 FOR C=1 TO 10
 935 PRINT "  ";C
 940 PRINT G$(C)
 950 NEXT C
 955 PRINT AT 20,0;"%C%O%M%M%E%N%T 1 - ENTER ""11"" FOR OTHERENTER ""0"" FOR NONE"
 960 INPUT G
 970 IF G=11 THEN GOTO 1000
 975 IF G=0 THEN GOTO 1250
 980 LET J$(1)=G$(G)
 990 GOTO 1050
 1000 CLS 
 1010 PRINT AT 21,0;"%E%N%T%E%R% %C%O%M%M%E%N%T 1 - 32 CHAR. MAX."
 1020 INPUT U$
 1030 LET J$(1)=U$
 1050 CLS 
 1070 FOR C=1 TO 10
 1080 PRINT "  ";C
 1090 PRINT H$(C)
 1100 NEXT C
 1105 FOR A=2 TO 4
 1110 PRINT AT 20,0;"%C%O%M%M%E%N%T ";A;" - ENTER ""11"" FOR OTHERENTER ""0"" FOR NONE"
 1115 INPUT H
 1120 IF H=11 THEN GOTO 1145
 1125 IF H=0 THEN GOTO 1250
 1130 LET J$(A)=H$(H)
 1140 GOTO 1180
 1145 PRINT AT 20,0;"                                "
 1150 PRINT AT 21,0;"%E%N%T%E%R% %C%O%M%M%E%N%T ";A;" - 32 CHAR. MAX."
 1160 INPUT U$
 1170 LET J$(A)=U$
 1180 NEXT A
 1250 CLS 
 5285 PRINT ":'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''':"
 5290 PRINT ":     ROBERT J. LEES, ""BOB""      :"
 5300 PRINT ":       705 JONATHAN ROAD        :"
 5310 PRINT ": KING OF PRUSSIA, PA. 19406 USA :"
 5315 PRINT ": ------------------------------ :"
 5320 PRINT ": MONTGOMERY C0.-ARRL SEC E. PA. :"
 5325 PRINT ": ITU ZONE 8   -   CQ/WAZ ZONE 5 :"
 5330 PRINT ":..............................................................:"
 5340 PRINT 
 5345 PRINT " '% '    '% '  .% % % .  % % % % %   .% % % .  '% .   '% ' "
 5350 PRINT " %     %  % '   '%  ''   .%  % '   '%  % % .  % "
 5355 PRINT " %     %      .%     .% '  %    %  %  '% . % "
 5360 PRINT " %     %    % % :    .% '   %    %  %   '% % "
 5365 PRINT " %   ::  %      '%   .% '    %    %  %    '% "
 5370 PRINT " %  .% % . %  % .   .%  % '   .. % .   .%  %    % "
 5375 PRINT "  '% '  '% '   '% % % '  % % % % %   '% % % '  .% .   .% . "
 5380 PRINT "                        '% "
 5385 PRINT ". ... ...  . . . ... ...  ... ... . .  ... ... . ...  ... . "
 5386 PRINT 
 5390 PRINT "      ':'    ...    ':'      ......... "
 5395 PRINT "      ':''''''''':.:''''''':'''':''''... '''':'''' "
 5400 PRINT "      :     .% :.   Z ...    '''''''"      
 5405 COPY 
 5410 CLS 
 5420 PRINT "    ..% % % % % % % % % % % % % % % % .."
 5426 PRINT ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"
 5430 PRINT "% %A%R%R%L% % % % %P%A%R%A% % % %P%E%C%O% %R%A%D%I%O% %C%L%U%B% "
 5440 PRINT "% %W%A%S%/%W%A%C%/%D%X%C%C% %(%A%L%L% %C%W% %A%T% %6%0%W% %I%N%)"
 5460 PRINT "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
 5930 PRINT "CONFIRMING  2-WAY  ";M$;" QSO  WITH"
 5940 PRINT "RADIO ";C$;" ON ";D$;" ";F$;", 19";Y$
 5950 PRINT "AT ";T$;" UTC ON ";B$;" MHZ / RST ";R$
 5970 PRINT "--------------------------------"
 6000 PRINT "RIG ";E$
 6010 PRINT "ANT ";L$
 6015 PRINT "--------------------------------"
 6020 IF I$="R" THEN GOTO 7000
 6030 PRINT "TNX  FOR  THE CONTACT  ";N$
 6035 IF J$(3,1)=" " THEN PRINT 
 6040 PRINT J$(1)
 6045 PRINT J$(2)
 6046 IF J$(3,1)=" " THEN PRINT 
 6047 IF J$(3,1)=" " THEN GOTO 6052
 6050 PRINT J$(3)
 6051 PRINT J$(4)
 6052 IF I$="R" THEN PRINT TAB 25;"73, BOB"
 6053 IF I$="" THEN PRINT "PLEASE QSL ";N$;"**** 73, BOB"
 6056 PRINT "--------------------------------"
 6060 PRINT "(QSL BY SINCLAIR ZX-81 COMPUTER)"
 6061 PRINT 
 6063 PRINT "''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''"
 6065 COPY 
 6095 CLS 
 6096 FOR A=1 TO 4
 6097 LET J$(A)=""
 6098 NEXT A
 6100 PRINT AT 20,0;"TO CONTINUE HIT ""ENTER""","TO EXIT ENTER ""E"""
 6110 INPUT I$
 6120 IF I$="E" THEN STOP 
 6130 GOTO 200
 7000 PRINT "TNX FOR QSO  AND QSL, ";N$
 7010 GOTO 6035
 9000 SAVE "QS%L"
 9010 GOTO 8

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

Scroll to Top