Back to the main page for Mozart's Musikalisches Wuerfelspiel.

WSPIEL.BAS
Generate your own Mozart waltzes!

This computer program called WSPIEL generates waltzes from Mozart's Musikalisches Wuerfelspiel. It is written in BASIC. Specifically, it was originally written for GW-BASIC 3.23 (1988). In Mar 2008 I revisited it with my more up-to-date computing setup. I now have QBASIC on my computer with the Windows XP system, and, lo and behold, WSPIEL still runs like a champ!

It shouldn't be hard to use. (Of course, that's easy for me to say.) The first thing you need to do is extract the WSPIEL source code from this web page and create a WSPIEL.BAS somewhere on your computer. In Internet Explorer, click View and then click Source. That brings up this web page in Notepad. Delete everything above and below the WSPIEL code, and save it as WSPIEL.BAS anywhere you'd like. If you have QBASIC, you're ready to go.

For your first run, just hit carriage return for every prompt except for the filename. That will give you a file with 11 never-before-heard Mozart waltzes, using each of Mozart's measures composed for the Musikalisches Wuerfelspiel exactly one time. This is called the D = "Disallow reuse of measures" mode.

Then try the A = "Allow reuse of measures" mode. The only additional step is specifying the number of walzer, up to 11, that you want.

There is the S mode for Specifying, or Selecting, the precise measures you want in a Single waltz. It's also a cinch to use, but you wouldn't have much use for it at this point since you don't know what you're choosing from. (See the page with the index to all the measures.) Still, you might use the digits of your social security number, or some lucky number, to generate your own personal Mozart waltz.

The R = Redo mode. Sounds a bit scarier. You can probably live without it, but it's not so bad, and it might come in handy. What you need to know is that one run of WSPIEL creates two disk files. They both use the name you supplied at the prompt for the filename. The file with extension .WTZ contains the guitar tablature for all of the waltzes generated by that run. The file with extension .PLN contains the "plan" for that run, that is, all the "dice tosses" used in each of the waltzes in that run. Take a look at the .PLN file to see there's nothing scary there, just a table of "dice tosses" 1 to 11.

All the R = Redo mode does is reuse the measure numbers in the specified .PLN file. The main use for it is to simply regenerate the exact same batch waltzes, but with the output format changed - either a change in the length of the tablature lines, or a switch from frets-in-the-spaces to frets-on-the-lines tablature, say. Or maybe you want to regenerate a batch of walzes after making your own changes to WSPIEL.BAS, such as a change to the tablature of a particular measure, say. If you ever have use for the R = Redo mode, don't be terrorized by the "File already exists. Are you sure?" prompt. Just answer "Y" - yes, you are sure. The older .WTZ file will be over-written, which is what you want, presumably.

Another use for the R = Redo mode is to generate a batch of customized waltzes specified in a .PLN file which you edited by hand. (In this case, "Redo" is a misnomer.) The layout of the .PLN file is simple, and you might edit an existing one or create one from scratch. (The randomizer seed, which is written to the .PLN file is not used in any way in the R = Redo mode, so you can stick any number there.)

After converting from GW-BASIC to QBASIC I could have spent some time and effort making the code look like a million bucks and read like a thriller, but I decided that it really wasn't worth the effort. It works fine; why not just leave well enough alone?

It would give me the greatest pleasure to hear from someone who successfully runs WSPIEL.BAS. Best of luck! although none is really needed. Please let me know if I've said anything unclearly in this introduction. Unfortunately, I'm afraid I can't answer any further questions about getting WSPIEL to work on your computer.


Contact Donald Sauter: send an email; view guestbook; sign guestbook.
Back to Donald Sauter's main page.
Rather shop than think? Please visit My Little Shop of Rare and Precious Commodities.

Parents, if you're considering tutoring or supplemental education for your child, you may be interested in my observations on Kumon.


'*** DIRE WARNING!!!  Do NOT extract the WSPIEL code by selecting 
'*** the text in this web page.  You MUST work with the source HTML.  
'*** In Internet Explorer, click View and then click Source.

'WSPIEL.BAS - generates walzer using Mozart's Musikalisches Wuerfelspiel.

IF NEVER THEN 4750 :'Add staff column subroutines.
IF NEVER THEN 4950 :'RHYTHM_123 Subroutine.
IF NEVER THEN 5160 :'RHYTHM_567 Subroutine.
IF NEVER THEN 5560 :'LOAD_CHORD Subroutine.
IF NEVER THEN 5710 :'PRINT_STAFF Subroutine.
IF NEVER THEN 6280 :'Rhythm and chord DATA.
IF NEVER THEN 8370 :'Last line.

'NOTE: Default tablature presentation is Frets-in-Spaces. 
'      For Frets-on-Lines, manually break during prompts and set SPACEFL=0.

    DIM STF$(9)    :'9 printer lines for the tablature staff; 2 for rhythms, 
    '                7 lines for 6-string staff.
    DIM PLAN(11,15)   :'11 waltzes, 15 bars (not including 1st/2nd endings.)
    DIM PLAN17(11,17) :'11 waltzes, 17 bars (including 1st/2nd endings.)
    DIM USED(15,11)   :'Mozart's 15 bars have 11 alternatives each.
    DIM RHYTHMS(11,10) :'11 different rhythm patterns. See DATA statements.
    BARCODE=99

    TSAV$=TIME$
    DSAV$=DATE$
    SECS=TIMER
    RANDOMIZE SECS
PRINT
PRINT "WSPIEL - Mozart's Musikalisches Wuerfelspiel."
PRINT
PRINT "Reminder: For an HTML file, supply beginning HTML in WAM.HT1.
PRINT

SPACEFL=-1
INPUT "Frets-in-the-spaces tablature? (=yes; N=frets-on-the-lines): ",ANS$
IF ANS$<>"" THEN SPACEFL=0

300 PRINT
310 INPUT "Filename (waltzes will be in filename.WTZ): ",FLNAM$
    IF FLNAM$="" THEN BEEP : GOTO 310
    IF INSTR(FLNAM$,".")<>0 THEN BEEP : GOTO 310

    'IF file already exists
    ON ERROR GOTO 440
    OPEN "I",#2,FLNAM$+".WTZ"
    CLOSE #2
390 PRINT FLNAM$+".WTZ already exists. Are you sure you want "+FLNAM$;
    INPUT "? (Y or N): ",ANS$
    IF NOT(ANS$="N" OR ANS$="n" OR ANS$="Y" OR ANS$="y") THEN 390
    IF ANS$="N" OR ANS$="n" THEN 300
    GOTO 470
440 'ELSE file doesn't exist yet
    RESUME 460
460 ON ERROR GOTO 0
470 'ENDIF output file

    MAXPOS=78
    INPUT "Tablature line length? (Recommend 76-80, =78): ",ANS
    IF ANS<>0 THEN MAXPOS=ANS

    PRINT "Program modes:
    PRINT "  D = DISALLOW reuse of measures. Selected measures are removed 
    PRINT "      from the selection pool. Produces a batch of 11 randomly 
    PRINT "      generated waltzes exhausting all of Mozart's measures.  
    PRINT "  A = ALLOW reuse of measures. Selected measures are left in the 
    PRINT "      selection pool. You specify the number (1-11) of randomly 
    PRINT "      generated waltzes. 
    PRINT "  S = non-random mode. You SPECIFY the desired alternative for each 
    PRINT "      measure in a single waltz.
    PRINT "  R = REDO (repeat, rerun) a waltz or batch of waltzes previously 
    PRINT "      generated.  
    ANS$="D"
