home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / MBUG / MBUG124.ARC / 12TONE.BAS < prev    next >
BASIC Source File  |  1979-12-31  |  4KB  |  117 lines

  1. 1    REM ****************************************************
  2. 2    REM                12 TONE ROW GENERATOR
  3. 3    REM                   BY DANIEL KAAN
  4. 4    REM    NEW VERSION 1.2 WITH IMPROVED INPUT AND OUTPUT
  5. 5    REM ****************************************************
  6. 10   CL$=CHR$(26)        :REM *******   CLEARSCREEN   *******
  7. 20   BEL$=CHR$(7)        :REM *******   SOUND BUZZER  *******
  8. 30   CR$=CHR$(13)        :REM *******   CARRIAGE RETURN *****
  9. 40   DIM A(12)           :REM *******   TONE ROW      *******
  10. 50   DIM NOTE$(12)       :REM *******   INPUT STRINGS *******
  11. 60   DIM B(11)
  12. 70   GOSUB 3000
  13. 100  REM *******   CALCULATE MATRIX   *******
  14. 110  FOR N=1 TO 11:B(N)=A(N)-A(N+1):NEXT N
  15. 120  GOSUB 1000
  16. 130  FOR F=1 TO 11
  17. 140      K=A(1)+B(F)
  18. 150      FOR M=1 TO 11
  19. 160          GOSUB 2000
  20. 170          A(M)=K
  21. 180          K=A(M)-B(M)
  22. 190      NEXT M
  23. 200       GOSUB 2000
  24. 210      A(12)=K
  25. 220      GOSUB 1000
  26. 230  NEXT F
  27. 240  PRINT TAB(77);"^"
  28. 250  PRINT TAB(77);"|"
  29. 260  PRINT TAB(63);"<--- Retrogrades"
  30. 270  PRINT:PRINT
  31. 280  IF P=1 THEN LPRINT TAB(77);"^"
  32. 290  IF P=1 THEN LPRINT TAB(77);"|"
  33. 300  IF P=1 THEN LPRINT TAB(63);"<--- Retrogrades"
  34. 310  PRINT "More? ([Y]/N)";
  35. 320  Y$=INKEY$:IF Y$="" OR (Y$<>"Y" AND Y$<>"y" AND Y$<>"N" AND Y$<>"n" AND Y$<>CR$) THEN GOTO 320
  36. 330  IF Y$="Y" OR Y$="y" OR Y$=CR$ THEN RUN
  37. 340  END
  38. 1000 REM *******   print A(1-12)   *******
  39. 1010 IF P=1 THEN LPRINT:LPRINT TAB(15);
  40. 1020 PRINT TAB(15)
  41. 1030 FOR N=1 TO 12
  42. 1040    FOR M=1 TO A(N)
  43. 1050        READ C$,DUMMY$
  44. 1060    NEXT M
  45. 1070    RESTORE
  46. 1080 PRINT C$;"  ";:IF P=1 THEN LPRINT C$;"  ";
  47. 1090 NEXT N
  48. 1100 PRINT:IF P=1 THEN LPRINT
  49. 1110 RETURN
  50. 2000 REM *******   convert number (K) to range 1 - 12   *******
  51. 2010 IF K<1 THEN LET K=K+12
  52. 2020 IF K>12 THEN LET K=K-12
  53. 2030 IF K<1 OR K>12 THEN GOTO 2000
  54. 2040 RETURN
  55. 3000 REM *******   Initialise   *******
  56. 3010 PRINT CL$
  57. 3020 PRINT "This programme prints tone-rows."
  58. 3030 PRINT
  59. 3040 PRINT "Enter the prime row by entering the notes in order."
  60. 3050 PRINT "The programme will then calculate a matrix which is read"
  61. 3060 PRINT "left to right for the prime row and its transpositions,"
  62. 3070 PRINT "right to left for retrograde and its transpositions,"
  63. 3080 PRINT "top to bottom for inversion and its transpositions, and"
  64. 3090 PRINT "bottom to top for retrograde inversion and its transpositions."
  65. 3100 PRINT
  66. 3110 PRINT "Please enter the 12 notes, following each with RETURN."
  67. 3120 PRINT
  68. 3130 PRINT "Use RETURN only to see notes available."
  69. 3140 PRINT
  70. 3150 PRINT "Use only # signs as no flat is available."
  71. 3160 PRINT
  72. 3170 FOR N=1 TO 12
  73. 3180    PRINT "NOTE"N"IS";:INPUT NOTE$(N)
  74. 3190    IF NOTE$(N)="" THEN PRINT:GOSUB 4000:GOTO 3180
  75. 3200    IF LEN(NOTE$(N))=1 THEN LET NOTE$(N)=NOTE$(N)+" "
  76. 3210    A(N)=0
  77. 3220    RESTORE
  78. 3230      FOR P=1 TO 12
  79. 3240        READ ROW$,LOW$
  80. 3250        IF (NOTE$(N)=ROW$ OR NOTE$(N)=LOW$) THEN LET A(N)=P
  81. 3260    NEXT P
  82. 3270      IF A(N)=0 THEN PRINT:PRINT BEL$;"Note not recognised":PRINT "Please try again.":GOSUB 4000:GOTO 3180
  83. 3280      RESTORE
  84. 3290      IF N=1 THEN GOTO 3330
  85. 3300      FOR M=1 TO N-1
  86. 3310        IF A(M)=A(N) THEN PRINT:PRINT BEL$;"You have already used ";NOTE$(N):PRINT "Please try again.":GOSUB 4000:GOTO 3180
  87. 3320    NEXT M
  88. 3330 NEXT N
  89. 3340 PRINT 
  90. 3350 PRINT "Do you want output to Printer or Terminal? (P/[T])";
  91. 3360 P$=INKEY$:IF P$="" OR (P$<>CR$ AND P$<>"P" AND P$<>"p" AND P$<>"T" AND P$<>"t") THEN GOTO 3360
  92. 3370 IF P$="P" OR P$="p" THEN LET P=1 ELSE LET P=0
  93. 3380 PRINT CL$
  94. 3390 IF P=1 THEN LPRINT TAB(29);"TONE ROW GENERATOR":LPRINT:LPRINT
  95. 3400 IF P=1 THEN LPRINT "Row & Transpositions --->"
  96. 3410 IF P=1 THEN LPRINT "Inversion & Transpositions":LPRINT "|":LPRINT "v"
  97. 3420 PRINT TAB(29);"TONE ROW GENERATOR":PRINT:PRINT "Row & Transpositions --->"
  98. 3430 PRINT "Inversion & Transpositions":PRINT "|":PRINT "v"
  99. 3440 RETURN
  100. 4000 REM *******   Input error routine   *******
  101. 4010 PRINT "The following notes are available:"
  102. 4020 RESTORE
  103. 4030 FOR Q=1 TO 12
  104. 4040    READ Q$,DUMMY$
  105. 4050      S=0
  106. 4060      FOR R=1 TO 12
  107. 4070        IF A(R)=Q THEN GOTO 4090
  108. 4080        S=S+1
  109. 4090    NEXT R
  110. 4100    IF S=12 THEN PRINT Q$;" ";
  111. 4110 NEXT Q
  112. 4120 PRINT
  113. 4130 RETURN
  114. 5000 DATA "A ","a ","A#","a#","B ","b ","C ","c ","C#","c#","D ","d "
  115. 5010 DATA "D#","d#","E ","e ","F ","f ","F#","f#","G ","g ","G#","g#"
  116. "a ","A#","a#","B ","b ","C ","c ","C#","c#","D ","d "
  117. 5010 DATA "D#","d#