home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / bus_pers / ham.lha / ARRLDXPrt_v1.0 (.txt) < prev    next >
AmigaBASIC Source Code  |  1990-08-31  |  16KB  |  428 lines

  1. 'July 18, 1990: ARRLDXPrt was prepared by George R. Leone, K6SG, a member of
  2. 'the River City Contesters, an Amateur Radio Club, and of the Sacramento Amiga 
  3. 'Computer Club. He assumes no responsibility for any losses incurred by its 
  4. 'use nor does he assume any responsibility for its upkeep. It is in the
  5. 'public domain and may be freely copied and distributed but may NOT be sold.
  6. 'This program will print all American Radio Relay League (ARRL) DX Contest 
  7. 'reports and permits log corrections to be made. Use ARRLDXScrn for reviewing 
  8. 'reports on screen.
  9. DEFINT a-Z
  10. CLEAR ,75000
  11. WIDTH 80
  12. WIDTH LPRINT 80
  13. DIM q$(1,13) ,qc$(1,13),a$(3000) 
  14.  
  15.   PRINT "Before proceeding I need some information: ":PRINT
  16.   LOCATE 3,10:INPUT "Your first name ";my.nam$        'entries personalize reports
  17.   my.nam$=UCASE$(my.nam$)
  18.   LOCATE 5,10:INPUT "Your call ";my.cal$
  19.   my.cal$=UCASE$(my.cal$)
  20.   LOCATE 7,10:INPUT "ARRL Section ";my.sect$
  21.   my.sect$=UCASE$(my.sect$)
  22.   LOCATE 9,10:INPUT "State ";stat$
  23.   stat$=UCASE$(stat$)
  24. yrin:
  25.   LOCATE 11,10:INPUT "Enter last two digits of contest year";yr$
  26.   IF yr$="" THEN GOTO yrin:
  27. mode: LOCATE 9,24:PRINT "    "
  28.   LOCATE 13,10:INPUT "Enter mode - SSB or CW ";mode$
  29.   mode$=UCASE$(mode$)
  30.   IF mode$ <> "SSB" AND mode$ <> "CW" THEN GOTO mode
  31.   LOCATE 15,10:INPUT "Transmitter power in watts ";pwr%
  32.   OPEN "ARRLDX"+yr$+mode$ AS #1 LEN = 70    
  33.   FIELD #1,11 AS his.cal$,3 AS bnd$,8 AS dayt$,5 AS tyme$,6 AS my.nr$,6 AS his.nr$,5 AS time.prev$,5 AS time.on$,5 AS sign.in$,5 AS sign.out$,5 AS nu.mult$,1 AS poynt$,5 AS nat$ 
  34.   GOSUB clr.ctrs
  35.   
  36. menu.selection: 
  37.   CLS
  38.   PRINT:PRINT TAB(28);"PRINTING MENU SELECTION"
  39.   PRINT:PRINT:PRINT TAB(15);"1.  Print Log "
  40.   PRINT:PRINT TAB(15);"2.  Print Summary Sheet"
  41.   PRINT:PRINT TAB(15);"3.  Print Dupesheet  "
  42.   PRINT:PRINT TAB(15);"4.  Print Multiplier List"
  43.   PRINT:PRINT TAB(15);"5.  Print Labels  "
  44.   PRINT:PRINT TAB(15);"6.  Make Log Corrections "
  45.   PRINT:PRINT TAB(15);"7.  Main Menu "
  46.   PRINT:PRINT:INPUT "Pick a number ";pn$
  47.   IF pn$ <> "1" AND pn$ <> "2" AND pn$ <> "3" AND pn$ <> "4" AND pn$ <> "5" AND pn$ <> "6" AND pn$ <> "7" THEN GOTO menu.selection
  48.   IF pn$="1" THEN GOSUB clr.ctrs:GOTO prints.log.title
  49.   IF pn$="2" THEN GOTO Prints.summary.sheet
  50.   IF pn$="3" THEN GOSUB menu.first:GOTO prints.dupe.sheet
  51.   IF pn$="4" THEN GOSUB menu.first:GOTO prints.mult.list
  52.   IF pn$="5" THEN GOTO prints.labels 
  53.   IF pn$="6" THEN  GOTO correct.log
  54.   IF pn$="7" THEN CLOSE:CLS:CLEAR:CHAIN "ARRLDXBoot1.0"
  55.  
  56. prints.log.title:
  57.   CLS
  58.   LPRINT:LPRINT SPC(23);"ARRL INTERNATIONAL DX COMPETITION"
  59.   LPRINT "LOG Sheet____of____";SPC(42); "MODE ";mode$
  60.   LPRINT "CALL USED: ";my.cal$
  61.   LPRINT "-----------------------------------------------------------------------------"
  62.   LPRINT "Band  Date      Time   Station      SENT     RCVD      NEW Mult  PTS   QSO NR"
  63.   LPRINT "-----------------------------------------------------------------------------"
  64.  
  65. git: 
  66.   multctr=multctr+1                      'starts total multiplier counter
  67.    x=x+1                                 'starts qso counter                                      
  68.    GET #1, x
  69.      q$(1,1)=his.cal$
  70.      q$(1,2)=bnd$
  71.      q$(1,3)=dayt$
  72.      q$(1,4)=tyme$
  73.      q$(1,5)=my.nr$
  74.      q$(1,6)=his.nr$
  75.      q$(1,11)=nu.mult$   
  76.      IF nu.mult$ = "     " THEN multctr=multctr-1  'multiplier worked before
  77.      q$(1,12)=poynt$
  78.      PTS= PTS+VAL(poynt$)
  79.      q$(1,13)=nat$
  80.    LPRINT q$(1,2);TAB(7);q$(1,3);TAB(17);q$(1,4);TAB(24);q$(1,1);TAB(37);q$(1,5);TAB(46);q$(1,6);TAB(56);q$(1,11);TAB(66);q$(1,12);TAB(71);x
  81.    IF bnd$="160" AND nu.mult$ <> "     " THEN ctr1=ctr1+1 
  82.    IF bnd$="160" THEN ctra=ctra+1                           'band counters working
  83.    IF bnd$="80 " AND nu.mult$ <> "     " THEN ctr2=ctr2+1
  84.    IF bnd$="80 " THEN ctrb=ctrb+1
  85.    IF bnd$="40 " AND nu.mult$ <> "     " THEN ctr3=ctr3+1
  86.    IF bnd$="40 " THEN ctrc=ctrc+1
  87.    IF bnd$="20 " AND nu.mult$ <> "     " THEN ctr4=ctr4+1
  88.    IF bnd$="20 " THEN ctrd=ctrd+1
  89.    IF bnd$="15 " AND nu.mult$ <> "     " THEN ctr5=ctr5+1
  90.    IF bnd$="15 " THEN ctre=ctre+1
  91.    IF bnd$="10 " AND nu.mult$ <> "     " THEN ctr6=ctr6+1
  92.    IF bnd$="10 " THEN ctrf=ctrf+1
  93.    IF x = LOF(1)/70  THEN GOTO last.page
  94.    IF x MOD 50 = 0 THEN GOSUB Print.footer:GOTO prints.log.title  'prints 50 entries per page
  95.    x = LOC(1)                            'marks qso counter at end of page
  96.      GOTO git
  97.      GOTO last.page
  98.  
  99. Print.footer:
  100.   pg=pg+1:LPRINT
  101.   LPRINT "Band/QSOs/Multipliers"    'footnotes each page with statistics
  102.   LPRINT "160m";ctra;ctr1;"/ 80m";ctrb;ctr2;"/ 40m";ctrc;ctr3;"/ 20m";ctrd;ctr4;"/ 15m";ctre;ctr5;"/ 10m";ctrf;ctr6
  103.   LPRINT "Contacts = ";x;"    Multipliers worked = ";multctr;"    Score = ";PTS * multctr
  104.   LPRINT:LPRINT TAB(35); "page  ";pg
  105.   LPRINT:LPRINT:LPRINT
  106.   RETURN                                 
  107.  
  108. prints.mult.list:
  109.   GOSUB prints.mult.title
  110.   GOSUB git.a.mult
  111.   GOSUB shell.sort
  112.   GOTO mult.output
  113.                                                          
  114. last.page:
  115.   pg=pg+1:LPRINT
  116.   LPRINT "Band/QSOs/Multipliers - Cumulative
  117.   LPRINT "160m";ctra;ctr1;"/ 80m";ctrb;ctr2;"/ 40m";ctrc;ctr3;"/ 20m";ctrd;ctr4;"/ 15m";ctre;ctr5;"/ 10m";ctrf;ctr6
  118.   LPRINT "Contacts = ";x;"    Multipliers worked = ";multctr;"    Score = ";PTS * multctr
  119.   LPRINT:LPRINT TAB(35); "page  ";pg:
  120.   LPRINT CHR$(12)CHR$(13)
  121.   GOSUB finish
  122.   GOTO menu.selection
  123.  
  124. finish:
  125.   PRINT
  126.   PRINT "<Press any key to continue.>";
  127.   hit$ = INPUT$(1) 
  128.   RETURN
  129.   
  130. clr.ctrs:  
  131.   x=0:PTS=0:pg=0
  132.   ctr1=0:ctr2=0:ctr3=0:ctr4=0:ctr5=0:ctr6=0:  'band mult counters
  133.   ctra=0:ctrb=0:ctrc=0:ctrd=0:ctre=0:ctrf=0:  'band qso counters
  134.   RETURN
  135.   
  136. prints.dupe.title:
  137.   CLS
  138.   LPRINT TAB(27);"ARRL DX CONTEST DUPESHEET"
  139.   LPRINT:LPRINT "Call ";my.cal$;TAB(50);"ARRL SECTION....";my.sect$
  140.   LPRINT
  141.   RETURN
  142.  
  143.   git.a.call:
  144.   FOR x=1 TO LOF(1)/70
  145.   GET #1, x
  146.     a$(x)=bnd$+" "+his.cal$           'selects band and calls from file for sorting
  147.     NEXT x
  148.   RETURN 
  149.  
  150. prints.dupe.sheet:
  151.   GOSUB prints.dupe.title
  152.   GOSUB git.a.call                   
  153.   GOSUB shell.sort
  154.   GOTO dupe.output                          
  155.  
  156. shell.sort:           
  157.   Z=x
  158.   t=x-1
  159.   CLS
  160.  
  161. shell.algorithm:
  162.   n=LOF(1)/70
  163.   l=(2^INT(LOG(n)/LOG(2)))-1
  164.  
  165. start:
  166.   l=INT(l/2)
  167.   IF l < 1 THEN sorted.output
  168.   FOR j = 1 TO l
  169.   FOR k=j + l TO n STEP l
  170.    i=k
  171.     t$=a$(i)
  172.     compare:
  173.     IF a$(i-l) <= t$ THEN substitute
  174.     a$(i)=a$(i-l)
  175.    i=i-l
  176.    IF i > l THEN compare
  177.  
  178. substitute:
  179.   a$(i)=t$
  180.     LOCATE 1,1: PRINT t$      'prints sort in window left top of screen
  181.      NEXT k
  182.      NEXT j
  183.   GOTO start
  184.   RETURN
  185.  
  186. sorted.output: 
  187.   IF pn$="4" THEN GOTO mult.output 
  188.  
  189. dupe.output:
  190.   FOR x=1 TO n
  191.    LPRINT a$(x);                'prints calls in alpha/num sequence
  192.   IF x = LOF(1)/70 THEN GOTO last.page1
  193.   IF x MOD 250=0 THEN GOSUB print.footer1:GOSUB prints.dupe.title
  194.  NEXT x
  195.   LPRINT  CHR$(12) CHR$(13)
  196.   GOSUB finish
  197.   GOTO menu.selection
  198.  
  199.  
  200. git.a.mult:
  201.   FOR xd=1 TO LOF(1)/70
  202.   GET #1, xd
  203.    IF nu.mult$="     " THEN a$(xd)="" :ELSE a$(xd)=bnd$+" "+nu.mult$+"      "
  204.    NEXT
  205.   RETURN
  206.  
  207. mult.output:
  208.   FOR xd=1 TO n
  209.    LPRINT a$(xd);         'prints mults in alpha/num sequence by band
  210.   IF xd = LOF(1)/70 THEN GOTO last.page1
  211.   IF xd MOD 250 = 0 THEN GOSUB print.footer1:GOSUB prints.mult.title
  212.   NEXT xd
  213.   GOTO menu.selection
  214.  
  215. print.footer1:
  216.   pg=pg+1:LPRINT
  217.   LPRINT:LPRINT TAB(35); "page  ";pg
  218.   LPRINT CHR$(27)"N"CHR$(3)              'perf skip at page end
  219.   RETURN                                 
  220.  
  221. prints.mult.title:
  222.  CLS
  223.   LPRINT TAB(25);"ARRL DX CONTEST MULTIPLIER LIST"
  224.   LPRINT:LPRINT "Call ";my.cal$;TAB(50);"ARRL SECTION....";my.sect$
  225.   LPRINT 
  226.   RETURN
  227.                                                          
  228. last.page1:
  229.   pg=pg+1:LPRINT
  230.   LPRINT:LPRINT TAB(35); "page  ";pg:
  231.   LPRINT CHR$(13)CHR$(12)
  232.   GOSUB finish
  233.   GOTO menu.selection
  234.  
  235. Prints.summary.sheet:
  236.   LPRINT:LPRINT STRING$(77,"-")
  237.   LPRINT TAB(25);"ARRL INTERNATIONAL DX CONTEST"
  238.   LPRINT STRING$(77,"-")
  239.   LPRINT TAB(5);"CALL USED: ";my.cal$;TAB(27);"MODE: ";mode$;TAB(50);"ARRL SECTION: ";my.sect$
  240.   LPRINT:LPRINT "(Separate logs and summaries must be submitted for each mode of operation)"
  241.   LPRINT
  242.   LPRINT SPC(25);"Band   Valid QSOs    Countries"
  243.   LPRINT SPC(25);STRING$(32,"-")
  244.   LPRINT TAB(27);"160";TAB(36);ctra;TAB(48);ctr1   'prints band counters totals
  245.   LPRINT TAB(27);"80";TAB(36);ctrb;TAB(48);ctr2
  246.   LPRINT TAB(27);"40";TAB(36);ctrc;TAB(48);ctr3
  247.   LPRINT TAB(27);"20";TAB(36);ctrd;TAB(48);ctr4
  248.   LPRINT TAB(27);"15";TAB(36);ctre;TAB(48);ctr5
  249.   LPRINT TAB(27);"10";TAB(36);ctrf;TAB(48);ctr6
  250.   LPRINT SPC(25);STRING$(32,"-")
  251.   LPRINT TAB(26);"TOTAL";TAB(36);x;TAB(48);multctr
  252.   LPRINT STRING$(77,"-")
  253.   LPRINT "Single Operator:( )     Single Operator Assisted:( )" 
  254.   LPRINT "    ALL Band ( )
  255.   LPRINT "    Single Band (check one):160( );80( );40( );20( );15( );10( )"
  256.   LPRINT "    QRP - 10w or less:( ) "
  257.   LPRINT:LPRINT "Multiop ( ): LIST ALL ops."
  258.   LPRINT:LPRINT "SCORING: ";SPC(3);"QSO'S: ";x;"  QSO Points: ";PTS;"   Multipliers";multctr
  259.   LPRINT:LPRINT PTS*multctr "Claimed Score"
  260.   LPRINT:LPRINT "DC Power Input: ";pwr%
  261.   LPRINT STRING$(77,"-")
  262.   LPRINT "Club participation?   Yes( )    No( )
  263.   LPRINT "If YES, PRINT name of ARRL Affiliated Club:"
  264.   LPRINT STRING$(77,"-")
  265.   LPRINT:
  266.   LPRINT "I have observed all competition rules as well as regulations established "
  267.   LPRINT "for Amateur Radio in my country. My report is correct and true to the "
  268.   LPRINT "best of my knowledge. I agree to be bound by the decisions of the ARRL "
  269.   LPRINT "Awards Committee."
  270.   LPRINT: 
  271.   LPRINT "Date:.............  Signature............................Call:.............."
  272.   LPRINT STRING$(77,"-")
  273.   LPRINT:LPRINT "Name:_______________________________________Call:___________________
  274.   LPRINT:LPRINT "Address:____________________________________________________________
  275.   LPRINT:LPRINT "City____________________________________State_______ZIP_____________
  276.   LPRINT  CHR$(12)             'CHR$(13)
  277.   GOSUB finish
  278.   GOTO menu.selection
  279.  
  280. prints.labels:
  281.   CLOSE #1
  282.   CLS
  283.   OPEN "ARRLDX"+yr$+mode$ AS #1 LEN = 70    
  284.   FIELD #1,11 AS his.cal$,3 AS bnd$,8 AS dayt$,5 AS tyme$,6 AS my.nr$,6 AS his.nr$,5 AS time.prev$,5 AS time.on$,5 AS sign.in$,5 AS sign.out$,5 AS nu.mult$,1 AS poynt$,5 AS nat$ 
  285.   i=0
  286.   LOCATE 3,10:INPUT "Do you want to print (I)ndividual or (A)ll labels?"; an$
  287.   an$=UCASE$(an$)                        'makes entries case blind
  288.   IF an$ <> "I" AND an$ <> "A" THEN GOTO prints.labels  'accepts only i or a
  289.   IF an$ = "I" THEN GOTO retrieve
  290.   IF an$ = "A" THEN GOTO git.by.call
  291.  
  292. make.labels:
  293.   LPRINT
  294.   LPRINT "Confirming QSO with ";q$(1,1)              'prints all labels
  295.   LPRINT "DATE ";q$(1,3);": UTC ";q$(1,4)
  296.   LPRINT "BAND ";q$(1,2);" M ";mo$;":MY NR ";q$(1,5)
  297.   LPRINT "TNX UR ARRL DX NR ";q$(1,6)
  298.   LPRINT "73, CU NEXT YR. -- ";my.nam$
  299.   LPRINT
  300.   RETURN
  301.  
  302. menu.first:
  303.   pg=0:x=0                     'sets page and qso ctrs to 0
  304.   RETURN
  305.  
  306. make.a.label:
  307.   LPRINT                                               'prints one label
  308.   LPRINT "Confirming QSO with ";qc$(1,1)
  309.   LPRINT "DATE ";qc$(1,3);": UTC ";qc$(1,4)
  310.   LPRINT "BAND ";qc$(1,2);" M ";mo$;":MY NR ";qc$(1,5)
  311.   LPRINT "TNX UR ARRL DX NR ";qc$(1,6)
  312.   LPRINT "73, CU NEXT YR. -- ";my.nam$
  313.   LPRINT
  314.   GOTO retrieve
  315.  
  316. correct.log:
  317.   CLS
  318.   CLOSE
  319.   OPEN "ARRLDX"+yr$+mode$ AS #1 LEN = 70    
  320.   FIELD #1,11 AS his.cal$,3 AS bnd$,8 AS dayt$,5 AS tyme$,6 AS my.nr$,6 AS his.nr$,5 AS time.prev$,5 AS time.on$,5 AS sign.in$,5 AS sign.out$,5 AS nu.mult$,1 AS poynt$,5 AS nat$ 
  321.   qso.ptr = 0
  322.  
  323. retrieve:
  324.   PRINT SPC(5):INPUT "Enter band or Press (M) for Menu";ans$
  325.   ans$=UCASE$(ans$)
  326.   IF ans$="M" THEN GOTO menu.selection :ELSE band$=ans$
  327.   IF band$ <> "160" THEN band$=band$+" "   'adds space to other bands for matching
  328.   INPUT "Retrieve by (C)all or (S)erial Number ";rt$
  329.   rt$=UCASE$(rt$)
  330.   IF rt$="S" THEN INPUT "Enter serial nr. ";i: GOTO git.by.ptr
  331.   INPUT "Enter Call "; cal$
  332.   cal$=UCASE$(cal$)
  333.   GOTO get.call
  334.  
  335. git.by.call:                        'This array used for getting info
  336.   FOR qso.ptr = 1 TO LOF(1)/70       'for printing (A)ll labels
  337.    GET #1, qso.ptr
  338.      q$(1,1)=his.cal$
  339.      q$(1,2)=bnd$
  340.      q$(1,3)=dayt$
  341.      q$(1,4)=tyme$
  342.      q$(1,5)=my.nr$
  343.      q$(1,6)=his.nr$
  344.      q$(1,11)=nu.mult$   
  345.      q$(1,12)=poynt$
  346.      PTS= PTS+VAL(poynt$)               'adds points of each qso
  347.      q$(1,13)=nat$
  348.      GOSUB make.labels
  349.      IF qso.ptr <> LOF(1)/70  THEN NEXT :ELSE GOSUB finish:GOTO menu.selection
  350.     
  351. get.call: i=0   :ctr=0
  352.  
  353. goagn:
  354.   FOR i = 1 TO LOF(1)/70
  355.    GET #1, i
  356.     ctr = INSTR(his.cal$+" "," ")            'eliminates trailing blanks in 
  357.     q$(1,1) = LEFT$(his.cal$,ctr-1)          'array to permit proper call sign match.
  358.     q$(1,2)=bnd$
  359.     IF q$(1,2) = band$ AND cal$ = q$(1,1) THEN GOTO git.by.ptr
  360.     NEXT
  361.    PRINT "Call not found!":BEEP:BEEP:GOTO retrieve
  362.                                             
  363. git.by.ptr:                                 
  364.   CLS                            'This array used for correcting log entry
  365.   GET #1, i                      'and getting info for printing single labels
  366.     qc$(1,1)=his.cal$
  367.     qc$(1,2)=bnd$
  368.     qc$(1,3)=dayt$
  369.     qc$(1,4)=tyme$
  370.     qc$(1,5)=my.nr$
  371.     qc$(1,6)=his.nr$
  372.     qc$(1,7)=time.prev$
  373.     qc$(1,8)=time.om$
  374.     qc$(1,9)=sign.in$
  375.     qc$(1,10) =sign.out$
  376.     qc$(1,11)=nu.mult$   
  377.     IF nu.mult$ = "     " THEN multctr=multctr-1
  378.     qc$(1,12)=poynt$
  379.     PTS= PTS+VAL(poynt$)
  380.     qc$(1,13)=nat$
  381.   IF an$ = "I"  THEN GOTO make.a.label
  382.  
  383. Correct.entry:
  384.   PRINT "Band  Date      Time   Station      SENT     RCVD         NEW Mult      PTS"
  385.   PRINT qc$(1,2);"    ";qc$(1,3);" ";qc$(1,4);"  "qc$(1,1);"  ";qc$(1,5);"   ";qc$(1,6);"        ";qc$(1,11);"         ";qc$(1,12)    
  386.    INPUT "Band    :",bd$
  387.    IF bd$ <> "" THEN qc$(1,2)=bd$ 
  388.    INPUT "Date    :",m.date$
  389.    IF m.date$ <> "" THEN q$(1,3)=m.date$
  390.    INPUT "Time    :",m.time$
  391.    IF m.time$ <> "" THEN qc$(1,4)=m.time$
  392.    INPUT "Station :", h.cal$
  393.    h.cal$=UCASE$(h.cal$)
  394.    IF h.cal$ <> "" THEN  qc$(1,1)=h.cal$
  395.    INPUT "Sent    :",m.numb$
  396.    IF m.numb$ <> "" THEN qc$(1,5)=m.numb$ 
  397.    INPUT "Received:",h.nr$
  398.    IF h.nr$ <> "" THEN qc$(1,6)=h.nr$
  399.    INPUT "New Mult:",n.mult$
  400.    n.mult$=UCASE$(n.mult$)            
  401.    IF n.mult$ <> "" THEN qc$(1,11)=n.mult$
  402.    INPUT "Points  :",pint$
  403.    IF pint$ <> "" THEN qc$(1,12)=pint$
  404.    PRINT "Band  Date      Time   Station      SENT     RCVD         NEW Mult      PTS"
  405.    PRINT qc$(1,2);"   ";qc$(1,3);" ";qc$(1,4);" ";" ";qc$(1,1);"  ";qc$(1,5);"   ";qc$(1,6);"        ";qc$(1,11);"         ";qc$(1,12)    
  406.  
  407. File.it:             'enters corrected or non-corrected log record
  408.   LSET his.cal$ = qc$(1,1)
  409.   LSET bnd$ = qc$(1,2) 
  410.   LSET dayt$ = qc$(1,3)
  411.   LSET tyme$ = qc$(1,4)
  412.   LSET my.nr$ = qc$(1,5)
  413.   LSET his.nr$ =qc$(1,6)
  414.   LSET time.prev$ = qc$(1,7)
  415.   LSET time.on$ = qc$(1,8)
  416.   LSET sign.in$ = qc$(1,9)
  417.   LSET sign.out$ = qc$(1,10)
  418.   LSET nu.mult$ =qc$(1,11)
  419.   LSET poynt$ = qc$(1,12)
  420.   LSET nat$ = qc$(1,13)
  421.     PUT #1, i                 
  422.   CLS
  423.   GOTO retrieve
  424.  
  425.   
  426. waiter:  ' inky: a$=INKEY$:if a$="" THEN inky  'best little troubleshooting and
  427.  'debugging tool.
  428.