650 INPUT "Desired mode (D, A, S, R. =D): ",ANS$
    IF ANS$="" THEN ANS$="D"
    IF ANS$="d" THEN ANS$="D"
    IF ANS$="a" THEN ANS$="A"
    IF ANS$="s" THEN ANS$="S"
    IF ANS$="r" THEN ANS$="R"
    IF ANS$<>"D" AND ANS$<>"A" AND ANS$<>"S" AND ANS$<>"R" THEN 650
    MODE$=ANS$

    'IF measure reuse disallowed 
    IF NOT(MODE$="D") THEN 990

    'Load "used" grid with 1s.
    FOR U1=1 TO 15 : FOR U2=1 TO 11 : USED(U1,U2)=1 : NEXT U2 : NEXT U1
    NOW=11
    FOR W=1 TO NOW :'Loop through waltzes.
    NOALTR=11-W+1 :'Number of (remaining) alternatives for each measure.

    FOR B=1 TO 15 :'Loop through bars of waltz W.
    RNDM=INT(RND*(NOALTR))+1 :'Gives 1-11 for 11 alternatives, for example.
    SUM=0
    U2=0
870 'DO UNTIL sum is same as our random number
    U2=U2+1
    SUM=SUM+USED(B,U2)
    IF NOT(SUM=RNDM) THEN 870
    'ENDDO
    USED(B,U2)=0
    PLAN(W,B)=U2

    NEXT B
    NEXT W
    GOTO 1410

990 'IF measure reuse allowed 
     IF NOT(MODE$="A") THEN 1150

     NOW=11
1030 INPUT "Number of waltzes to generate? (1-11. =11): ",ANS
     IF ANS<>0 THEN NOW=ANS
     IF NOW<1 OR NOW>11 THEN BEEP : GOTO 1030

     FOR W=1 TO NOW :'Loop through waltzes.
     FOR B=1 TO 15  :'Loop through bars within waltz.
     RNDM=INT(RND*11)+1 :'Gives random number 1-11.
     PLAN(W,B)=RNDM
     NEXT B
     NEXT W
     GOTO 1410

1150 'ELSEIF user selects desired measures
     IF NOT(MODE$="S") THEN 1280
     NOW=1
     FOR B=1 TO 15
     IF B=8 THEN PRINT "No choice for bars 8 and 9 (the 1st and 2nd endings).
     BINW=B : IF B>7 THEN BINW=B+2
1210 PRINT "For bar";BINW;", choose from 11 alternatives ";
     INPUT "(1-11): ",C%
     IF C%<1 OR C%>11 THEN BEEP : GOTO 1210
     PLAN(1,B)=C%
     NEXT B
     GOTO 1410

1280 'ELSE repeat previously done waltzes. Get measure info from .PLN
     OPEN "I",#1,FLNAM$+".PLN"
     INPUT #1, DSAV$
     INPUT #1, TSAV$
     INPUT #1, SECS
     NOW=1 : B=0
1340 'DO UNTIL end of .PLN file is reached
     B=B+1
     IF B>15 THEN B=1 : NOW=NOW+1
     INPUT #1, PLAN(NOW,B)
     IF NOT EOF(1) THEN 1340
     'ENDDO
     CLOSE #1
1410 'ENDIF 

     PRINT
     PRINT "Table of ";CHR$(34);"dice tosses";CHR$(34);" for each waltz:
     PRINT
     PRINT "                       -- Measure number --
     PRINT "Waltz    1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 
     PRINT "-----   --------------------------------------------------
     REM      1.    nn nn nn nn nn nn nn  -  - nn nn nn nn nn nn nn nn
     FOR W=1 TO NOW
     PRINT USING "###";W;
     PRINT ".   ";
     FOR B=1 TO 7
     PRINT USING "###";PLAN(W,B);
     NEXT B
     PRINT "  -  -";
     FOR B=8 TO 15
     PRINT USING "###";PLAN(W,B);
     NEXT B
     PRINT
     NEXT W

     IF NOT(MODE$<>"R") THEN 1760 :'Write to disk if not already there.
     OPEN "O",#1,FLNAM$+".PLN"
     PRINT #1, DSAV$
     PRINT #1, TSAV$
     PRINT #1, SECS
     FOR W=1 TO NOW
     FOR B=1 TO 15
     PRINT #1, USING "###";PLAN(W,B);
     IF B<15 THEN PRINT #1, " ,";
     NEXT B
     PRINT #1,
     NEXT W
     CLOSE #1
1760 'ENDIF

     TSTART$=TIME$
     S3$="_" : L$="_"
     IF NOT SPACEFL THEN S3$=" " : L$="-"

     'Open file for tablature output.
     OPEN "O",#3,FLNAM$+".WTZ"

     'IF html starter file
     ON ERROR GOTO 1970
     OPEN "I",#2,"WAM.HT1"
     HTMLFL=-1
1890 'DO UNTIL end of .HT1 file is reached
     LINE INPUT #2, HTM$
     PRINT #3, HTM$
     IF NOT EOF(2) THEN 1890
     'ENDDO
     CLOSE #2
     GOTO 2010

1970 'ELSE no html file to open
     HTMLFL=0
     RESUME 2000
