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 ;