options.src



  ( Some MIDI interface program words. )

  ( SET TRANSPOSE VECTOR SET_TRANSP_VECT )

   : SET_TRANSP_VECT
	RX_VECTOR @ DUP
	  ['] RX_INT_HNDLR 02 + = SWAP
	  ['] RE_RX_INT_HNDLR 2+ = OR
	IF RX_VECTOR @ RX_TRANSP_NEXT !
	   ['] TRANSPOSE_RX 2+ RX_VECTOR !
	ELSE RX_VECTOR @ ['] CHANGE_RX_CHANNEL 2 + =
	IF CHNG_CHAN_NEXT @ RX_TRANSP_NEXT !
	   ['] TRANSPOSE_RX 2+ CHNG_CHAN_NEXT !
	ELSE ['] RX_INT_HNDLR 02 + RX_TRANSP_NEXT !
	   ['] TRANSPOSE_RX 2+ RX_VECTOR !
	THEN THEN
   ;


  ( SET CHANNEL CHANGE VECTOR SET_CHAN_CHNG_VECT )

   : SET_CHAN_CHNG_VECT
	RX_VECTOR @ DUP
	  ['] RX_INT_HNDLR 02 + = SWAP
	  ['] RE_RX_INT_HNDLR 2+ = OR
	IF RX_VECTOR @ CHNG_CHAN_NEXT !
	   ['] CHANGE_RX_CHANNEL 2+ RX_VECTOR !
	ELSE RX_VECTOR @ ['] TRANSPOSE_RX 2 + =
	IF RX_TRANSP_NEXT @ CHNG_CHAN_NEXT !
	   ['] CHANGE_RX_CHANNEL 2+ RX_TRANSP_NEXT !
	ELSE ['] RX_INT_HNDLR 02 + CHNG_CHAN_NEXT !
	   ['] CHANGE_RX_CHANNEL 2+ RX_VECTOR !
	THEN THEN
   ;


  ( RESET_TIME )

  : RESET_TIME
	NORMAL_SPEED VAR_TIME_BASE ! 64 NOW_TIME !
	0C 14 GOTOXY 
    ASCIIZ" SPEED SET TO NORMAL - PRESS ANY KEY TO CONTINUE " PR_ASCZ
	KEY 0= IF KEY DROP THEN
  ;


  : SET_TIME
	0C 14 GOTOXY
  ASCIIZ" ENTER % OF NORMAL SPEED (50 to 200) - " PR_ASCZ
	0C 27 + 14 GOTOXY
	3 GET_NUMBER
	DEPTH 0 <> IF
	DUP DUP 0C9 < SWAP 31 > AND
	  IF NOW_TIME !      
	  NORMAL_SPEED 64 NOW_TIME @ */
	  VAR_TIME_BASE !
	  0C 15 GOTOXY
   ASCIIZ" SPEED SET TO " PR_ASCZ
	  0C 0E + 15 GOTOXY
	  DECIMAL NOW_TIME @ . HEX
   ASCIIZ" % OF NORMAL. " PR_ASCZ
	ELSE DROP 0C 15 GOTOXY
	INVALID_ENTRY
	THEN
        0C 16 GOTOXY
	ANY_KEY
	THEN
   ;

 
  ( TRANSPOSE_ALL )

  : TRANSPOSE_ALL
	0C 14 GOTOXY
   ASCIIZ" ENTER THE TRANSPOSITION INTERVAL - " PR_ASCZ
	0C 24 + 14 GOTOXY
	3 GET_NUMBER
	DEPTH 0 <>
     	IF
	 DUP DUP -80 > SWAP 80 < AND
	IF
	  80 LO_SPLIT C! 
	  LO_DELTA !
	  0 LO_TRANSP_FLAG !
	  0 HI_TRANSP_FLAG !
	  -1 ALL_TRANSP_FLAG !
	  SET_TRANSP_VECT
	  0C 15 GOTOXY
  ASCIIZ" ALL INPUT TRANSPOSED - INTERVAL = " PR_ASCZ
	  0C 23 + 15 GOTOXY
	  DECIMAL LO_DELTA @ . HEX
	ELSE DROP 0C 15 GOTOXY
	ANY_KEY
	THEN
        0C 16 GOTOXY
	ANY_KEY
	THEN
   ;


 
  ( TRANSPOSE_BELOW )

  : TRANSPOSE_BELOW
	0C 13 GOTOXY
   ASCIIZ" ENTER THE NOTE NUMBER TO TRANSPOSE ON OR BELOW - " PR_ASCZ
	0C 32 + 13 GOTOXY
	3 GET_NUMBER
	DEPTH 0 <> IF
	  DUP DUP -1 > SWAP 80 < AND
        IF
	TEMP_VAR !
	0C 14 GOTOXY
   ASCIIZ" ENTER THE TRANSPOSITION INTERVAL - " PR_ASCZ
	0C 24 + 14 GOTOXY
	3 GET_NUMBER
	DEPTH 0 <>
     	IF
	 DUP DUP -80 > SWAP 80 < AND
	IF
	  LO_DELTA !
	  TEMP_VAR @ LO_SPLIT C!
	  0 ALL_TRANSP_FLAG !
	  -1 LO_TRANSP_FLAG !
	  SET_TRANSP_VECT
	  0C 15 GOTOXY
  ASCIIZ" INPUT ON OR BELOW NOTE NUMBER - " PR_ASCZ
	  0C 24 + 15 GOTOXY
	  LO_SPLIT C@ DECIMAL . HEX
  ASCIIZ" TRANSPOSED. INTERVAL = " PR_ASCZ
	  0C 3C + 15 GOTOXY
	  DECIMAL LO_DELTA @ . HEX
	ELSE DROP 0C 15 GOTOXY
	INVALID_ENTRY
	THEN 
	THEN
	ELSE DROP 0C 15 GOTOXY
	INVALID_ENTRY
	THEN
        0C 16 GOTOXY
	ANY_KEY
	THEN
   ;

 
  ( TRANSPOSE_ABOVE )

  : TRANSPOSE_ABOVE
	0C 13 GOTOXY
   ASCIIZ" ENTER THE NOTE NUMBER TO TRANSPOSE ABOVE - " PR_ASCZ
	0C 2C + 13 GOTOXY
	3 GET_NUMBER
	DEPTH 0 <> IF
	  DUP DUP -1 > SWAP 80 < AND
        IF
	TEMP_VAR !
	0C 14 GOTOXY
   ASCIIZ" ENTER THE TRANSPOSITION INTERVAL - " PR_ASCZ
	0C 24 + 14 GOTOXY
	3 GET_NUMBER
	DEPTH 0 <>
     	IF
	 DUP DUP -80 > SWAP 80 < AND
	IF
	  HI_DELTA !
	  TEMP_VAR @ HI_SPLIT C!
	  0 ALL_TRANSP_FLAG !
	  -1 HI_TRANSP_FLAG !
	  SET_TRANSP_VECT
	  0C 15 GOTOXY
  ASCIIZ" INPUT ABOVE NOTE NUMBER - " PR_ASCZ
	  0C 1E + 15 GOTOXY
	  HI_SPLIT C@ DECIMAL . HEX
  ASCIIZ" TRANSPOSED. INTERVAL = " PR_ASCZ
	  0C 36 + 15 GOTOXY
	  DECIMAL HI_DELTA @ . HEX
	ELSE DROP 0C 15 GOTOXY
	INVALID_ENTRY
	THEN 
	THEN
	ELSE DROP 0C 15 GOTOXY
	INVALID_ENTRY
	THEN
        0C 16 GOTOXY
	ANY_KEY
	THEN
   ;

 
  ( CHANGE_CHANNEL )

  : CHANGE_CHANNEL
	0C 13 GOTOXY
   ASCIIZ" ENTER THE CHANNEL NUMBER TO CHANGE FROM - " PR_ASCZ
	0C 2C + 13 GOTOXY
	3 GET_NUMBER
	DEPTH 0 <> IF 1 -
	  DUP DUP -1 > SWAP 10 < AND
        IF
	TEMP_VAR !
	0C 14 GOTOXY
   ASCIIZ" ENTER THE CHANNEL NUMBER TO CHANGE TO - " PR_ASCZ
	0C 29 + 14 GOTOXY
	3 GET_NUMBER
	DEPTH 0 <>
     	IF 1 -
	 DUP DUP -1 > SWAP 10 < AND
	IF
	  TRACK_TO C!
	  TEMP_VAR @ TRACK_FROM C!
	  -1 CHN_CHNG_FLAG !
	  SET_CHAN_CHNG_VECT
	  0C 15 GOTOXY
  ASCIIZ" CHANNEL NUMBER - " PR_ASCZ
	  0C 11 + 15 GOTOXY
	  TRACK_FROM C@ 1+ DECIMAL . HEX
  ASCIIZ" WILL BE CHANGED TO " PR_ASCZ
	  0C 26 + 15 GOTOXY
	  DECIMAL TRACK_TO C@ 1+ . HEX
	ELSE DROP 0C 15 GOTOXY
	INVALID_ENTRY THEN
	THEN
	ELSE DROP 0C 15 GOTOXY
	INVALID_ENTRY
	THEN
        0C 16 GOTOXY
	ANY_KEY
	THEN
   ;

  : SET_SYNC 
	0C 14 GOTOXY
 ASCIIZ" ENTER THE TEMPO BEATS PER MINUTE (20 TO 280, 0 TO CLEAR) - " PR_ASCZ
	0C 3B + 14 GOTOXY
	3 GET_NUMBER
	DEPTH 0 <>
     	IF
	DUP 0= IF 0 SYNC_EN_FLAG ! THEN
	 DUP DUP 13 > SWAP 119 < AND
	IF
	  DUP BPM ! 
	  DUP 29 < IF 4 SYNC_CMP !
	  ELSE DUP 51 < IF 2 SYNC_CMP !
	  ELSE 1 SYNC_CMP !  THEN THEN 
	DROP
	  0FF SYNC_EN_FLAG !
	  1388 3E8 UM* ( = DEC 5,000,000 )
	  BPM @ SYNC_CMP @ * UM/MOD
	  HARD_DIV ! DROP
	0C 15 GOTOXY
  ASCIIZ" RECORD THE TEMPO CLOCK? (Y/N) - " PR_ASCZ
	  0C 23 + 15 GOTOXY
	KEY DUP 0= IF KEY DROP THEN
	DUP ASCII Y = SWAP ASCII y = OR
	IF 0FF REC_SYNC ! ELSE 0 REC_SYNC ! THEN
    ELSE DROP 0C 15 GOTOXY
	INVALID_ENTRY
	THEN
        0C 16 GOTOXY
	ANY_KEY
	THEN
   ;



  ( OPTIONS_MENU )
   HEX
  : OPTIONS_MENU 0 OP_DONE_FLAG !
     BEGIN ( UNTIL )
        CLS DRAW_BORDER
	0A 2 GOTOXY
   	ASCIIZ" SPEED - " PR_ASCZ 0A 9 + 2 GOTOXY
	DECIMAL NOW_TIME @ . HEX 25 EMIT
	ALL_TRANSP_FLAG @ IF
	 0A 3 GOTOXY
	ASCIIZ" ALL INPUT TRANSPOSED - INTERVAL = " PR_ASCZ
	 0A 23 + 3 GOTOXY
	 LO_DELTA @ DECIMAL . HEX
	  THEN
	LO_TRANSP_FLAG @ IF
	 0A 3 GOTOXY
       ASCIIZ" INPUT ON OR BELOW NOTE NUMBER " PR_ASCZ
	 0A 1E + 3 GOTOXY LO_SPLIT C@ DECIMAL . HEX
       	ASCIIZ" TRANSPOSED.  INTERVAL = " PR_ASCZ
	 0A 3C + 3 GOTOXY LO_DELTA @ DECIMAL . HEX
	 THEN
	HI_TRANSP_FLAG @ IF
	 0A 4 GOTOXY
       ASCIIZ" INPUT ABOVE NOTE NUMBER " PR_ASCZ
	 0A 18 + 4 GOTOXY HI_SPLIT C@ DECIMAL . HEX
       	ASCIIZ" TRANSPOSED.  INTERVAL = " PR_ASCZ
	 0A 36 + 4 GOTOXY HI_DELTA @ DECIMAL . HEX
	 THEN
	CHN_CHNG_FLAG @ IF
	 0A 5 GOTOXY
       ASCIIZ" INPUT CHANNEL NUMBER " PR_ASCZ
	 0A 15 + 5 GOTOXY TRACK_FROM C@ 1+ DECIMAL . HEX
       	ASCIIZ" WILL BE CHANGED TO = " PR_ASCZ
	 0A 30 + 5 GOTOXY TRACK_TO C@ 1+ DECIMAL . HEX
	 THEN
        FWHITE C@ PR_COLOR !
	SYNC_EN_FLAG @ 0 <> IF 0A 6 GOTOXY
	ASCIIZ" TEMPO CLOCK ON - " PR_ASCZ
	0A 11 + 6 GOTOXY DECIMAL BPM @ . HEX
	0A 16 + 6 GOTOXY
	REC_SYNC @ 0 <> IF
	ASCIIZ" WILL BE RECORDED " PR_ASCZ
	ELSE ASCIIZ" WILL NOT BE RECORDED " PR_ASCZ
	 THEN THEN
        1F 7 GOTOXY
        ASCIIZ" SET OPTIONS " PR_ASCZ
        0A DUP 8 GOTOXY
        ASCIIZ" 0 - RETURN TO PREVIOUS MENU " PR_ASCZ
-->

 ( CONTINUATION OF OPTIONS_MENU )

        DUP 9 GOTOXY
        ASCIIZ" 1 - TRANSPOSE ALL INPUT " PR_ASCZ
        DUP 0A GOTOXY
        ASCIIZ" 2 - TRANSPOSE INPUT BELOW SPLIT " PR_ASCZ
        DUP 0B GOTOXY
      ASCIIZ" 3 - TRANSPOSE INPUT ABOVE SPLIT " PR_ASCZ
        DUP 0C GOTOXY
     ASCIIZ" 4 - CHANGE INPUT CHANNEL NUMBER " PR_ASCZ
        DUP 0D GOTOXY
    ASCIIZ" 5 - CHANGE ODD NUMBER NOTE INPUT CHANNEL NUMBER " PR_ASCZ
        DUP 0E GOTOXY
  ASCIIZ" 6 - CHANGE PLAYBACK SPEED " PR_ASCZ
  -->

 ( CONT. OF OPTIONS_MENU )

        DUP 0F GOTOXY
        ASCIIZ" 7 - RESTORE NORMAL PLAYBACK SPEED " PR_ASCZ
	10 GOTOXY
	ASCIIZ" 8 - SET TEMPO CLOCK " PR_ASCZ
        0A DUP 12 GOTOXY
        ASCIIZ" PRESS THE NUMBER OF YOUR CHOICE " PR_ASCZ
        21 + 12 GOTOXY
        KEY DUP 0= IF ?TERMINAL IF KEY DROP THEN THEN
        30 - 
     CASE
        0 OF -1 OP_DONE_FLAG ! ENDOF
        1 OF TRANSPOSE_ALL ENDOF
        2 OF TRANSPOSE_BELOW ENDOF
        3 OF TRANSPOSE_ABOVE ENDOF

 -->
  ( CONT. OF OPTIONS_MENU )

        4 OF CHANGE_CHANNEL ENDOF
        5 OF NOOP ENDOF
        6 OF SET_TIME ENDOF
        7 OF RESET_TIME ENDOF
	8 OF SET_SYNC ENDOF
            07 EMIT
     ENDCASE
        OP_DONE_FLAG @
   UNTIL ;