2000 ON ERROR GOTO 0
2010 'ENDIF html starter file

     PRINT #3, "Date = ";DSAV$
     PRINT #3, "Time = ";TSAV$
     PRINT #3, "Seconds from midnight (used as randomizer seed) = ";SECS
     PRINT #3,
     PRINT #3, "Table of ";CHR$(34);"dice tosses";CHR$(34);" for each waltz:
     PRINT #3,
     PRINT #3, "                       -- Measure number --
     PRINT #3, "Waltz    1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 
     PRINT #3, "-----   --------------------------------------------------
     REM          1.    nn nn nn nn nn nn nn  -  - nn nn nn nn nn nn nn nn
     FOR W=1 TO NOW
     PRINT #3, USING "###";W;
     PRINT #3, ".   ";
     FOR B=1 TO 7
     PRINT #3, USING "###";PLAN(W,B);
     NEXT B
     PRINT #3, "  -  -";
     FOR B=8 TO 15
     PRINT #3, USING "###";PLAN(W,B);
     NEXT B
     PRINT #3,
     NEXT W

     PRINT #3,
     PRINT #3,
     PRINT #3,"Explanation of symbols (see the main page): 
     PRINT #3,"  ";CHR$(34);" = trill.  Starts on the main note.
     PRINT #3,"  ~ = turn.  Main note -> upper neighbor -> main -> lower -> main.
     PRINT #3,"  ^ = arrowhead indicating strum or arpeggiation.  
     PRINT #3,
     PRINT #3,"*** Download and edit out all material above and below the tablature.
     PRINT #3,"*** See the main Musikalisches Wuerfelspiel page for printing advice.
     PRINT #3,

     TTLF$="Walzer - Musikalisches Wuerfelspiel"
     COMPF$="W. A. Mozart."
     TUNING$="E A D F# B E."
     PAGENO=1  :'Page counter.

     'Convert PLAN to PLAN17 (adding measures 8 and 9.)
     FOR W=1 TO NOW
     FOR B=1 TO 7 : PLAN17(W,B)=PLAN(W,B) : NEXT B
     PLAN17(W,8)=1
     'Choose measure 9 fingering based on what comes next.
     M10=PLAN(W,8)
     IF M10=1 THEN PLAN17(W,9)=1 :'Ends in position 1.
     IF M10=2 THEN PLAN17(W,9)=1
     IF M10=4 THEN PLAN17(W,9)=1
     IF M10=5 THEN PLAN17(W,9)=1
     IF M10=7 THEN PLAN17(W,9)=3 :'Ends in position 3.
     IF M10=11 THEN PLAN17(W,9)=3
     IF M10=3 THEN PLAN17(W,9)=4 :'Ends in position 4.
     IF M10=6 THEN PLAN17(W,9)=4
     IF M10=8 THEN PLAN17(W,9)=4
     IF M10=9 THEN PLAN17(W,9)=4
     IF M10=10 THEN PLAN17(W,9)=4
     FOR B=10 TO 17 : PLAN17(W,B)=PLAN(W,B-2) : NEXT B
     NEXT W

     'DO FOR all waltzes.  This is the biggest loop.
     FOR W=1 TO NOW

     'Need to start at the beginning of the DATA statements for every waltz.
     RESTORE
     FOR I=1 TO 3 :READ RHYTHMS(1,I) :NEXT I
     FOR I=1 TO 6 :READ RHYTHMS(2,I) :NEXT I
     FOR I=1 TO 5 :READ RHYTHMS(3,I) :NEXT I
     FOR I=1 TO 4 :READ RHYTHMS(4,I) :NEXT I
     FOR I=1 TO 5 :READ RHYTHMS(5,I) :NEXT I
     FOR I=1 TO 4 :READ RHYTHMS(6,I) :NEXT I
     FOR I=1 TO 5 :READ RHYTHMS(7,I) :NEXT I
     FOR I=1 TO 4 :READ RHYTHMS(8,I) :NEXT I
     FOR I=1 TO 10 :READ RHYTHMS(9,I) :NEXT I
     FOR I=1 TO 7 :READ RHYTHMS(10,I) :NEXT I
     FOR I=1 TO 5 :READ RHYTHMS(11,I) :NEXT I

     'Clear staff and start with 4 empty columns.
     FOR JS=1 TO 9 : STF$(JS)="" : NEXT JS
     GOSUB 4750 : GOSUB 4750 : GOSUB 4750 : GOSUB 4750
     CURPOS=4

     PREVRHY=BARCODE
     EMPTYFL=-1 :'Flag says to add empty column after barline.  
     PVFL=0  :'Flag says we had to go back to PREVBRK.
     KNUM$="K516f."
     FOR I=1 TO 15
     KCHR$=MID$(STR$(PLAN(W,I)),2)
     IF PLAN(W,I)=10 THEN KCHR$="A"
     IF PLAN(W,I)=11 THEN KCHR$="B"
     KNUM$=KNUM$+KCHR$
     NEXT I

     'DO FOR all bars in the waltz
     FOR B=1 TO 17

     'IF this is the beginning of a waltz, need to print title, etc.
     IF NOT(B=1) THEN 3300

     'IF this is the first waltz
     IF NOT(W=1) THEN 3160
     W1$="1 of"+STR$(NOW)+"."
     OFFST%=(MAXPOS-LEN(TTLF$))/2
     IF OFFST%<1 THEN BEEP : OFFST%=1
     PRTLN$=SPACE$(OFFST%)+TTLF$
     OFFST%=MAXPOS-LEN(PRTLN$)-LEN(W1$)-2
     IF OFFST%<1 THEN BEEP : OFFST%=1
     PRTLN$=PRTLN$+SPACE$(OFFST%)+W1$
     PRINT #3, PRTLN$

     'Work up line 2 info for 1st waltz.
     PRTLN$="  "+TUNING$
     OFFST%=(MAXPOS-LEN(KNUM$))/2-LEN(PRTLN$)
     IF OFFST%<1 THEN BEEP : OFFST%=1
     PRTLN$=PRTLN$+SPACE$(OFFST%)+KNUM$
     OFFST%=MAXPOS-LEN(PRTLN$)-LEN(COMPF$)-2
     IF OFFST%<1 THEN BEEP : OFFST%=1
     PRTLN$=PRTLN$+SPACE$(OFFST%)+COMPF$
     PRINT #3, PRTLN$
     LINENO=2 :'Line count initialized.
     GOTO 3290

3160 'ELSE not 1st waltz

     'IF this title line and associated staff will overflow page
     IF NOT(LINENO+10>62) THEN 3210
     GOSUB 6140  :'Set up new page.
3210 'ENDIF

     PRTLN$="  Walzer"+STR$(W)+" of"+STR$(NOW)+".  "+KNUM$
     OFFST%=MAXPOS-LEN(PRTLN$)-LEN(COMPF$)-2
     IF OFFST%<1 THEN BEEP : OFFST%=1
     PRTLN$=PRTLN$+SPACE$(OFFST%)+COMPF$
     PRINT #3, PRTLN$
     LINENO=LINENO+1
3290 'ENDIF 1st waltz
3300 'ENDIF starting new waltz

     ALTRNO=PLAN17(W,B) :'Which alternative, out of 11, to use.
     'Spin through DATA to chosen alternative.
     FOR I=1 TO ALTRNO-1
     READ JNK : READ JNK : READ JNK : READ JNK : READ NOCH
     FOR J=1 TO NOCH+1 : READ JNK$ : NEXT J
     NEXT I

     'Now we're at desired DATA line.
     READ JNK : READ JNK : READ JNK
     READ RIDX
     READ NOCH

     'DO FOR all chords in bar (including the bar line)
     FOR ICH=1 TO NOCH+1

     READ CHORD$
     'DEBUG PRINT "W,B,ICH,CHORD$=";W;B;ICH;CHORD$

     'BEGIN-CASE
     'CASE barline 
     IF NOT(LEFT$(CHORD$,1)="*") THEN 3830

     'IF single bar line
     IF NOT(MID$(CHORD$,1,2)<>"**") THEN 3590
     'Eliminate empty column before barline.  
     FOR I=1 TO 9 : STF$(I)=LEFT$(STF$(I),CURPOS-1) : NEXT I
     CURPOS=CURPOS-1
3590 'ENDIF
     IF INSTR(CHORD$,"A")>0 THEN GOSUB 4870 : CURPOS=CURPOS+1 :'Add repeat dots.
     GOSUB 4810 : CURPOS=CURPOS+1 :'Put in barline.  
     IF INSTR(CHORD$,"**")>0 THEN GOSUB 4810 : CURPOS=CURPOS+1 :'Add barline.

     'CASE1 ends with barline
     IF NOT(INSTR(CHORD$,"B")=0) THEN 3700
     IF CURPOSMAXPOS THEN BRKPT=PREVBRK : PVFL=-1 : GOSUB 4750 : CURPOS=CURPOS+1
     GOTO 3790
