diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | e2de64d6f1beb9e492daf5b886e19933c1fa41dd (patch) | |
tree | 9047cf9e6b5c43878d5bf82660adae77ceee097a /kscd/libwm/include/wm_struct.h | |
download | tdemultimedia-e2de64d6f1beb9e492daf5b886e19933c1fa41dd.tar.gz tdemultimedia-e2de64d6f1beb9e492daf5b886e19933c1fa41dd.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdemultimedia@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kscd/libwm/include/wm_struct.h')
-rw-r--r-- | kscd/libwm/include/wm_struct.h | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/kscd/libwm/include/wm_struct.h b/kscd/libwm/include/wm_struct.h new file mode 100644 index 00000000..790de3b0 --- /dev/null +++ b/kscd/libwm/include/wm_struct.h @@ -0,0 +1,198 @@ +#ifndef WM_STRUCT_H +#define WM_STRUCT_H +/* + * $Id$ + * + * This file is part of WorkMan, the civilized CD player library + * (c) 1991-1997 by Steven Grimm (original author) + * (c) by Dirk Försterling (current 'author' = maintainer) + * The maintainer can be contacted by his e-mail address: + * milliByte@DeathsDoor.com + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + + + +/* + * Structure for a single track. This is pretty much self-explanatory -- + * one of these exists for each track on the current CD. + */ +struct wm_trackinfo +{ + char *songname; /* Name of song, dynamically allocated */ + char *otherdb; /* Unrecognized info for this track */ + char *otherrc; + int length; /* Length of track in seconds or Kbytes */ + int start; /* Starting position (f+s*75+m*60*75) */ + int volume; /* Per-track volume (1-32, 0 to disable) */ + int track; /* Physical track number */ + int section; /* Section number (0 if track not split) */ + int contd; /* Flag: continuation of previous track */ + int avoid; /* Flag: don't play this track. */ + int data; /* Flag: data track */ +}; + +/* + * Structure for internal playlist management. The internal playlist is + * simply the list of track ranges that are being played currently. This + * is built whenever the CD starts playing; it's used in normal and shuffle + * modes as well as playlist mode. + * + * The "starttime" element represents how much time has elapsed by the time + * we get to this entry. For instance, if the list begins with a 5-minute + * track and a 3-minute track, the third entry would have a starttime of 8 + * minutes. This is used so that the elapsed play time can be displayed + * even in shuffle or playlist modes. + * + * The last member of the list has a start track of 0, and its starttime is + * the total playing time of the playlist (which will usually be overestimated, + * since we don't play leadouts in some cases.) + */ +struct wm_play +{ + int start; /* Start track, or 0 if end of list */ + int end; /* last track plus 1 */ + int starttime; /* Number of seconds elapsed previously */ +}; + +/* + * Structure for playlists (as seen by the user.) This is simply a name + * followed by a zero-terminated list of track numbers to play. The list + * is terminated by a NULL name. + */ +struct wm_playlist +{ + char *name; /* Name of this playlist */ + int *list; /* List of tracks */ +}; + +struct wm_cdinfo +{ + char artist[84]; /* Artist's name */ + char cdname[84]; /* Disc's name */ + int ntracks; /* Number of tracks on the disc */ + int curtrack; + int curtracklen; + int length; /* Total running time in seconds */ + int autoplay; /* Start playing CD immediately */ + int playmode; /* How to play the CD */ + int volume; /* Default volume (1-32, 0 for none) */ + struct wm_trackinfo *trk; /* struct wm_trackinfo[ntracks] */ + struct wm_playlist *lists; /* User-specified playlists */ + char *whichdb; /* Which database is this entry from? */ + char *otherdb; /* Unrecognized lines from this entry */ + char *otherrc; + char *user; /* Name of originating user */ + unsigned int cddbid; /* CDDB-ID of the current disc */ + struct cdinfo *next; /* For browsers, etc. */ +}; + +/* The global variable "cd" points to the struct for the CD that's playing. */ +extern struct wm_cdinfo *cd; + +extern struct wm_playlist *new_playlist(); + +#define WM_STR_GENVENDOR "Generic" +#define WM_STR_GENMODEL "drive" +#define WM_STR_GENREV "type" + + +/* + * Drive descriptor structure. Used for access to low-level routines. + */ +struct wm_drive_proto +{ + int (*gen_init)(); + int (*gen_close)(); + int (*gen_get_trackcount)(); + int (*gen_get_cdlen)(); + int (*gen_get_trackinfo)(); + int (*gen_get_drive_status)(); + int (*gen_get_volume)(); + int (*gen_set_volume)(); + int (*gen_pause)(); + int (*gen_resume)(); + int (*gen_stop)(); + int (*gen_play)(); + int (*gen_eject)(); + int (*gen_closetray)(); + int (*gen_get_cdtext)(); +}; + +struct wm_drive +{ + int cdda; /* cdda 1, cdin 0 */ + const char *cd_device; + char *soundsystem; + char *sounddevice; + char *ctldevice; + int fd; /* File descriptor, if used by platform */ + int cdda_slave; /* File descriptor for CDDA */ + + char *vendor; /* Vendor name */ + char *model; /* Drive model */ + char *revision; /* Revision of the drive */ + void *aux; /* Pointer to optional platform-specific info */ + void *daux; /* Pointer to optional drive-specific info */ + + struct wm_drive_proto *proto; +}; + +/* + * Structure for information of the usage of cddb. + */ +struct wm_cddb { + int protocol; /* 0-off, 1-cddbp, 2-http, 3-htproxy */ + char cddb_server[84]; /* host.domain.name:port */ + char mail_adress[84]; /* user@domain.name */ + char path_to_cgi[84]; /* (/)path/to/cddb.cgi */ + char proxy_server[84]; /* host.domain.name:port */ +}; +extern struct wm_cddb cddb; + + +/* + * Each platform has to define generic functions, so may as well declare + * them all here to save space. + * These functions should never be seen outside libworkman. So I don't care + * about the wm_ naming convention here. + */ +int gen_init( struct wm_drive *d ); +int gen_close( struct wm_drive *d ); +int gen_get_trackcount(struct wm_drive *d, int *tracks); +int gen_get_cdlen(struct wm_drive *d, int *frames); +int gen_get_trackinfo(struct wm_drive *d, int track, int *data, int *startframe); +int gen_get_drive_status( struct wm_drive *d, int oldmode, + int *mode, int *pos, int *track, int *ind ); +int gen_set_volume( struct wm_drive *d, int left, int right ); +int gen_get_volume( struct wm_drive *d, int *left, int *right ); +int gen_pause(struct wm_drive *d); +int gen_resume(struct wm_drive *d); +int gen_stop(struct wm_drive *d); +int gen_play(struct wm_drive *d, int start, int end, int realstart); +int gen_eject(struct wm_drive *d); +int gen_closetray(struct wm_drive *d); +int gen_get_cdtext(struct wm_drive *d, unsigned char **pp_buffer, int *p_buffer_lenght); + +int find_drive_struct(const char *vendor, const char *model, const char *rev); + + +struct cdtext_info* get_glob_cdtext(struct wm_drive*, int); +void free_cdtext(void); +const char* gen_status(int); + +#endif /* WM_STRUCT_H */ |