PROGRAM_NAME='SAMPLE AMX CODE FOR DISC LIBRARY OR MUSIC LIBRARY' (* DATE:09/22/05 TIME:00:00:30 *) (***********************************************************) (* DEVICE NUMBER DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_DEVICE IRS1 = 1 (* IR/S CARD THAT CONTROLS LEXICON MC-12 IN HOME THEATER *) LIBRARY = 5 (* RS-232 CARD THAT INTERFACES WITH DISC/MUSIC LIBRARY *) FLD = 6 (* RS-232 CARD THAT CONTROLS THE FAROUDJA VP250 LINE DOUBLER *) MTP = 128 (* AXU-MTP ON AXLINK *) MLCD = 129 (* AXU-MLCD ON AXLINK *) VPT = 131 (* VPT-GS ON AXLINK *) (***********************************************************) (* CONSTANT DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_CONSTANT (* IRS1 CHANNEL DEFINITIONS *) (* ... *) DXS = 22 (* DMX/CD LIBRARY (AUX ON LEXICON MC-12) *) (* ... *) (* FAROUDJA VP250 INPUT DEFINITIONS *) (* ... *) DXS_VIDEO = 2 (* ... *) (* MTP/VPT CHANNEL DEFINITIONS *) (* ... *) CD_TRACK = 41 (* ... *) (* MTP PAGE DEFINITIONS *) (* ... *) SAT_RADIO_PAGE = 5 (* ... *) CD_LIBRARY_PAGE = 7 (* ... *) CD_LIB_TRACK_LIST_PAGE = 15 CD_LIB_ALBUM_TITLES_PAGE = 16 CD_LIB_PERFORMERS_PAGE = 17 CD_LIB_COMPOSERS_PAGE = 18 SAT_RADIO_MORE_PAGE = 19 CD_LIB_MORE_PAGE = 20 (* ... *) (* DISC/MUSIC LIBRARY DEFINITIONS *) LOAD_PAUSED = '720898' LOAD_AND_PLAY = '720899' DISC_TRACK_PAUSE = '720900' DISC_TRACK_PLAY = '720901' TRACK = '720909' STOP = '720910' PAUSE = '720911' PLAY = '720912' PREVIOUS_TRACK = '720913' REVERSE_SCAN = '720914' FORWARD_SCAN = '720915' NEXT_TRACK = '720916' PREVIOUS_DISC = '720917' NEXT_DISC = '720918' MODE = '720919' START_PLAYLIST_PAUSED = '720923' START_PLAYLIST = '720924' RUN_PLAYLIST_STEP = '720925' END_REVERSE_SCAN = '720930' END_FORWARD_SCAN = '720931' UNLOADED = 0 STOPPED = 1 PAUSED = 2 PLAYING = 3 DISC_STATS = 4 TRACK_START = 5 TRACK_ELAPSED = 6 BASE_STATE = 0 FAST_REV_DOWN = 1 FAST_FWD_DOWN = 2 (* THE FOLLOWING INCLUDE FILE IS PRODUCED BY THE make_files UTILITY *) INCLUDE 'DL_SIZES.AXI' (* FOR MUSIC LIBRARY, CHANGE TO 'ML_SIZES.AXI' *) BLANKS = ' ' (* STRING OF 32 SPACES *) (***********************************************************) (* VARIABLE DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_VARIABLE (* AUDIO/VIDEO SYSTEM CONSTANT ARRAYS *) MTP_PAGE[25][20] (* DISC/MUSIC LIBRARY CONSTANT ARRAYS *) (* FOR MUSIC LIBRARY, CHANGE TO DISCLIB_ TO MUSICLIB_ IN THESE NAMES *) DISCLIB_ALBUM_NAME[LAST_ALBUM][37] DISCLIB_PERFORMER_NAME[LAST_PERFORMER][37] DISCLIB_COMPOSER_NAME[LAST_COMPOSER][37] INTEGER DISCLIB_ALBUM_KEY[LAST_ALBUM] INTEGER DISCLIB_PERFORMER_KEY[LAST_PERFORMER] INTEGER DISCLIB_COMPOSER_KEY[LAST_COMPOSER] (* DISC/MUSIC LIBRARY SERIAL INTERFACE BUFFERS *) LIBRARY_BUFFER[255] LIBRARY_STRING[64] (* AUDIO/VIDEO SYSTEM VARIABLE ARRAYS *) PREV_PAGE[24] LIBRARY_LINE1[16] LIBRARY_LINE2[16] DMX_TITLE[32] DMX_ARTIST[32] DMX_COMPOSER[32] DMX_ID[3] LIBRARY_ALBUM_TITLE[32] LIBRARY_ALBUM_ARTIST[32] LIBRARY_TRACK_TITLE[32] LIBRARY_TRACK_LIST[99][32] (* TEMPORARY WORK STRINGS *) TEMPSTR[8] WORKBFR[255] WORKSTR[2] (* DISC/MUSIC LIBRARY SERIAL INTERFACE VARIABLES *) LIBRARY_END LIBRARY_STATE CURRENT_PLAYER (* PHYSICAL *) CURRENT_DISC (* PHYSICAL *) FIRST_TRACK (* PHYSICAL *) CURRENT_TRACK_INDEX (* LOGICAL *) HIGH_TRACK_INDEX (* LOGICAL *) LAST_TRACK_INDEX (* LOGICAL *) KEYPAD_MODE DXS_LR DXS_MBR (* MTP KEYPAD/DISPLAY STATE VARIABLES *) CURRENT_PAGE INFO_INDEX VPT_STRING VPT_VALUE (* AUDIO/VIDEO SYSTEM STATE VARIABLES *) CURRENT_LEX DMX_CC DMX_CHANNEL (* AUDIO/VIDEO SYSTEM WORK VARIABLES *) N P VALUE (***********************************************************) (* LATCHING DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_LATCHING (***********************************************************) (* MUTUALLY EXCLUSIVE DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_MUTUALLY_EXCLUSIVE (***********************************************************) (* DEFINE CALLS *) (***********************************************************) DEFINE_CALL 'INIT_LIBRARY_ARRAYS' { (* THE FOLLOWING INCLUDE FILE IS PRODUCED BY THE make_files UTILITY *) INCLUDE 'DL_DATA.AXI' (* FOR MUSIC LIBRARY, CHANGE TO 'ML_DATA.AXI' *) } DEFINE_CALL 'ORDINAL' (X, STR[4]) LOCAL_VAR I SUFFIX[2] { SUFFIX = 'th' IF ((X/10)%10 <> 1) { I = X%10 SELECT { ACTIVE (I = 1): SUFFIX = 'st' ACTIVE (I = 2): SUFFIX = 'nd' ACTIVE (I = 3): SUFFIX = 'rd' } } STR = "ITOA(X), SUFFIX" } DEFINE_CALL 'MLCD_SHOW_INFO' (MLCD_LINE1[16], MLCD_LINE2[16]) { SEND_STRING MLCD, "12" SEND_STRING MLCD, "17, 1, 1 + (16 - LENGTH_STRING(MLCD_LINE1))/2, MLCD_LINE1" SEND_STRING MLCD, "17, 2, 1 + (16 - LENGTH_STRING(MLCD_LINE2))/2, MLCD_LINE2" SEND_COMMAND MLCD, 'TIME' } DEFINE_CALL 'MTP_SHOW_DMX' LOCAL_VAR LINE1[16] LINE2[16] { IF ((CURRENT_PAGE = SAT_RADIO_PAGE) && (CURRENT_LEX = DXS)) { LINE1 = DMX_TITLE IF ((DMX_CHANNEL = 1) || (DMX_CHANNEL = 2) || (DMX_CHANNEL = 28) || (DMX_CHANNEL = 41) || (DMX_CHANNEL = 50) || (DMX_CHANNEL = 52)) LINE2 = DMX_COMPOSER ELSE LINE2 = DMX_ARTIST SEND_COMMAND MTP, "'!T', 1, LINE1" SEND_COMMAND MTP, "'!T', 2, LINE2" CALL 'MLCD_SHOW_INFO' (LINE1, LINE2) } } DEFINE_CALL 'MTP_SHOW_LIBRARY' { IF (LENGTH_STRING(LIBRARY_ALBUM_TITLE)) { IF (LIBRARY_STATE > STOPPED) { LIBRARY_LINE1 = LIBRARY_TRACK_TITLE LIBRARY_LINE2 = LIBRARY_ALBUM_ARTIST } ELSE { LIBRARY_LINE1 = LIBRARY_ALBUM_TITLE LIBRARY_LINE2 = LIBRARY_ALBUM_ARTIST } } ELSE { LIBRARY_LINE1 = 'CD Library' LIBRARY_LINE2 = '' } SEND_COMMAND MTP, "'!T', 3, LIBRARY_LINE1" SEND_COMMAND MTP, "'!T', 4, LIBRARY_LINE2" IF ((CURRENT_PAGE = CD_LIBRARY_PAGE) || (CURRENT_PAGE >= CD_LIB_TRACK_LIST_PAGE)) CALL 'MLCD_SHOW_INFO' (LIBRARY_LINE1, LIBRARY_LINE2) (* MAX 32 WITH FONT SIZE 2: SEND_COMMAND MTP, "'!T', 21, '----+----1----+----2----+----3--'" *) IF (LENGTH_STRING(LIBRARY_ALBUM_TITLE)) { SEND_COMMAND MTP, "'!T', 21, LIBRARY_ALBUM_TITLE" SEND_COMMAND MTP, "'!T', 22, LIBRARY_ALBUM_ARTIST" SEND_COMMAND MTP, "'!T', 23, LIBRARY_TRACK_TITLE" } ELSE { SEND_COMMAND MTP, "'!T', 21" SEND_COMMAND MTP, "'!T', 22, LIBRARY_LINE1" SEND_COMMAND MTP, "'!T', 23" } } DEFINE_CALL 'MTP_SHOW_TRACK_LIST' LOCAL_VAR I J { IF ((INFO_INDEX > LAST_TRACK_INDEX) && (LAST_TRACK_INDEX > 0)) INFO_INDEX = LAST_TRACK_INDEX I = INFO_INDEX - 1 J = 50 MEDIUM_WHILE (J <= 57) { IF ((1 <= I) && (I <= LAST_TRACK_INDEX)) SEND_COMMAND MTP, "'!T', J, LIBRARY_TRACK_LIST[I], LEFT_STRING(BLANKS, 32 - LENGTH_STRING(LIBRARY_TRACK_LIST[I]))" ELSE SEND_COMMAND MTP, "'!T', J" I = I + 1 J = J + 1 } } DEFINE_CALL 'MTP_SHOW_ALBUM_NAMES' LOCAL_VAR I J { (* MAX 37 WITH FONT SIZE 1: SEND_COMMAND MTP, "'!T', 60, '----+----1----+----2----+----3----+--'" *) IF (INFO_INDEX = 1) { SEND_COMMAND MTP, "'!T', 60, 'ALBUM TITLES'" I = INFO_INDEX J = 61 } ELSE { I = INFO_INDEX - 1 J = 60 } MEDIUM_WHILE (J <= 69) { IF ((1 <= I) && (I <= LAST_ALBUM)) SEND_COMMAND MTP, "'!T', J, DISCLIB_ALBUM_NAME[I]" ELSE SEND_COMMAND MTP, "'!T', J" I = I + 1 J = J + 1 } IF (LAST_ALBUM - INFO_INDEX < 8) SEND_COMMAND MTP, "'!T', (62 + LAST_ALBUM - INFO_INDEX), 'END OF ALBUM TITLES'" } DEFINE_CALL 'MTP_SHOW_PERFORMERS' LOCAL_VAR I J { IF (INFO_INDEX = 1) { SEND_COMMAND MTP, "'!T', 70, 'PERFORMERS'" I = INFO_INDEX J = 71 } ELSE { I = INFO_INDEX - 1 J = 70 } MEDIUM_WHILE (J <= 79) { IF ((1 <= I) && (I <= LAST_PERFORMER)) SEND_COMMAND MTP, "'!T', J, DISCLIB_PERFORMER_NAME[I]" ELSE SEND_COMMAND MTP, "'!T', J" I = I + 1 J = J + 1 } IF (LAST_PERFORMER - INFO_INDEX < 8) SEND_COMMAND MTP, "'!T', (72 + LAST_PERFORMER - INFO_INDEX), 'END OF PERFORMER LIST'" } DEFINE_CALL 'MTP_SHOW_COMPOSER_INDEX' LOCAL_VAR I J { IF (INFO_INDEX = 1) { SEND_COMMAND MTP, "'!T', 80, 'COMPOSER INDEX'" I = INFO_INDEX J = 81 } ELSE { I = INFO_INDEX - 1 J = 80 } MEDIUM_WHILE (J <= 89) { IF ((1 <= I) && (I <= LAST_COMPOSER)) SEND_COMMAND MTP, "'!T', J, DISCLIB_COMPOSER_NAME[I]" ELSE SEND_COMMAND MTP, "'!T', J" I = I + 1 J = J + 1 } IF (LAST_COMPOSER - INFO_INDEX < 8) SEND_COMMAND MTP, "'!T', (82 + LAST_COMPOSER - INFO_INDEX), 'END OF COMPOSER INDEX'" } DEFINE_CALL 'LIBRARY_CHANGING_DISC' (NEW_TITLE[32]) { LIBRARY_ALBUM_TITLE = NEW_TITLE LIBRARY_ALBUM_ARTIST = '' LIBRARY_TRACK_TITLE = '' CALL 'MTP_SHOW_LIBRARY' CURRENT_DISC = 0 FIRST_TRACK = 1 CURRENT_TRACK_INDEX = 0 HIGH_TRACK_INDEX = 0 LAST_TRACK_INDEX = 0 IF (CURRENT_PAGE = CD_LIB_TRACK_LIST_PAGE) { INFO_INDEX = 1 CALL 'MTP_SHOW_TRACK_LIST' } } DEFINE_CALL 'SET_PAGE' (X) { SEND_COMMAND MTP, "'PAGE-', MTP_PAGE[X]" IF ((X <> CURRENT_PAGE) && (X < SAT_RADIO_MORE_PAGE)) { PREV_PAGE[X] = CURRENT_PAGE CURRENT_PAGE = X } } DEFINE_CALL 'SELECT_SOURCE' (AP, VP, SHOW_MLCD) { (* AP - CHANGES INPUT ON AUDIO PROCESSOR (LEXICON MC-12) *) (* VP - CHANGES INPUT ON VIDEO PROCESSOR (FAROUDJA VP250) *) SEND_STRING 0, "'SELECT_SOURCE CALLED FOR: ', ITOA(AP), ', ', ITOA(VP), ', ', ITOA(SHOW_MLCD), $0D, $0A" (* ... *) CURRENT_LEX = AP (* ... *) IF (SHOW_MLCD) SELECT { (* ... *) ACTIVE (AP = DXS): CALL 'MLCD_SHOW_INFO' (LIBRARY_LINE1, LIBRARY_LINE2) (* ... *) } } DEFINE_CALL 'UPDATE_DMX_CHANNEL' LOCAL_VAR I { IF (DMX_CC = $5C) I = 103 ELSE I = ATOI(DMX_ID) IF (I <> DMX_CHANNEL) { DMX_CHANNEL = I CALL 'MTP_SHOW_DMX' } } (***********************************************************) (* STARTUP CODE GOES BELOW *) (***********************************************************) DEFINE_START (**********************************************************) (* *) (* INITIALIZE CONSTANT ARRAYS *) (* *) (**********************************************************) (* ... *) MTP_PAGE[SAT_RADIO_PAGE] = 'SAT_RADIO' (* ... *) MTP_PAGE[CD_LIBRARY_PAGE] = 'CD_LIBRARY' (* ... *) MTP_PAGE[CD_LIB_TRACK_LIST_PAGE] = 'CD_LIB_TRACK_LIST' MTP_PAGE[CD_LIB_ALBUM_TITLES_PAGE] = 'CD_LIB_ALBUM_TITLES' MTP_PAGE[CD_LIB_PERFORMERS_PAGE] = 'CD_LIB_PERFORMERS' MTP_PAGE[CD_LIB_COMPOSERS_PAGE] = 'CD_LIB_COMPOSERS' MTP_PAGE[SAT_RADIO_MORE_PAGE] = 'SAT_RADIO_MORE' MTP_PAGE[CD_LIB_MORE_PAGE] = 'CD_LIB_MORE' (* ... *) CALL 'INIT_LIBRARY_ARRAYS' CREATE_BUFFER LIBRARY, LIBRARY_BUFFER [MTP, 41] = 1 LIBRARY_STATE = UNLOADED CALL 'LIBRARY_CHANGING_DISC' ('') SEND_STRING LIBRARY, "'x 1 ', DXS_MBR, ' 16 ', DXS_LR, ' 16', $0D" WAIT 10 SEND_STRING LIBRARY, "'?', $0D" (***********************************************************) (* THE ACTUAL PROGRAM GOES BELOW *) (***********************************************************) DEFINE_PROGRAM PUSH [MTP, 24] (* SELECT DISC/MUSIC LIBRARY *) PUSH [VPT, 24] (* SELECT DISC/MUSIC LIBRARY *) { CALL 'SET_PAGE' (CD_LIBRARY_PAGE) DXS_LR = '1' SEND_STRING LIBRARY, "'x 1 ', DXS_MBR, ' 16 1 16', $0D" CALL 'SELECT_SOURCE' (DXS, DXS_VIDEO, 1) } PUSH [MTP, 42] PUSH [VPT, 42] SEND_STRING LIBRARY, "'0 ', PREVIOUS_DISC, $0D" PUSH [MTP, 43] PUSH [VPT, 43] SEND_STRING LIBRARY, "'0 ', NEXT_DISC, $0D" PUSH [MTP, 44] (* |<< *) PUSH [VPT, 44] (* |<< *) SEND_STRING LIBRARY, "'0 ', PREVIOUS_TRACK, $0D" PUSH [MTP, 45] (* >>| *) PUSH [VPT, 45] (* >>| *) SEND_STRING LIBRARY, "'0 ', NEXT_TRACK, $0D" PUSH [MTP, 46] (* << *) PUSH [VPT, 46] (* << *) { KEYPAD_MODE = FAST_REV_DOWN SEND_STRING LIBRARY, "'0 ', REVERSE_SCAN, $0D" } IF (KEYPAD_MODE = FAST_REV_DOWN) { RELEASE [MTP, 46] RELEASE [VPT, 46] { KEYPAD_MODE = BASE_STATE SEND_STRING LIBRARY, "'0 ', END_REVERSE_SCAN, $0D" } } PUSH [MTP, 47] (* >> *) PUSH [VPT, 47] (* >> *) { KEYPAD_MODE = FAST_FWD_DOWN SEND_STRING LIBRARY, "'0 ', FORWARD_SCAN, $0D" } IF (KEYPAD_MODE = FAST_FWD_DOWN) { RELEASE [MTP, 47] RELEASE [VPT, 47] { KEYPAD_MODE = BASE_STATE SEND_STRING LIBRARY, "'0 ', END_FORWARD_SCAN, $0D" } } PUSH [MTP, 48] (* STOP *) PUSH [VPT, 48] (* STOP *) SEND_STRING LIBRARY, "'0 ', STOP, $0D" PUSH [MTP, 49] (* PAUSE *) PUSH [VPT, 49] (* PAUSE *) SEND_STRING LIBRARY, "'0 ', PAUSE, $0D" PUSH [MTP, 50] (* PLAY *) PUSH [VPT, 50] (* PLAY *) SEND_STRING LIBRARY, "'0 ', PLAY, $0D" PUSH [MTP, 101] { INFO_INDEX = 1 IF (CURRENT_DISC) { N = CURRENT_PLAYER*10000 + CURRENT_DISC MEDIUM_WHILE ((INFO_INDEX <= LAST_ALBUM) && (DISCLIB_ALBUM_KEY[INFO_INDEX] <> N)) INFO_INDEX = INFO_INDEX + 1 IF (INFO_INDEX > LAST_ALBUM) INFO_INDEX = 1 } CALL 'MTP_SHOW_ALBUM_NAMES' CALL 'SET_PAGE' (CD_LIB_ALBUM_TITLES_PAGE) } PUSH [MTP, 102] { INFO_INDEX = 1 IF (CURRENT_DISC) { N = CURRENT_PLAYER*10000 + CURRENT_DISC MEDIUM_WHILE ((INFO_INDEX <= LAST_PERFORMER) && (DISCLIB_PERFORMER_KEY[INFO_INDEX] <> N)) INFO_INDEX = INFO_INDEX + 1 IF (INFO_INDEX > LAST_PERFORMER) INFO_INDEX = 1 } CALL 'MTP_SHOW_PERFORMERS' CALL 'SET_PAGE' (CD_LIB_PERFORMERS_PAGE) } PUSH [MTP, 103] { INFO_INDEX = 1 IF (CURRENT_DISC) { N = CURRENT_PLAYER*10000 + CURRENT_DISC MEDIUM_WHILE ((INFO_INDEX <= LAST_COMPOSER) && (DISCLIB_COMPOSER_KEY[INFO_INDEX] <> N)) INFO_INDEX = INFO_INDEX + 1 IF (INFO_INDEX > LAST_COMPOSER) INFO_INDEX = 1 } CALL 'MTP_SHOW_COMPOSER_INDEX' CALL 'SET_PAGE' (CD_LIB_COMPOSERS_PAGE) } PUSH [MTP, 110] { IF (CURRENT_TRACK_INDEX) INFO_INDEX = CURRENT_TRACK_INDEX ELSE INFO_INDEX = 1 CALL 'MTP_SHOW_TRACK_LIST' CALL 'SET_PAGE' (CD_LIB_TRACK_LIST_PAGE) } PUSH [MTP, 111] { TO [MTP, 111] SEND_STRING LIBRARY, "'0 ', TRACK, ' ', ITOA(FIRST_TRACK + INFO_INDEX - 1), $0D" } PUSH [MTP, 113] { SELECT { ACTIVE (CURRENT_PAGE = CD_LIB_ALBUM_TITLES_PAGE): { IF (INFO_INDEX > 1) { INFO_INDEX = INFO_INDEX - 1 CALL 'MTP_SHOW_ALBUM_NAMES' } } ACTIVE (CURRENT_PAGE = CD_LIB_PERFORMERS_PAGE): { IF (INFO_INDEX > 1) { INFO_INDEX = INFO_INDEX - 1 CALL 'MTP_SHOW_PERFORMERS' } } ACTIVE (CURRENT_PAGE = CD_LIB_COMPOSERS_PAGE): { IF (INFO_INDEX > 1) { INFO_INDEX = INFO_INDEX - 1 CALL 'MTP_SHOW_COMPOSER_INDEX' } } ACTIVE (CURRENT_PAGE = CD_LIB_TRACK_LIST_PAGE): { IF (INFO_INDEX > 1) { INFO_INDEX = INFO_INDEX - 1 CALL 'MTP_SHOW_TRACK_LIST' } } } } PUSH [MTP, 114] { SELECT { ACTIVE (CURRENT_PAGE = CD_LIB_ALBUM_TITLES_PAGE): { IF (INFO_INDEX < LAST_ALBUM) { INFO_INDEX = INFO_INDEX + 1 CALL 'MTP_SHOW_ALBUM_NAMES' } } ACTIVE (CURRENT_PAGE = CD_LIB_PERFORMERS_PAGE): { IF (INFO_INDEX < LAST_PERFORMER) { INFO_INDEX = INFO_INDEX + 1 CALL 'MTP_SHOW_PERFORMERS' } } ACTIVE (CURRENT_PAGE = CD_LIB_COMPOSERS_PAGE): { IF (INFO_INDEX < LAST_COMPOSER) { INFO_INDEX = INFO_INDEX + 1 CALL 'MTP_SHOW_COMPOSER_INDEX' } } ACTIVE (CURRENT_PAGE = CD_LIB_TRACK_LIST_PAGE): { IF (INFO_INDEX < LAST_TRACK_INDEX) { INFO_INDEX = INFO_INDEX + 1 CALL 'MTP_SHOW_TRACK_LIST' } } } } PUSH [MTP, 115] { SELECT { ACTIVE (CURRENT_PAGE = CD_LIB_ALBUM_TITLES_PAGE): { IF (INFO_INDEX = 1) INFO_INDEX = LAST_ALBUM - 7 ELSE { IF (INFO_INDEX > 10) INFO_INDEX = INFO_INDEX - 9 ELSE INFO_INDEX = 1 } CALL 'MTP_SHOW_ALBUM_NAMES' } ACTIVE (CURRENT_PAGE = CD_LIB_PERFORMERS_PAGE): { IF (INFO_INDEX = 1) INFO_INDEX = LAST_PERFORMER - 7 ELSE { IF (INFO_INDEX > 10) INFO_INDEX = INFO_INDEX - 9 ELSE INFO_INDEX = 1 } CALL 'MTP_SHOW_PERFORMERS' } ACTIVE (CURRENT_PAGE = CD_LIB_COMPOSERS_PAGE): { IF (INFO_INDEX = 1) INFO_INDEX = LAST_COMPOSER - 7 ELSE { IF (INFO_INDEX > 10) INFO_INDEX = INFO_INDEX - 9 ELSE INFO_INDEX = 1 } CALL 'MTP_SHOW_COMPOSER_INDEX' } ACTIVE (CURRENT_PAGE = CD_LIB_TRACK_LIST_PAGE): { IF (INFO_INDEX > 8) INFO_INDEX = INFO_INDEX - 7 ELSE INFO_INDEX = 1 CALL 'MTP_SHOW_TRACK_LIST' } } } PUSH [MTP, 116] { SELECT { ACTIVE (CURRENT_PAGE = CD_LIB_ALBUM_TITLES_PAGE): { IF (INFO_INDEX = LAST_ALBUM) INFO_INDEX = 1 ELSE { IF (INFO_INDEX + 9 < LAST_ALBUM) INFO_INDEX = INFO_INDEX + 9 ELSE INFO_INDEX = LAST_ALBUM } CALL 'MTP_SHOW_ALBUM_NAMES' } ACTIVE (CURRENT_PAGE = CD_LIB_PERFORMERS_PAGE): { IF (INFO_INDEX = LAST_PERFORMER) INFO_INDEX = 1 ELSE { IF (INFO_INDEX + 9 < LAST_PERFORMER) INFO_INDEX = INFO_INDEX + 9 ELSE INFO_INDEX = LAST_PERFORMER } CALL 'MTP_SHOW_PERFORMERS' } ACTIVE (CURRENT_PAGE = CD_LIB_COMPOSERS_PAGE): { IF (INFO_INDEX = LAST_COMPOSER) INFO_INDEX = 1 ELSE { IF (INFO_INDEX + 9 < LAST_COMPOSER) INFO_INDEX = INFO_INDEX + 9 ELSE INFO_INDEX = LAST_COMPOSER } CALL 'MTP_SHOW_COMPOSER_INDEX' } ACTIVE (CURRENT_PAGE = CD_LIB_TRACK_LIST_PAGE): { IF (INFO_INDEX + 7 < LAST_TRACK_INDEX) INFO_INDEX = INFO_INDEX + 7 ELSE IF (LAST_TRACK_INDEX) INFO_INDEX = LAST_TRACK_INDEX CALL 'MTP_SHOW_TRACK_LIST' } } } PUSH [MTP, 117] { N = DISCLIB_ALBUM_KEY[INFO_INDEX] SEND_STRING LIBRARY, "ITOA(N/10000), ' ', LOAD_AND_PLAY, ' ', ITOA(N%10000), $0D" CALL 'SET_PAGE' (CD_LIB_MORE_PAGE) CURRENT_PAGE = CD_LIBRARY_PAGE } PUSH [MTP, 118] { N = DISCLIB_PERFORMER_KEY[INFO_INDEX] SEND_STRING LIBRARY, "ITOA(N/10000), ' ', LOAD_AND_PLAY, ' ', ITOA(N%10000), $0D" CALL 'SET_PAGE' (CD_LIB_MORE_PAGE) CURRENT_PAGE = CD_LIBRARY_PAGE } PUSH [MTP, 119] { N = DISCLIB_COMPOSER_KEY[INFO_INDEX] SEND_STRING LIBRARY, "ITOA(N/10000), ' ', LOAD_AND_PLAY, ' ', ITOA(N%10000), $0D" CALL 'SET_PAGE' (CD_LIB_MORE_PAGE) CURRENT_PAGE = CD_LIBRARY_PAGE } PUSH [MTP, 200] CURRENT_PAGE = PREV_PAGE[CURRENT_PAGE] MEDIUM_WHILE (LENGTH_STRING(LIBRARY_BUFFER)) { WORKBFR = REMOVE_STRING(LIBRARY_BUFFER, "$0D", 1) IF (LENGTH_STRING(WORKBFR)) { LIBRARY_STRING = "LIBRARY_STRING, WORKBFR" LIBRARY_END = LENGTH_STRING(LIBRARY_STRING) - 1 SET_LENGTH_STRING(LIBRARY_STRING, LIBRARY_END) (* SEND_STRING 0, "LIBRARY_STRING, $0D, $0A, '>'" *) IF (LIBRARY_END >= 4) { TEMPSTR = LEFT_STRING(LIBRARY_STRING, 3) IF (TEMPSTR = 'DXS') { SEND_STRING LIBRARY, "'x 1 ', DXS_MBR, ' 16 ', DXS_LR, ' 16', $0D" (* SEND_STRING 0, "'Received ''DXS''', $0D, $0A, '>'" *) } ELSE IF (TEMPSTR = 'DMX') { WORKSTR = UPPER_STRING(MID_STRING(LIBRARY_STRING, 4, 1)) N = WORKSTR[1] (* SEND_STRING 0, "'Received ''DMX'' status: ', N, $0D, $0A, '>'" *) SELECT { ACTIVE (N = $54): (* T *) { DMX_TITLE = RIGHT_STRING(LIBRARY_STRING, LIBRARY_END - 4) CALL 'MTP_SHOW_DMX' } ACTIVE (N = $41): (* A *) { DMX_ARTIST = RIGHT_STRING(LIBRARY_STRING, LIBRARY_END - 4) CALL 'MTP_SHOW_DMX' } ACTIVE (N = $43): (* C *) { DMX_COMPOSER = RIGHT_STRING(LIBRARY_STRING, LIBRARY_END - 4) CALL 'MTP_SHOW_DMX' } ACTIVE (N = $4C): (* L *) { TEMPSTR = MID_STRING(LIBRARY_STRING, 5, 3) IF ((DMX_CC <> $5C) && (TEMPSTR <> DMX_ID)) { DMX_ID = TEMPSTR CALL 'UPDATE_DMX_CHANNEL' } } ACTIVE (N = $49): (* I *) { DMX_CC = LIBRARY_STRING[5] CALL 'UPDATE_DMX_CHANNEL' } } } ELSE { (* SEND_STRING 0, "LIBRARY_STRING, $0D, $0A, '>'" *) N = LIBRARY_STRING[4] (* IF (N <> $4D) *) (* SEND_STRING 0, "LIBRARY_STRING, $0D, $0A, '>'" *) VALUE = N - $30 SELECT { ACTIVE (VALUE = UNLOADED): { [MTP, 41] = 1 LIBRARY_STATE = UNLOADED P = ATOI(MID_STRING(LIBRARY_STRING, 8, 4)) IF (P) WORKSTR = ' ' ELSE WORKSTR = '' CALL 'LIBRARY_CHANGING_DISC' (WORKSTR) } ACTIVE (VALUE = STOPPED): { [MTP, 48] = 1 LIBRARY_STATE = STOPPED LIBRARY_TRACK_TITLE = '' CURRENT_TRACK_INDEX = 0 CALL 'MTP_SHOW_LIBRARY' } ACTIVE (VALUE = PAUSED): { [MTP, 49] = 1 LIBRARY_STATE = PAUSED } ACTIVE (VALUE = PLAYING): { [MTP, 50] = 1 LIBRARY_STATE = PLAYING } ACTIVE (N = $44): (* D *) CALL 'LIBRARY_CHANGING_DISC' (RIGHT_STRING(LIBRARY_STRING, LIBRARY_END - 4)) ACTIVE (N = $41): (* A *) { LIBRARY_ALBUM_ARTIST = RIGHT_STRING(LIBRARY_STRING, LIBRARY_END - 4) CALL 'MTP_SHOW_LIBRARY' } ACTIVE ((N = $4D) || (N = $4E)): (* M OR N *) { HIGH_TRACK_INDEX = ATOI(MID_STRING(LIBRARY_STRING, 5, 3)) LIBRARY_TRACK_LIST[HIGH_TRACK_INDEX] = RIGHT_STRING(LIBRARY_STRING, LIBRARY_END - 7) IF (HIGH_TRACK_INDEX = CURRENT_TRACK_INDEX) { LIBRARY_TRACK_TITLE = LIBRARY_TRACK_LIST[CURRENT_TRACK_INDEX] CALL 'MTP_SHOW_LIBRARY' } IF (N = $4E) { LAST_TRACK_INDEX = HIGH_TRACK_INDEX IF (CURRENT_PAGE = CD_LIB_TRACK_LIST_PAGE) { IF (CURRENT_TRACK_INDEX) INFO_INDEX = CURRENT_TRACK_INDEX ELSE INFO_INDEX = 1 CALL 'MTP_SHOW_TRACK_LIST' } } } ACTIVE (VALUE = DISC_STATS): { CURRENT_PLAYER = ATOI(TEMPSTR) CURRENT_DISC = ATOI(MID_STRING(LIBRARY_STRING, 8, 4)) FIRST_TRACK = ATOI(MID_STRING(LIBRARY_STRING, 12, 3)) } ACTIVE (VALUE = TRACK_START): { CURRENT_TRACK_INDEX = 1 + ATOI(MID_STRING(LIBRARY_STRING, 5, 3)) - FIRST_TRACK IF ((1 <= CURRENT_TRACK_INDEX) && (CURRENT_TRACK_INDEX <= HIGH_TRACK_INDEX)) LIBRARY_TRACK_TITLE = LIBRARY_TRACK_LIST[CURRENT_TRACK_INDEX] ELSE { CALL 'ORDINAL' (CURRENT_TRACK_INDEX, TEMPSTR) LIBRARY_TRACK_TITLE = "TEMPSTR, ' track'" } CALL 'MTP_SHOW_LIBRARY' } ACTIVE (N = $54): (* T *) { LIBRARY_TRACK_TITLE = RIGHT_STRING(LIBRARY_STRING, LIBRARY_END - 4) CALL 'MTP_SHOW_LIBRARY' } ACTIVE (N = $45): (* E *) SEND_COMMAND MTP, 'ADBEEP' } } } CLEAR_BUFFER LIBRARY_STRING } ELSE { LIBRARY_STRING = "LIBRARY_STRING, LIBRARY_BUFFER" CLEAR_BUFFER LIBRARY_BUFFER } } PUSH [VPT, CD_TRACK] (* DISC/MUSIC LIBRARY TRACK *) { VPT_STRING = PUSH_CHANNEL VPT_VALUE = 0 } PUSH [VPT, 149] VPT_VALUE = 0 IF ((PUSH_DEVICE = VPT) && (150 <= PUSH_CHANNEL) && (PUSH_CHANNEL <= 159)) VPT_VALUE = VPT_VALUE*10 + (PUSH_CHANNEL - 150) PUSH [VPT, 160] { IF (VPT_VALUE) { SELECT { (* ... *) ACTIVE (VPT_STRING = CD_TRACK): SEND_STRING LIBRARY, "'0 ', TRACK, ' ', ITOA(VPT_VALUE), $0D" (* ... *) } VPT_VALUE = 0 } VPT_STRING = 0 } (***********************************************************) (* END OF PROGRAM *) (* DO NOT PUT ANY CODE BELOW THIS COMMENT *) (***********************************************************)