3700 'CASE2 ends with repeat sign 
     GOSUB 4870 : CURPOS=CURPOS+1 :'Add repeat dots.
     'BEGIN-CASE CURPOS relative to end of staff
     IF CURPOSMAXPOS+2 THEN BRKPT=PREVBRK : PVFL=-1 : GOSUB 4750 :CURPOS=CURPOS+1 :GOTO 3790
3790 'ENDCASE 
     PREVRHY=BARCODE
     GOTO 4470

3830 'CASE real chord data

     RHYCODE=RHYTHMS(RIDX,ICH)
     'debug PRINT "W,B,ICH,CHORD$,RHYCODE=";W;B;ICH;CHORD$,RHYCODE
     IF RHYCODE>=200 THEN RHYCODE=RHYCODE-200 : DNSTRUM=-1
     IF RHYCODE>=100 THEN RHYCODE=RHYCODE-100 : UPSTRUM=-1

     'BEGIN-CASE rhythm code

     'CASE rhythm code 9, no stem, no empty column
     IF NOT(RHYCODE=9) THEN 4030
     STF$(1)=STF$(1)+" "
     STF$(2)=STF$(2)+" "
     STF$(3)=STF$(3)+S3$
     GOSUB 5560 :'Load chord into staff.
     CURPOS=CURPOS+1
     IF CURPOS>MAXPOS THEN GOSUB 5710 :'Print out staff.  
     PREVRHY=9
     GOTO 4450

4030 'CASE rhythm code 0, 4er note
     IF NOT(RHYCODE=0) THEN 4170
     STF$(1)=STF$(1)+" "
     STF$(2)=STF$(2)+"|"
     STF$(3)=STF$(3)+S3$
     GOSUB 5560 :'Load chord into staff.
     GOSUB 5430 :'Put strum, if indicated.  
     CURPOS=CURPOS+1
     GOSUB 4750 :'Empty column.  
     CURPOS=CURPOS+1
     IF CURPOS>MAXPOS THEN GOSUB 5710 :'Print out staff.  
     PREVRHY=0 : PREVBRK=BRKPT : BRKPT=CURPOS
     GOTO 4450

4170 'CASE rhythm code 1, start 8th note
     IF NOT(RHYCODE=1) THEN 4280
     IF NOT(PREVRHY=10) THEN 4220
     IF CURPOS>MAXPOS THEN GOSUB 5710 :'Print out staff.  
     PREVBRK=BRKPT : BRKPT=CURPOS
4220 'ENDIF
     INBEAM$=" "
     GOSUB 4950 :'Start or continue group.
     PREVRHY=1
     GOTO 4450

4280 'CASE rhythm code 5, stop 8th note
     IF NOT(RHYCODE=5) THEN 4350
     INBEAM$=" "
     GOSUB 5160 :'Stop group.
     PREVRHY=5
     GOTO 4450

4350 'CASE rhythm code 10, dotted 4er
     IF NOT(RHYCODE=10) THEN 4450
     IF UPSTRUM THEN UPS10=-1
     INBEAM$="."
     GOSUB 4950 :'Start or continue group.
     MID$(STF$(1),LEN(STF$(1))-1,2)="  " :'Clobbers ^ arrowhead, if any.
     IF UPS10 THEN MID$(STF$(1),LEN(STF$(1))-1,1)="^" : UPS10=0
     GOSUB 4750 :'Empty column.  
     CURPOS=CURPOS+1
     PREVRHY=10 :'Whether or not this is a break point is handled by next code.
4450 'END-CASE rhythm codes

4470 'ENDCASE repeat, barline or chord

     NEXT ICH

     'Spin through remaining alternatives for this bar
     FOR I=ALTRNO+1 TO 11
     READ JNK : READ JNK : READ JNK : READ JNK : READ NOCH
     FOR J=1 TO NOCH+1 : READ JNK$ : NEXT J
     NEXT I

     NEXT B

     IF CURPOS1 THEN BRKPT=CURPOS : GOSUB 5710 :'Print out remainder.  

     NEXT W
     'ENDDO waltzes

     IF HTMLFL THEN PRINT #3, "
