REM © Geoff Youngs, 2001 - Example CGI controlled CD player for RISC OS REM Distributed exclusively on The Iconbar (http://www.iconbar.com/) REM Any suggestions/feedback should be directed to geoff@solutionsweb.co.uk REM This is not endorsed by TIB, nor should it be considered fit for any purpose REM other than filling your harddisc up (and at 7 Kb including gfx, it's not too good at that:) DIM cblk% 20 DIM buf% 1024 DIM fbyte% 12 DIM trackname$(99) ONERROR:REPORT:PRINT" at line "+STR$ERL:END DIM pause%(62) pause%()=71,73,70,56,57,97,12,0,12,0,240,0,0,0,0,0,0,0,0,33,249,4,5,8,0,1,0,44,1,0,0,0,10,0,12,0,0,2,20,132,17,113,139,202,150,30,116,47,74,91,41,195,91,47,254,121,7,87,0,0,59 DIM play%(65) play%()=71,73,70,56,57,97,12,0,12,0,240,0,0,0,0,0,0,0,0,33,249,4,5,8,0,1,0,44,0,0,0,0,12,0,12,0,0,2,23,4,130,169,102,186,220,28,132,111,50,100,179,222,52,232,122,73,161,227,29,100,82,0,0,59 DIM stop%(44) stop%()=71,73,70,56,57,97,12,0,12,0,240,0,0,0,0,0,105,103,103,44,0,0,0,0,12,0,12,0,0,2,10,132,143,169,203,237,15,163,156,148,21,0,59 qstring$=FNreadvar("QUERY_STRING") action$=FNgetoption(qstring$,"action") IFaction$="image" THEN PRINT"Content-Type: image/gif"+CHR$13+CHR$10+CHR$13+CHR$10; PROCimage(FNgetoption(qstring$,"value")) ENDIF IF (action$<>"refresh") PRINT"Location: ?action=refresh"+CHR$13+CHR$10; PRINT"Content-Type: text/html"+CHR$13+CHR$10+CHR$13+CHR$10; refresh$=FNreadvar("webcd$refresh") IF refresh$="" THEN refresh$="10" enabled$=FNreadvar("webcd$enabled") IFenabled$="no"THEN PRINT"" + "webCD disabled" + "

Disabled by user

";:END SYS"XCDFS_ConvertDriveToDevice",0 TO ,pdn% cblk%!(0) = (pdn% AND &00000007) cblk%!(4) = (pdn% AND &00000018) >> 3 cblk%!(8) = (pdn% AND &000000E0) >> 5 cblk%!(12) = (pdn% AND &0000FF00) >> 8 cblk%!(16) = (pdn% AND &FFFF0000) >> 16 SYS"XCD_CheckDrive",,,,,,,,cblk% TO cd% IFcd%<>0THEN PRINT"No CD in drive

No CD in drive

";:END SYS"XCD_EnquireTrack",0,fbyte%,,,,,,cblk% firsttrack%=?fbyte% lasttrack%=fbyte%?1 track%=0 SYS"XCD_AudioStatus",,,,,,,,cblk% TO statusr% status%=(statusr%AND&F) SYS"XCD_Version" TO driver% IF action$="pause" THEN IF status%=1 THEN SYS"XCD_AudioPause",0,,,,,,,cblk% ELSE SYS"XCD_AudioPause",1,,,,,,,cblk% ENDIF IF action$="play" THEN track%=VAL(FNgetoption(qstring$,"track")) IF( track%>=firsttrack% AND track%<=lasttrack% )THEN SYS"XCD_PlayTrack",track%,255,,,,,,cblk% IF status%=1 THEN SYS"XCD_AudioPause",0,,,,,,,cblk% ENDIF IF action$="volume" THEN ENDIF IF action$="stop" THEN SYS"XCD_StopDisc",,,,,,,,cblk% ENDIF cd_title$="" SYS"XCD_DiscUsed",0,fbyte%,,,,,,cblk% uid%=!fbyte% IF (FNreadvar("CDPlay$Dir")<>"") THEN xf%=OPENIN".Listing" line$=GET$#xf% IF (line$="CDLISTING") THEN REPEAT:line$=GET$#xf%:UNTIL(LEFT$(line$,1)="‰"ANDVAL(MID$(line$,2))=uid%)OREOF#xf% IF0=EOF#xf%THEN no_tracks%=VAL(GET$#xf%) cd_title$=GET$#xf% FORc%=1TOno_tracks% trackname$(c%)=GET$#xf% NEXT ENDIF ENDIF CLOSE#xf% ENDIF SYS"XCD_AudioStatus",,,,,,,,cblk% TO statusr% status%=(statusr%AND&F) SYS"XCD_EnquireAddress",0,,,,,,,cblk% TO haddr% IF status%=0ORstatus%=1 THEN tr%=FNcurrenttrack ELSE tr%=0 PRINT"" + "webCD" + ""; PRINT"
"; PRINT""; PRINT""; PRINT""; PRINT""; PRINT"
[Refresh]

webCD

"; PRINT"

"; IF cd_title$="" THEN PRINT"CD "+STR$uid%;ELSE PRINTcd_title$; PRINT"

"; PRINT""+FNstate(tr%)+"
"; SYS"XCD_DiscUsed",1,fbyte%,,,,,,cblk% PRINT"
CD Position: "+FNcdtime(haddr%)+"
"; PRINT"
CD Length: "+STR$fbyte%?2+" mins "+STR$fbyte%?1+" secs
"; PRINT"
   "; FOR c%=firsttrack% TO lasttrack% IF c%<>tr% THEN PRINT"
  • "+FNtrack(c%)+"
  • "; ELSE PRINT"
  • "+FNtrack(c%)+"
  • "; NEXT PRINT "
    "; PRINT" Play     "; PRINT" Pause" PRINT"     Stop
    "; PRINT"
    "; END DEF FNcurrenttrack LOCAL tr% FOR c%=firsttrack% TO lasttrack% IF status%=0ORstatus%=1 THEN SYS"XCD_EnquireTrack",c%,fbyte%,,,,,,cblk% start%=!fbyte% SYS"XCD_EnquireTrack",c%+1,fbyte%,,,,,,cblk% end%=!fbyte% IF (end%>haddr%ORc%=lasttrack%)ANDstart%<=haddr% THEN =c% ENDIF NEXT =0 DEF FNcdtime(lba%) SYS"XCD_ConvertToMSF",0,lba%,,,,,,cblk% TO,msf%;e% IF (e%AND1)=0 THEN =STR$(msf%>>16AND&FF)+" mins "+STR$(msf%>>8AND&FF)+" secs" ELSE ="" ENDIF DEF FN2d(v%) IF v%<10 THEN ="0"+STR$v% ELSE =STR$v% DEF FNtdiff(t1%,t2%) IF (t1%>t2%) THEN SWAP(t1%,t2%) t1m%=(t1%>>16AND&FF):t1s%=(t1%>>8AND&FF) t2m%=(t2%>>16AND&FF):t2s%=(t2%>>8AND&FF) dm%=t2m%-t1m%:ds%=t2s%-t1s% IFds%<0THEN dm%-=1:ds%+=60 =STR$dm%+":"+FN2d(ds%) DEF FNtracktime LOCAL start%,smsf%,cmsf%,emsf% SYS"XCD_EnquireTrack",tr%,fbyte%,,,,,,cblk% start%=!fbyte% IFc%=lasttrack%THEN end%=uid%ELSESYS"XCD_EnquireTrack",c%+1,fbyte%,,,,,,cblk%:end%=!fbyte% SYS"XCD_ConvertToMSF",0,start%,,,,,,cblk% TO,smsf% SYS"XCD_ConvertToMSF",0,haddr%,,,,,,cblk% TO,cmsf% SYS"XCD_ConvertToMSF",0,end%,,,,,,cblk% TO,emsf% IF (e%AND1)=0 THEN length$=FNtdiff(smsf%,emsf%) position$=FNtdiff(smsf%,cmsf%) =position$+"/"+length$ ELSE ="" ENDIF DEF FNstate(t%) LOCAL cds% SYS"XCD_DriveStatus",,,,,,,,cblk% TO cds% CASE cds%AND&F OF WHEN 1 CASE status% OF WHEN 0 ="Playing track "+STR$(t%)+" ("+FNtracktime+")" WHEN 1 ="Paused track "+STR$(t%)+"" WHEN 3,5 ="Stopped" WHEN 2: ="Unknown code" WHEN 4 ="Error occured" OTHERWISE ="ERROR: UNKNOWN CODE "+STR$status%+" FROM SWI CD_AudioStatus" ENDCASE WHEN 2 ="Busy" WHEN 4 ="Not Ready (Drive empty?)" WHEN 8 ="Unavailable" OTHERWISE ="ERROR: UNKNOWN CODE "+STR$cds%+" FROM SWI CD_DriveStatus" ENDCASE REMDEF FN DEF FNreadvar(n$) LOCAL i% =FNreadvars(n$,0,i%) DEF FNtrack(i%) LOCAL c$ IF trackname$(i%)<>"" THEN="("+STR$i%+") "+trackname$(i%) ="Track "+STR$c% DEF FNreadvars(n$,i%,RETURN i%) SYS"XOS_ReadVarVal",n$,buf%,1024,i% TO ,,len,i%;e% IF i%>0AND(e%AND1)=0 THEN =FNstr(buf%,len) ="" DEF FNstr(p%,l%) LOCAL a$,c% FORc%=0TO(l%-1) a$+=CHR$(?(p%+c%)) NEXT =a$ DEF FNgetoption(env$,label$) LOCAL val$ IF (INSTR(env$,label$)) THEN val$=MID$(env$, INSTR(env$,label$)+LENlabel$+1) val$=MID$(val$, 1, INSTR(val$,"&")-1) =val$ ELSE ="" ENDIF DEF PROCimage(name$) CASE name$ OF WHEN "play": PROCimgplay WHEN "pause": PROCimgpause OTHERWISE: PROCimgstop ENDCASE ENDPROC DEF PROCimgplay FOR c%=0TO64 PRINTCHR$play%(c%); NEXT END ENDPROC DEF PROCimgpause FOR c%=0TO61 PRINTCHR$pause%(c%); NEXT END ENDPROC DEF PROCimgstop FOR c%=0TO43 PRINTCHR$stop%(c%); NEXT END ENDPROC