DECLARE SUB LoadDirectory () DECLARE SUB RefreshVariables () DECLARE SUB PrintTemplate () DECLARE SUB ShuffleSongs () DECLARE SUB TextOutput (textOut$) DECLARE SUB LoadPlayList (fileName AS STRING) DECLARE SUB SonyPlayNextTrack () DECLARE SUB ProcessKeyPress () DECLARE SUB SetAlarm () DECLARE SUB SonyJogUp (numberOfDiscs!) DECLARE SUB SonyJogDown (numberOfDiscs!) DECLARE SUB SonyGodisc (nextDisc!) DECLARE SUB SonyInitialize () DECLARE SUB SonyHold (button!) DECLARE SUB SonyGotrack (track!) DECLARE SUB SonyEntertrack (discToEnter!, trackToEnter!) DECLARE SUB SonyPress (button!) DECLARE SUB SonyWaitfor (delay!) REM **** Variables for determining disc position **** COMMON SHARED currentDisc AS INTEGER, totalDiscs AS INTEGER REM **** Delay declarations **** COMMON SHARED jogDelay AS INTEGER COMMON SHARED pressDelay AS INTEGER COMMON SHARED holdDelay AS INTEGER REM **** Key name declarations **** COMMON SHARED jog1 AS INTEGER, jog2 AS INTEGER, jog12 AS INTEGER COMMON SHARED release AS INTEGER COMMON SHARED program AS INTEGER COMMON SHARED clearr AS INTEGER COMMON SHARED trackUp AS INTEGER COMMON SHARED trackDown AS INTEGER COMMON SHARED playy AS INTEGER COMMON SHARED stopp AS INTEGER COMMON SHARED enter AS INTEGER COMMON SHARED continue AS INTEGER COMMON SHARED block1 AS INTEGER COMMON SHARED block2 AS INTEGER REM **** Filename, file pointer, & other related declarations **** COMMON SHARED dataFilePath AS STRING COMMON SHARED tempFilePath AS STRING COMMON SHARED dbaseFileName AS STRING COMMON SHARED songPointer AS INTEGER COMMON SHARED selectedFile AS STRING COMMON SHARED selectedFilePointer AS INTEGER COMMON SHARED alarmListFile AS STRING COMMON SHARED playListFile AS STRING COMMON SHARED playListTempFile AS STRING COMMON SHARED dirTempFile AS STRING TYPE songRecord discNum AS INTEGER trackNum AS INTEGER END TYPE DIM SHARED song AS songRecord REM **** Misc variable declarations **** COMMON SHARED keyPress AS STRING COMMON SHARED port AS INTEGER COMMON SHARED quit AS INTEGER COMMON SHARED playingTracks AS INTEGER COMMON SHARED continuousMode AS INTEGER COMMON SHARED shuffleMode AS INTEGER COMMON SHARED getUpTime AS LONG, alarmIsRinging AS INTEGER, alarmEnabled AS INTEGER COMMON SHARED false AS INTEGER, true AS INTEGER REM **** Delay assignments **** jogDelay = 15 pressDelay = 55 holdDelay = 3800 REM **** Key assignments **** jog1 = 88 jog2 = 132 jog12 = 28 release = 192 program = 80 clearr = 130 trackUp = 134 trackDown = 129 playy = 133 stopp = 128 enter = 120 continue = 64 block1 = 72 block2 = 112 REM **** Filename variable assignments **** dataFilePath = "c:\cd\ply\" tempFilePath = "c:\cd\" dbaseFileName = "cd" alarmListFile = "upbeat" playListFile = "mar02" playListTempFile = "playlist" dirTempFile = "dir" REM **** Misc. assignments **** port = &H378 '<-- This is the address for lpt1: totalDiscs = 114 true = -1 false = 0 CLS OPEN tempFilePath + playListTempFile + ".tmp" FOR RANDOM AS #2 LEN = 4 OPEN tempFilePath + dirTempFile + ".tmp" FOR RANDOM AS #3 LoadDirectory SCREEN 11 selectedFilePointer = 1 PrintTemplate LoadPlayList (playListFile) songPointer = 1 alarmIsRinging = false continuousMode = false shuffleMode = true quit = false playingTracks = false RefreshVariables SonyInitialize DO WHILE quit = false REM check to see if track has ended: IF (NOT ((INP(port + 1) AND 16) = 16)) AND (playingTracks = true) THEN SonyPlayNextTrack RefreshVariables END IF REM check to see if alarm has gone off: IF alarmEnabled AND (TIMER < (getUpTime + 60)) AND (TIMER > getUpTime) AND (NOT alarmIsRinging) THEN alarmIsRinging = true playingTracks = true TextOutput "alarm is ringing, getting alarm playlist..." LoadPlayList (alarmListFile) SonyInitialize RefreshVariables END IF REM check to see if key has been pressed: keyPress = INKEY$ IF keyPress <> "" THEN ProcessKeyPress RefreshVariables END IF LOOP CLOSE END SUB LoadDirectory CLOSE #3 KILL tempFilePath + dirTempFile + ".tmp" OPEN tempFilePath + dirTempFile + ".tmp" FOR RANDOM AS #3 LEN = 10 SHELL "dir " + dataFilePath + "*.ply >" + tempFilePath + "dir.txt" OPEN tempFilePath + "dir.txt" FOR INPUT AS #4 FOR counter = 1 TO 5 LINE INPUT #4, fileName$ NEXT counter counter = 1 DO LINE INPUT #4, fileName$ fileName$ = LEFT$(fileName$, 8) IF LEFT$(fileName$, 1) <> " " THEN PUT #3, counter, fileName$ counter = counter + 1 END IF LOOP WHILE (LEFT$(fileName$, 1) <> " ") AND (NOT EOF(4)) CLOSE #4 KILL tempFilePath + "dir.txt" ' REM **** the next bit is for test purposes only **** ' FOR counter = 1 TO LOF(3) / 10 ' GET #3, counter, fileName$ ' PRINT fileName$ + "<" ' NEXT counter ' PRINT ' PRINT "LOF (3)="; LOF(3) ' PRINT "# of files="; LOF(3) / 10 ' PRINT "directory printout done." END SUB SUB LoadPlayList (fileName AS STRING) TextOutput "loading playlist..." CLOSE #2 KILL tempFilePath + playListTempFile + ".tmp" OPEN dataFilePath + fileName + ".ply" FOR INPUT AS #1 OPEN tempFilePath + playListTempFile + ".tmp" FOR RANDOM AS #2 LEN = 4 songPointer = 1 DO WHILE NOT EOF(1) LINE INPUT #1, a$ song.discNum = VAL(a$) IF song.discNum <> 0 THEN song.trackNum = VAL(RIGHT$(a$, LEN(a$) - INSTR(a$, ","))) PUT #2, songPointer, song songPointer = songPointer + 1 END IF LOOP CLOSE #1 songPointer = 1 TextOutput "done loading." END SUB SUB PrintTemplate CLS LOCATE 1, 1: PRINT " � � Alarm is: "; LOCATE 2, 1: PRINT " � � Alarm time is: "; LOCATE 3, 1: PRINT " � � Alarm playlist: "; LOCATE 4, 1: PRINT " � � Regular playlist: "; LOCATE 5, 1: PRINT " � � CD player is: "; LOCATE 6, 1: PRINT " � ������������������������������"; LOCATE 7, 1: PRINT " � � Toggles: "; LOCATE 8, 1: PRINT " � � "; LOCATE 9, 1: PRINT " � � alarm "; LOCATE 10, 1: PRINT " � � ^ "; LOCATE 11, 1: PRINT " � � continuous mode "; LOCATE 12, 1: PRINT " � � ^ "; LOCATE 13, 1: PRINT " � � random play "; LOCATE 14, 1: PRINT " � � ^ "; LOCATE 15, 1: PRINT " �> � "; LOCATE 16, 1: PRINT " � ������������������������������"; LOCATE 17, 1: PRINT " � � Commands: "; LOCATE 18, 1: PRINT " � � "; LOCATE 19, 1: PRINT " � � play / initialize & Play "; LOCATE 20, 1: PRINT " � � ^ ^ "; LOCATE 21, 1: PRINT " � � stop "; LOCATE 22, 1: PRINT " � � ^ "; LOCATE 23, 1: PRINT " � � set Alarm "; LOCATE 24, 1: PRINT " � � ^ "; LOCATE 25, 1: PRINT " � � Quit "; LOCATE 26, 1: PRINT " � � ^ "; LOCATE 27, 1: PRINT " � � "; LOCATE 28, 1: PRINT " � � "; LOCATE 29, 1: PRINT " � � "; LOCATE 30, 1: PRINT " � � "; FOR counter = 1 TO LOF(3) / 10 vert = counter + 15 - selectedFilePointer IF vert >= 1 AND vert <= 30 THEN GET #3, counter, fileName$ LOCATE vert, 43 PRINT fileName$; END IF NEXT counter END SUB SUB ProcessKeyPress IF keyPress = "Q" THEN quit = true IF keyPress = "a" THEN alarmEnabled = NOT alarmEnabled IF keyPress = "A" THEN SetAlarm IF keyPress = "p" THEN TextOutput "commencing play..." playingTracks = true END IF IF keyPress = "P" THEN SonyInitialize TextOutput "commencing play..." playingTracks = true END IF IF keyPress = "s" THEN TextOutput "stop." SonyPress (stopp) SonyPress (clearr) playingTracks = false END IF IF keyPress = "r" THEN shuffleMode = NOT shuffleMode IF keyPress = "c" THEN continuousMode = NOT continuousMode END SUB SUB RefreshVariables LOCATE 1, 72 PRINT " "; LOCATE 2, 71 PRINT " "; LOCATE 3, 72 PRINT " "; LOCATE 4, 72 PRINT " "; LOCATE 5, 72 PRINT " "; LOCATE 9, 72 PRINT " "; LOCATE 11, 72 PRINT " "; LOCATE 13, 72 PRINT " "; LOCATE 1, 72 IF alarmIsRinging THEN PRINT "RINGING"; ELSE PRINT "SILENT"; LOCATE 2, 71 PRINT STR$(INT(getUpTime / 3600)) + ":" + STR$((getUpTime - INT(getUpTime / 3600) * 3600) / 60); LOCATE 3, 72 PRINT alarmListFile; LOCATE 4, 72 PRINT playListFile; LOCATE 5, 72 IF playingTracks THEN PRINT "PLAYING"; ELSE PRINT "STOPPED"; LOCATE 9, 72 IF alarmEnabled THEN PRINT "ENABLED"; ELSE PRINT "DISABLED"; LOCATE 11, 72 IF continuousMode THEN PRINT "ENABLED"; ELSE PRINT "DISABLED"; LOCATE 13, 72 IF shuffleMode THEN PRINT "ENABLED"; ELSE PRINT "DISABLED"; END SUB SUB SetAlarm a$ = "The current time is:" + TIME$ TextOutput a$ TextOutput "Number of hrs from midnight" INPUT ; UserIn getUpTime = UserIn * 3600 TextOutput "Number of minutes" INPUT ; UserIn getUpTime = getUpTime + (UserIn * 60) TextOutput "Alarm time has been set." alarmEnabled = true TextOutput "Alarm has been enabled." END SUB SUB ShuffleSongs TextOutput "randomizing..." IF (LOF(2) / 4) < 3 THEN EXIT SUB FOR pass = 1 TO 3 RANDOMIZE TIMER FOR counter = 1 TO ((LOF(2) / 4) - 2) GET #2, counter, song disc = song.discNum track = song.trackNum randomPick = INT(RND * ((LOF(2) / 4) - counter + 1)) + counter GET #2, randomPick, song PUT #2, counter, song song.discNum = disc song.trackNum = track PUT #2, randomPick, song NEXT counter NEXT pass TextOutput "done." END SUB SUB SonyEntertrack (discToEnter, trackToEnter) SonyGodisc (discToEnter) SonyGotrack (trackToEnter) SonyPress (enter) END SUB SUB SonyGodisc (nextDisc) offset = nextDisc - currentDisc REM **** If it's the same disc as last time **** REM **** then go up one disc, and come back **** REM **** down to the same spot. **** IF offset = 0 THEN SonyJogUp (1) SonyJogDown (1) EXIT SUB REM **** Otherwise, see if there's a shortcut **** ELSEIF ABS(offset) > (totalDiscs / 2) THEN IF offset > 0 THEN offset = offset - totalDiscs ELSE offset = offset + totalDiscs END IF END IF REM **** Start jogging (up or down depending on sign of offset) **** IF offset > 0 THEN SonyJogUp (offset) ELSE SonyJogDown (offset) END IF currentDisc = nextDisc END SUB SUB SonyGotrack (track) IF track = 0 THEN EXIT SUB ELSE FOR counter = 1 TO track SonyPress (trackUp) NEXT counter END IF END SUB SUB SonyHold (button) OUT port, button SonyWaitfor (holdDelay) OUT port, release SonyWaitfor (pressDelay) END SUB SUB SonyInitialize TextOutput "initializing CD player..." SonyPress (release) SonyPress (stopp) SonyPress (program) SonyHold (clearr) SonyPress (block2) SonyPress (block1) SonyPress (program) currentDisc = 1 TextOutput "done." END SUB SUB SonyJogDown (numberOfDiscs) IF numberOfDiscs = 0 THEN EXIT SUB FOR counter = 1 TO ABS(numberOfDiscs) OUT port, jog2 SonyWaitfor (jogDelay) OUT port, jog12 SonyWaitfor (jogDelay) OUT port, jog1 SonyWaitfor (jogDelay) OUT port, release SonyWaitfor (jogDelay) NEXT counter END SUB SUB SonyJogUp (numberOfDiscs) IF numberOfDiscs = 0 THEN EXIT SUB FOR counter = 1 TO ABS(numberOfDiscs) OUT port, jog1 SonyWaitfor (jogDelay) OUT port, jog12 SonyWaitfor (jogDelay) OUT port, jog2 SonyWaitfor (jogDelay) OUT port, release SonyWaitfor (jogDelay) NEXT counter END SUB SUB SonyPlayNextTrack SonyPress (stopp) SonyPress (clearr) IF songPointer = 1 AND shuffleMode = true THEN ShuffleSongs IF songPointer <= (LOF(2) / 4) THEN GET #2, songPointer, song disc = song.discNum track = song.trackNum a$ = STR$(disc) + " " + STR$(track) TextOutput a$ SonyEntertrack disc, track SonyPress (playy) songPointer = songPointer + 1 END IF IF songPointer > (LOF(2) / 4) THEN songPointer = 1 IF continuousMode = false THEN playingTracks = false IF alarmIsRinging THEN alarmIsRinging = false LoadPlayList (playListFile) END IF END IF END SUB SUB SonyPress (button) OUT port, button SonyWaitfor (pressDelay) OUT port, release SonyWaitfor (pressDelay) END SUB SUB SonyWaitfor (delay) FOR counter = 1 TO delay NEXT counter END SUB SUB TextOutput (textOut$) DIM screenImage(4640) GET (0, 17)-(319, 480), screenImage PUT (0, 1), screenImage, PSET LINE (0, 465)-(319, 480), 0, BF LOCATE 30, 1 PRINT " " + LEFT$(textOut$, 39); END SUB