" CLOSE BEEP PRINT "TSTART= ";TSTART$ PRINT "TSTOP = ";TIME$ END 4750 'SUBROUTINE EMPTY_COL - add an empty column to staff FOR I=1 TO 2 : STF$(I)=STF$(I)+" " : NEXT I STF$(3)=STF$(3)+S3$ FOR I=4 TO 9 : STF$(I)=STF$(I)+L$ : NEXT I RETURN 4810 'SUBROUTINE BARLINE - put a barline in the staff FOR I=1 TO 2 : STF$(I)=STF$(I)+" " : NEXT I STF$(3)=STF$(3)+S3$ FOR I=4 TO 9 : STF$(I)=STF$(I)+"|" : NEXT I RETURN 4870 'SUBROUTINE REPEAT-DOTS - add a column with repeat dots FOR I=1 TO 2 : STF$(I)=STF$(I)+" " : NEXT I STF$(3)=STF$(3)+S3$ FOR I=4 TO 5 : STF$(I)=STF$(I)+L$ : NEXT I FOR I=6 TO 7 : STF$(I)=STF$(I)+"*" : NEXT I FOR I=8 TO 9 : STF$(I)=STF$(I)+L$ : NEXT I RETURN 4950 'SUBROUTINE RHYTHMS_123 - start or continue rhythm groups 'IF 16th follows dotted-8th THEN stretch out a space IF NOT(RHYCODE=2 AND PREVRHY=11) THEN 5020 GOSUB 4750 :'Empty column. MID$(STF$(1),LEN(STF$(1)),1)="_" CURPOS=CURPOS+1 5020 'ENDIF STF$(1)=STF$(1)+"_" STF$(2)=STF$(2)+"|" STF$(3)=STF$(3)+S3$ GOSUB 5560 :'Load chord into staff. CURPOS=CURPOS+1 GOSUB 5430 :'Put strum, if indicated. GOSUB 4750 :'Empty column. MID$(STF$(1),LEN(STF$(1)),1)="_" MID$(STF$(2),LEN(STF$(2)),1)=INBEAM$ CURPOS=CURPOS+1 RETURN 5160 'SUBROUTINE RHYTHMS_567 - finish off rhythm group IF NOT(PREVRHY=0 OR PREVRHY>=9) THEN 5220 GOSUB 4750 :'Add column. MID$(STF$(1),LEN(STF$(1)),1)="_" MID$(STF$(2),LEN(STF$(2)),1)=INBEAM$ CURPOS=CURPOS+1 5220 'ENDIF STF$(1)=STF$(1)+"_" STF$(2)=STF$(2)+"|" STF$(3)=STF$(3)+S3$ GOSUB 5560 :'Load chord into staff. CURPOS=CURPOS+1 'IF 5 follows 6, as in dotted 3/8 rhythm IF NOT(RHYCODE=5 AND PREVRHY=6) THEN 5340 MID$(STF$(1),LEN(STF$(1))-1,1)="_" :'Fill in upper beam. BRKPT=PREVBRK :'Not at the 16th. 5340 'ENDIF GOSUB 5430 :'Put strum, if indicated. GOSUB 4750 :'Empty column. CURPOS=CURPOS+1 IF CURPOS>MAXPOS THEN GOSUB 5710 :'Print out staff. PREVBRK=BRKPT : BRKPT=CURPOS RETURN 5430 'SUBROUTINE STRUM - put in arrowhead IF NOT(UPSTRUM) THEN 5510 IF NOT(RHYCODE=0 OR RHYCODE=10) THEN 5480 MID$(STF$(1),LEN(STF$(1)),1)="^" GOTO 5500 5480 'ELSE RHYTHMS WITH A BEAM MID$(STF$(3),LEN(STF$(3)),1)="^" 5500 'ENDIF 5510 'ENDIF up strum IF DNSTRUM THEN MID$(STF$(3),LEN(STF$(3)),1)="V" UPSTRUM=0 : DNSTRUM=0 RETURN 5560 'SUBROUTINE LOAD_CHORD - put fret nos. from single chord into the staff. LOWSTR=LEN(CHORD$) FOR JS=1 TO LOWSTR F$=MID$(CHORD$,JS,1) IF F$=" " THEN F$=L$ IF F$="#" THEN F$=CHR$(34) :'Trill (") handling specific to WSPIEL. STF$(JS+3)=STF$(JS+3)+F$ NEXT JS FOR JS=3+LOWSTR+1 TO 9 STF$(JS)=STF$(JS)+L$ NEXT JS RETURN 5710 'SUBROUTINE PRTSTAFF - print out the staff 'IF this staff will overflow page IF NOT(LINENO+9>62) THEN 5760 GOSUB 6140 :'Set up new page. 5760 'ENDIF FOR I=1 TO 2 PRINT #3, LEFT$(STF$(I),BRKPT);STRING$(MAXPOS-BRKPT," ") NEXT I PRINT #3, LEFT$(STF$(3),BRKPT);STRING$(MAXPOS-BRKPT,S3$) FOR I=4 TO 9 PRINT #3, LEFT$(STF$(I),BRKPT);STRING$(MAXPOS-BRKPT,L$) NEXT I PRINT #3, LINENO=LINENO+10 IF CURPOS=BRKPT THEN CURPOS=0 :RETURN :'Finished. Not structured, sorry. 'IF new staff doesn't start with bar, add empty column IF MID$(STF$(4),BRKPT+1,1)="|" THEN 6020 FOR I=1 TO 2 STF$(I)=" "+RIGHT$(STF$(I),CURPOS-BRKPT) NEXT I STF$(3)=S3$+RIGHT$(STF$(3),CURPOS-BRKPT) FOR I=4 TO 9 STF$(I)=L$+RIGHT$(STF$(I),CURPOS-BRKPT) NEXT I CURPOS=CURPOS-BRKPT+1 :' +1 for the added empty column. GOTO 6100 6020 'ELSE new staff starts with bar FOR I=1 TO 2 STF$(I)=RIGHT$(STF$(I),CURPOS-BRKPT) NEXT I FOR I=3 TO 9 STF$(I)=RIGHT$(STF$(I),CURPOS-BRKPT) NEXT I CURPOS=CURPOS-BRKPT 6100 'ENDIF RETURN 6140 'SUBROUTINE NEWPAGE - set up new page PAGENO=PAGENO+1 FOR I=LINENO+1 TO 66 PRINT #3, NEXT I PAGE$="Page"+STR$(PAGENO)+"." OFFST%=MAXPOS-LEN(PAGE$)-2 PRTLN$=SPACE$(OFFST%)+PAGE$ PRINT #3, PRTLN$ LINENO=1 RETURN 6280 'Rhythm codes: 0 = 4er; 1 = start 8th; 5 = stop 8th; 9 = no rhythm symbol. DATA 0 , 0 , 0 DATA 1 , 5 , 1 , 5 , 1 , 5 DATA 0 , 1 , 5 , 1 , 5 DATA 0 , 1 , 5 , 0 DATA 1 , 5 , 1 , 5 , 0 DATA 1 , 5 , 0 , 0 DATA 1 , 5 , 0 , 1 , 5 DATA 0 , 9 , 0 , 0 DATA 9 , 9 , 9 , 9 , 9 , 100 , 1 , 5 , 1 , 5 DATA 1 , 5 , 9 , 1 , 5 , 1 , 5 DATA 1 , 5 , 9 , 0 , 0 'Fields in the bar DATA: ' 1. Bar number (out of 17) within waltz. ' 2. Alternative number (out of 11) for that bar. ' 3. Original bar number (out of 176) in Musikalisches Wuerfelspiel. ' 4. Code specifying rhythms within bar. See above DATA statements. ' 5. No. of note groups (i.e., chords) in bar. ' 6... Note groups, followed by end bar-line descriptor. DATA 1 , 1 , 96 , 1 , 3 , " 2 0" , " 3" , " 2." , "*" DATA 1 , 2 , 32 , 1 , 3 , " 245" , " 3" , " 2 .." , "*" DATA 1 , 3 , 3 , 1 , 3 , "02 0" , " 3" , " 2 ." , "*" DATA 1 , 4 , 69 , 1 , 3 , "023 0" , " 2" , " 3 ." , "*" DATA 1 , 5 , 40 , 2 , 6 , " 3 0" , " 2" , " 3" , " 2" , " 2." , " 3" , "*" DATA 1 , 6 , 104 , 2 , 6 , " 2 0" , " 0" , " 2" , "0" , "5 ." , "0" , "*" DATA 1 , 7 , 148 , 2 , 6 , "52 0" , "4" , "5" , "0" , " 2 ." , " 3" , "*" DATA 1 , 8 , 152 , 3 , 5 , "023 0" , " 3" , " 2" , " 0 ." , " 3" , "*" DATA 1 , 9 , 119 , 2 , 6 , " 2 0" , " 3" , "0" , " 2" , "5 ." , "0" , "*" DATA 1 , 10 , 54 , 1 , 3 , " 3 45" , " 3 45" , " 3 45" , "*" DATA 1 , 11 , 98 , 2 , 6 , " 3 5" , " 4" , " 2 5" , " 4" , " 2 5" , " 4" , "*" DATA 2 , 1 , 22 , 1 , 3 , " 2 0" , " 3" , " 2." , "*" DATA 2 , 2 , 6 , 1 , 3 , " 245" , " 3" , " 2 .." , "*" DATA 2 , 3 , 142 , 1 , 3 , " 3 45" , " 2" , " 2 .." , "*" DATA 2 , 4 , 95 , 1 , 3 , "023 0" , " 2" , " 3 ." , "*" DATA 2 , 5 , 60 , 3 , 5 , "02 0" , " 3" , " 2" , " 0 ." , " 3" , "*" DATA 2 , 6 , 157 , 2 , 6 , " 2 0" , " 0" , " 2" , "0" , "5 ." , "0" , "*" DATA 2 , 7 , 84 , 2 , 6 , " 3 0" , " 2" , " 2" , " 3" , "0 ." , " 2" , "*" DATA 2 , 8 , 74 , 2 , 6 , "52 0" , "4" , "5" , "0" , " 2 ." , " 3" , "*" DATA 2 , 9 , 87 , 1 , 3 , "02 0" , " 3" , " 2 20" , "*" DATA 2 , 10 , 17 , 2 , 6 , " 324" , " 2" , " 3" , " 2" , " 2." , " 3" , "*" DATA 2 , 11 , 130 , 1 , 3 , " 3 45" , " 3 45" , " 3 45" , "*" DATA 3 , 1 , 128 , 1 , 3 , " 2 0" , " 0" , "0 ." , "*" DATA 3 , 2 , 165 , 1 , 3 , " 0 4" , " 2" , " 2 ." , "*" DATA 3 , 3 , 113 , 1 , 3 , " 32 0" , " 0" , " 2 ." , "*" DATA 3 , 4 , 158 , 3 , 5 , " 2 0" , " 0" , " 2" , " 0 ." , " 2" , "*" DATA 3 , 5 , 10 , 2 , 6 , " 2 0" , " 0" , " 2" , " 3" , " 5 ." , " 2" , "*" DATA 3 , 6 , 42 , 2 , 6 , " 2 0" , " 3" , " 5" , " 2" , " 0 ." , " 2" , "*" DATA 3 , 7 , 171 , 2 , 6 , " 2 0" , " 3" , " 0" , " 2" , " 3 4" , " 0" , "*" DATA 3 , 8 , 27 , 2 , 6 , " 322" , " 2" , " 3" , " 5" , " 3." , " 2" , "*" DATA 3 , 9 , 163 , 2 , 6 , "00 4" , " 4" , "0" , " 0" , " 2 ." , " 2" , "*" DATA 3 , 10 , 114 , 1 , 3 , " 022" , " 022" , " 022" , "*" DATA 3 , 11 , 141 , 2 , 6 , " 0 2 4" , " 2" , " 3" , " 0" , " 3 0" , " 2" , "*" DATA 4 , 1 , 13 , 1 , 3 , " 324" , " 2" , " 4" , "*" DATA 4 , 2 , 85 , 1 , 3 , " 3 45" , " 2" , " 2.." , "*" DATA 4 , 3 , 167 , 4 , 4 , " 3 45" , " 3" , " 0" , " 2 ." , "*" DATA 4 , 4 , 61 , 4 , 4 , " 324" , " 2" , " 3" , " 5 ." , "*" DATA 4 , 5 , 50 , 4 , 4 , " 324" , " 2" , " 3" , " 2." , "*" DATA 4 , 6 , 63 , 5 , 5 , " 2 0" , " 3" , " 2" , " 3" , " 2." , "*" DATA 4 , 7 , 103 , 5 , 5 , " 324" , " 2" , " 3" , " 2" , " 4" , "*" DATA 4 , 8 , 41 , 5 , 5 , " 3 0" , " 2" , " 3" , " 2" , " 2." , "*" DATA 4 , 9 , 156 , 5 , 5 , " 324" , " 2" , " 2" , " 3" , " 5 ." , "*" DATA 4 , 10 , 45 , 2 , 6 , " 324" , " 2" , " 3" , " 2" , " 4" , " 0" , "*" DATA 4 , 11 , 53 , 4 , 4 , " 23 0" , " 23" , " 35" , "02 ." , "*" DATA 5 , 1 , 80 , 8 , 4 , " 0 0" , " ~" , " 0" , " 4 ." , "*" DATA 5 , 2 , 99 , 1 , 3 , " 40 0" , "2" , " 00 0" , "*" DATA 5 , 3 , 154 , 2 , 6 , " 0 0" , " 4" , " 0" , " 4" , "2 ." , " 4" , "*" DATA 5 , 4 , 153 , 2 , 6 , " 0 0" , " 0" , " 4" , " 0" , "2 ." , " 4" , "*" DATA 5 , 5 , 140 , 4 , 4 , " 010" , " 010" , " 0" , " 40 0" , "*" DATA 5 , 6 , 105 , 3 , 5 , " 4540" , "2" , " 4" , " 0 ." , " 4" , "*" DATA 5 , 7 , 28 , 2 , 6 , " 40 0" , " 0" , " 0" , "2" , " 4 ." , " 0" , "*" DATA 5 , 8 , 161 , 1 , 3 , " 0 10" , " 0 10" , " 0 10" , "*" DATA 5 , 9 , 146 , 1 , 3 , " 00 0" , " 45 0" , "24 0" , "*" DATA 5 , 10 , 135 , 4 , 4 , " 45 0" , " 45 0" , " 0" , "20 0" , "*" DATA 5 , 11 , 75 , 1 , 3 , " 4540" , " 4540" , " 4540" , "*" DATA 6 , 1 , 55 , 1 , 3 , "00 4" , "4" , " 0 ." , "*" DATA 6 , 2 , 86 , 4 , 4 , " 0 2 4" , " 0" , "0" , "4 ." , "*" DATA 6 , 3 , 47 , 4 , 4 , "00 4" , "0" , " 0" , "4 ." , "*" DATA 6 , 4 , 2 , 3 , 5 , " 0 4" , " 6" , " 7" , " 6 ." , "0" , "*" DATA 6 , 5 , 68 , 3 , 5 , "00 4" , "4" , "0" , " 0 ." , "0" , "*" DATA 6 , 6 , 133 , 3 , 5 , " 0 2 4" , "0" , " 0" , " 2 ." , " 0" , "*" DATA 6 , 7 , 37 , 5 , 5 , "00 4" , "4" , "0" , " 0" , " 2 ." , "*" DATA 6 , 8 , 46 , 3 , 5 , "00 4" , "4" , "0" , " 0 ." , " 2" , "*" DATA 6 , 9 , 97 , 2 , 6 , "0 5 4" , " 4" , "0" , " 0" , " 2 ." , " 2" , "*" DATA 6 , 10 , 122 , 5 , 5 , "00 4" , " 4" , "00 4" , "4" , " 0 2 4" , "*" DATA 6 , 11 , 129 , 5 , 5 , "20 4" , "0" , " 45 4" , "0" , " 0 2 4" , "*" DATA 7 , 1 , 106 , 3 , 5 , " 0 0" , " 0 2" , " 3" , " 2 2" , " 0" , "*" DATA 7 , 2 , 134 , 2 , 6 , " 0 0" , " 2" , " 0 2" , " 3" , " 2 2" , " 0" , "*" DATA 7 , 3 , 169 , 2 , 6 , " 2 0" , "0" , " 0 2" , "0" , " 0 2" , " 4" , "*" DATA 7 , 4 , 147 , 2 , 6 , " 2 0" , "5" , "4 2" , "0" , "2 2" , " 4" , "*" DATA 7 , 5 , 21 , 2 , 6 , " 3 0" , " 2" , "0 2" , " 0" , " 0 2" , " 4" , "*" DATA 7 , 6 , 118 , 2 , 6 , " 2 0" , "2" , "0 2" , "4" , " 4 2" , "2" , "*" DATA 7 , 7 , 36 , 2 , 6 , " 0 0" , " 2" , " 0 2" , "0" , " 4 2" , "2" , "*" DATA 7 , 8 , 110 , 2 , 6 , " 02 0" , " 34" , " 322" , " 22" , " 2 2" , " 0" , "*" DATA 7 , 9 , 159 , 2 , 6 , " 2 0" , "0" , " 0 2" , " 3" , " 2 2" , " 0" , "*" DATA 7 , 10 , 11 , 2 , 6 , " 2 0" , " 3" , " 2 2" , " 0" , " 22" , " 1" , "*" DATA 7 , 11 , 62 , 2 , 6 , " 2 0" , " 3" , " 2 2" , " 2" , " 0 2" , " 1" , "*" DATA 8 , 1 , 0 , 9 , 10 , "1E" , "sn" , "td" , "" , "" , "002220" , " 2" , " 0" , " 4" , " 2" , "**A" DATA 8 , 2 , 0 , 0 , 1 , "0" , "*" DATA 8 , 3 , 0 , 0 , 1 , "0" , "*" DATA 8 , 4 , 0 , 0 , 1 , "0" , "*" DATA 8 , 5 , 0 , 0 , 1 , "0" , "*" DATA 8 , 6 , 0 , 0 , 1 , "0" , "*" DATA 8 , 7 , 0 , 0 , 1 , "0" , "*" DATA 8 , 8 , 0 , 0 , 1 , "0" , "*" DATA 8 , 9 , 0 , 0 , 1 , "0" , "*" DATA 8 , 10 , 0 , 0 , 1 , "0" , "*" DATA 8 , 11 , 0 , 0 , 1 , "0" , "*" 'Alternatives for measure 9 are just different fingerings for same notes. DATA 9 , 1 , 0 , 9 , 10 , "2E" , "nn" , "dd" , "" , "" , "002220" , " 2" , " 2" , " 1" , " 4" , "**B" DATA 9 , 2 , 0 , 0 , 1 , "0" , "*" DATA 9 , 3 , 0 , 9 , 10 , "2E" , "nn" , "dd" , "" , "" , "002220" , " 2" , " 2" , " 6" , " 4" , "**B" DATA 9 , 4 , 0 , 9 , 10 , "2E" , "nn" , "dd" , "" , "" , "002220" , " 6" , " 7" , " 6" , " 4" , "**B" DATA 9 , 5 , 0 , 0 , 1 , "0" , "*" DATA 9 , 6 , 0 , 0 , 1 , "0" , "*" DATA 9 , 7 , 0 , 0 , 1 , "0" , "*" DATA 9 , 8 , 0 , 0 , 1 , "0" , "*" DATA 9 , 9 , 0 , 0 , 1 , "0" , "*" DATA 9 , 10 , 0 , 0 , 1 , "0" , "*" DATA 9 , 11 , 0 , 0 , 1 , "0" , "*" DATA 10 , 1 , 35 , 1 , 3 , " 012" , " 0" , " 40 0" , "*" DATA 10 , 2 , 65 , 6 , 4 , " 0 12" , " 0" , " 0" , " 4 ." , "*" DATA 10 , 3 , 70 , 3 , 5 , " 4 2" , "2" , " 4" , " 0 0" , " 4" , "*" DATA 10 , 4 , 117 , 2 , 6 , " 0 12" , " 0" , " 0" , " 4" , "2 ." , " 4" , "*" DATA 10 , 5 , 25 , 2 , 6 , " 2" , " 1" , " 0" , " 0" , " 4 0" , "2" , "*" DATA 10 , 6 , 16 , 1 , 3 , "24 2" , " 45" , " 00 0" , "*" DATA 10 , 7 , 102 , 6 , 4 , " 40 0" , " 0" , " 0" , " 40 0" , "*" DATA 10 , 8 , 120 , 3 , 5 , "7 99 7" , " 7" , " 9" , " 0 0" , " 0" , "*" DATA 10 , 9 , 66 , 1 , 3 , " 40 2" , "24 2" , " 45 0" , "*" DATA 10 , 10 , 138 , 10 , 7 , " 40 2" , " 2" , " #" , " 4 1" , " 2" , " 0" , " 2" , "*" DATA 10 , 11 , 90 , 2 , 6 , " 40 0" , " 7" , "7" , " 7" , " 40 0" , "2" , "*" DATA 11 , 1 , 139 , 5 , 5 , "0 4" , "4" , "0" , "4" , " 0 ." , "*" DATA 11 , 2 , 4 , 11 , 5 , "0 0" , " 4" , " #" , " 52" , " 4" , "*" DATA 11 , 3 , 143 , 4 , 4 , "0 4" , " 0" , " 2" , " 2 4" , "*" DATA 11 , 4 , 121 , 4 , 4 , "0 2 4" , "4" , "0" , " 0 . ." , "*" DATA 11 , 5 , 20 , 4 , 4 , "00 4" , "4 ." , "7" , " 0" , "*" DATA 11 , 6 , 39 , 2 , 6 , "0 4" , " 2" , " 2" , " 2" , " 2 4" , " 0" , "*" DATA 11 , 7 , 77 , 6 , 4 , "00 4" , "4" , "0" , " 0 2 4" , "*" DATA 11 , 8 , 176 , 2 , 6 , "20 4" , "0" , "4" , "0" , " 0 4" , "0" , "*" DATA 11 , 9 , 155 , 2 , 6 , "00 4" , "4" , "0" , " 0" , " 2 ." , " 2" , "*" DATA 11 , 10 , 71 , 5 , 5 , "0 5 4" , "4" , "7" , "4" , "00 4" , "*" DATA 11 , 11 , 88 , 2 , 6 , "0 5 4" , " 0" , "0" , "4" , "0 5 4" , " 0" , "*" DATA 12 , 1 , 108 , 1 , 3 , " 2 20" , "0" , "52 0" , "*" DATA 12 , 2 , 15 , 4 , 4 , " 2 20" , "0" , " 2" , " 3 0" , "*" DATA 12 , 3 , 48 , 3 , 5 , " 2 20" , " 3" , " 2" , "0 0" , "5" , "*" DATA 12 , 4 , 19 , 6 , 4 , " 2 20" , " 3" , " 2" , "02 0" , "*" DATA 12 , 5 , 31 , 6 , 4 , " 2 20" , " 3" , " 2" , " 2 20" , "*" DATA 12 , 6 , 7 , 2 , 6 , " 2 20" , " 3" , " 2" , "0" , "5 .." , "0" , "*" DATA 12 , 7 , 26 , 2 , 6 , " 2 5" , " 4" , " 2 2" , " 4" , " 23" , " 0" , "*" DATA 12 , 8 , 57 , 2 , 6 , " 2 5" , " 4" , " 3 5" , " 4" , " 2 5" , " 4" , "*" DATA 12 , 9 , 150 , 10 , 7 , " 2 20" , " 4" , " #" , " 2 0" , " 2" , " 4" , " 1" , "*" DATA 12 , 10 , 126 , 2 , 6 , " 3 4" , " 2" , " 3" , " 2" , "0 4" , " 2 0" , "*" DATA 12 , 11 , 64 , 2 , 6 , " 2 20" , "0" , "5" , "0" , " 2 20" , " 3" , "*" DATA 13 , 1 , 56 , 6 , 4 , " 0 0" , " 2" , " 2" , " . 0" , "*" DATA 13 , 2 , 9 , 1 , 3 , " 23 0" , " 02" , " ..2" , "*" DATA 13 , 3 , 34 , 5 , 5 , " 2 0" , " 3" , " 0 ." , " 2" , " 2" , "*" DATA 13 , 4 , 29 , 5 , 5 , " 2 0" , " 0" , "0" , " 0" , " 2 0" , "*" DATA 13 , 5 , 175 , 5 , 5 , " 2 0" , " 3" , " 22" , " 0" , "0 ." , "*" DATA 13 , 6 , 166 , 5 , 5 , " 02 0" , "4" , "0" , " 0" , " 2 ." , "*" DATA 13 , 7 , 125 , 5 , 5 , "0 0" , " 2" , " 0" , " 2" , " 2 ." , "*" DATA 13 , 8 , 92 , 4 , 4 , " 022 0" , "0" , "4" , " 0 2 ." , "*" DATA 13 , 9 , 82 , 6 , 4 , " 0 2 4" , " 2" , " 2" , "00 4" , "*" DATA 13 , 10 , 164 , 2 , 6 , " 0 2 0" , " 1" , " 2" , " 2" , " . 4" , " 0" , "*" DATA 13 , 11 , 132 , 4 , 4 , " 23 0" , " 0 2 ." , " 2" , " 2" , "*" DATA 14 , 1 , 43 , 3 , 5 , "0 0" , " 3" , " 2" , " 0 ." , " 3" , "*" DATA 14 , 2 , 51 , 2 , 6 , " 3 0" , " 2" , " 2" , " 3" , "0 ." , " 2" , "*" DATA 14 , 3 , 67 , 2 , 6 , " 3 0" , " 2" , " 3" , " 2" , " 24" , " 3" , "*" DATA 14 , 4 , 12 , 1 , 3 , " 3 45" , " 3 45" , " 3 45" , "*" DATA 14 , 5 , 174 , 2 , 6 , " 2 5" , " 4" , " 3 5" , " 4" , " 2 5" , " 4" , "*" DATA 14 , 6 , 137 , 2 , 6 , " 3 5" , " 4" , " 2 5" , " 4" , " 2 5" , " 4" , "*" DATA 14 , 7 , 73 , 2 , 6 , "0 5" , " 4" , " 2 5" , " 4" , " 3 5" , " 4" , "*" DATA 14 , 8 , 112 , 2 , 6 , " 2 5" , " 4" , " 3 5" , " 4" , " 2 5" , " 4" , "*" DATA 14 , 9 , 144 , 2 , 6 , "0 5" , " 4" , " 3 5" , " 4" , " 2 5" , " 4" , "*" DATA 14 , 10 , 76 , 2 , 6 , "52 0" , "4" , "5" , "0" , " 2 0" , " 3" , "*" DATA 14 , 11 , 101 , 2 , 6 , " 2 20" , " 0" , " 2" , "0" , "52 0" , "0" , "*" DATA 15 , 1 , 18 , 1 , 3 , " 245" , " 3" , " 2 20" , "*" DATA 15 , 2 , 168 , 3 , 5 , "02 0" , " 3" , " 2" , " 0 24" , " 3" , "*" DATA 15 , 3 , 115 , 2 , 6 , " 3 0" , " 2" , " 2" , " 3" , "0 ." , " 2" , "*" DATA 15 , 4 , 160 , 2 , 6 , " 3 0" , " 2" , " 3" , " 2" , " 20" , " 3" , "*" DATA 15 , 5 , 136 , 2 , 6 , "52 0" , "4" , "5" , "0" , " 2 ." , " 3" , "*" DATA 15 , 6 , 124 , 1 , 3 , " 3 45" , " 3 45" , " 3 45" , "*" DATA 15 , 7 , 38 , 2 , 6 , " 3 5" , " 4" , " 2 5" , " 4" , " 2 5" , " 4" , "*" DATA 15 , 8 , 162 , 2 , 6 , " 2 20" , " 0" , " 2" , "0" , "52 0" , "0" , "*" DATA 15 , 9 , 58 , 2 , 6 , "0 5" , " 4" , " 2 5" , " 4" , " 3 5" , " 4" , "*" DATA 15 , 10 , 49 , 2 , 6 , " 2 5" , " 4" , " 3 5" , " 4" , " 2 5" , " 4" , "*" DATA 15 , 11 , 59 , 2 , 6 , "0 5" , " 4" , " 3 5" , " 4" , " 2 5" , " 4" , "*" DATA 16 , 1 , 1 , 1 , 3 , " 3 0" , " 0 2" , "0 2" , "*" DATA 16 , 2 , 149 , 6 , 4 , " 3 0" , " 0" , " 0" , " 22" , "*" DATA 16 , 3 , 44 , 3 , 5 , " 00" , " 3" , " 0" , " 0 0" , " 2" , "*" DATA 16 , 4 , 173 , 7 , 5 , " 3 0" , "2" , " 0." , " 22" , " 0" , "*" DATA 16 , 5 , 52 , 2 , 6 , " 0 0" , " 4" , " 0" , " 3" , " 2 0" , " 2" , "*" DATA 16 , 6 , 89 , 6 , 4 , " 3 0" , " 2 4" , " 0 2" , "0 2" , "*" DATA 16 , 7 , 145 , 2 , 6 , " 0 0" , " 3" , " 0" , " 0" , " 22" , " 0" , "*" DATA 16 , 8 , 72 , 2 , 6 , " 3 0" , " 2" , " 0" , " 3" , " 22" , " 0" , "*" DATA 16 , 9 , 116 , 2 , 6 , " 0 0" , " 3" , "2" , " 3" , " 0 2" , " 2" , "*" DATA 16 , 10 , 109 , 2 , 6 , " 000" , " 3" , " 0" , " 3" , " 22" , " 0" , "*" DATA 16 , 11 , 23 , 2 , 6 , " 3 0" , " 2 4" , " 0 2" , " 2 4" , " 3 0" , "0 2" , "*" DATA 17 , 1 , 8 , 1 , 3 , " 3 0" , " 0" , " 0" , "**A" DATA 17 , 2 , 14 , 1 , 3 , " 3 0" , " 0" , " 0" , "**A" DATA 17 , 3 , 78 , 1 , 3 , " 3 0" , " 0" , " 0" , "**A" DATA 17 , 4 , 79 , 1 , 3 , " 3 0" , " 0" , " 0" , "**A" DATA 17 , 5 , 83 , 1 , 3 , " 3 0" , " 0" , " 0" , "**A" DATA 17 , 6 , 93 , 1 , 3 , " 3 0" , " 0" , " 0" , "**A" DATA 17 , 7 , 111 , 1 , 3 , " 3 0" , " 0" , " 0" , "**A" DATA 17 , 8 , 131 , 1 , 3 , " 3 0" , " 0" , " 0" , "**A" DATA 17 , 9 , 151 , 1 , 3 , " 3 0" , " 0" , " 0" , "**A" DATA 17 , 10 , 170 , 1 , 3 , " 3 0" , " 0" , " 0" , "**A" DATA 17 , 11 , 172 , 1 , 3 , " 3 0" , " 0" , " 0" , "**A" 8370 'Last line.