annotate src/vtx/ayemu_vtxfile.h @ 749:26ff35aa9b2b trunk

[svn] - vtx input plugin based on a submission from Pavel Vymetalek.
author nenolod
date Wed, 28 Feb 2007 04:38:53 -0800
parents
children 77dbd83ea6e4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
749
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
1 #ifndef _AYEMU_vtxfile_h
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
2 #define _AYEMU_vtxfile_h
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
3
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
4 #include <glib.h>
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
5 #include <audacious/vfs.h>
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
6 #include "ayemu_8912.h"
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
7
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
8 /* The following constants and data structure comes from
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
9 VTX file format description. You can see them on
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
10 http://
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
11 */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
12
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
13 #define AYEMU_VTX_NTSTRING_MAX 255
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
14
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
15 typedef char NTstring[AYEMU_VTX_NTSTRING_MAX+1];
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
16
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
17 BEGIN_C_DECLS
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
18
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
19 /** VTX file format header and status of open file
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
20 * \internal
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
21 *
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
22 * This structure used for save VTX file format header's data
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
23 * (song author, title and so on).
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
24 */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
25 struct VTXFileHeader
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
26 {
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
27 ayemu_chip_t chiptype; /**< Type of sound chip */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
28 int stereo; /**< Type of stereo: 0-ABC, 1-BCA... (see VTX format description) */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
29 int loop; /**< song loop */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
30 int chipFreq; /**< AY chip freq (1773400 for ZX) */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
31 int playerFreq; /**< 50 Hz for ZX, 60 Hz for yamaha */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
32 int year; /**< year song composed */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
33 NTstring title; /**< song title */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
34 NTstring author; /**< song author */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
35 NTstring from; /**< song from */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
36 NTstring tracker; /**< tracker */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
37 NTstring comment; /**< comment */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
38 size_t regdata_size; /**< size of unpacked data. Used in uncompression alhoritm. */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
39 };
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
40
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
41 /**
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
42 * \defgroup vtxfile Functions for extract data from vtx files
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
43 */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
44 /*@{*/
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
45
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
46
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
47 /** structure for VTX file format handler
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
48 * \internal
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
49 * It stores VTX file header and current state
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
50 * (open file pointer, extracted register data, etc).
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
51 */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
52 typedef struct
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
53 {
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
54 VFSFile *fp; /**< opening .vtx file pointer */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
55 struct VTXFileHeader hdr; /**< VTX header data */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
56 char *regdata; /**< unpacked song data */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
57 int pos; /**< current data frame offset */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
58 } ayemu_vtx_t;
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
59
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
60
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
61 /** Open vtx file and read vtx file header
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
62 \arg \c vtx - pointer to ayemu_vtx_t structure
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
63 \arg \c filename - filename for open vtx file
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
64 \return Return true if success, else false
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
65 */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
66 EXTERN int ayemu_vtx_open (ayemu_vtx_t *vtx, const char *filename);
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
67
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
68 /** Read and encode lha data from .vtx file.
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
69 * \return Return pointer to unpacked data or NULL.
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
70 */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
71 EXTERN char *ayemu_vtx_load_data (ayemu_vtx_t *vtx);
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
72
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
73 /** Get next 14-bytes frame of AY register data.
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
74 * \return Return value: true if sucess, false if not enought data.
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
75 */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
76 EXTERN int ayemu_vtx_get_next_frame (ayemu_vtx_t *vtx, char *regs);
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
77
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
78 /** Print formated file name. If fmt is NULL the default format %a - %t will used
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
79 * \return none.
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
80 */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
81 EXTERN void ayemu_vtx_sprintname (const ayemu_vtx_t *vtx, char *buf, const int sz, const char *fmt);
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
82
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
83 /** Free all of allocaded resource for this file.
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
84 * You must call this function on end work with vtx file
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
85 */
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
86 EXTERN void ayemu_vtx_free (ayemu_vtx_t *vtx);
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
87
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
88 /*@}*/
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
89
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
90 END_C_DECLS
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
91
26ff35aa9b2b [svn] - vtx input plugin based on a submission from Pavel Vymetalek.
nenolod
parents:
diff changeset
92 #endif