~ubuntu-branches/debian/lenny/fpc/lenny

« back to all changes in this revision

Viewing changes to packages/extra/amunits/otherlibs/ahi/units/ahi.pas

  • Committer: Bazaar Package Importer
  • Author(s): Mazen Neifer, Torsten Werner, Mazen Neifer
  • Date: 2008-05-17 17:12:11 UTC
  • mfrom: (3.1.9 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080517171211-9qi33xhd9evfa0kg
Tags: 2.2.0-dfsg1-9
[ Torsten Werner ]
* Add Mazen Neifer to Uploaders field.

[ Mazen Neifer ]
* Moved FPC sources into a version dependent directory from /usr/share/fpcsrc
  to /usr/share/fpcsrc/${FPCVERSION}. This allow installing more than on FPC
  release.
* Fixed far call issue in compiler preventing building huge binearies.
  (closes: #477743)
* Updated building dependencies, recomennded and suggested packages.
* Moved fppkg to fp-utils as it is just a helper tool and is not required by
  compiler.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
{
2
 
  This file is part of the Free Pascal run time library.
3
 
 
4
 
  A file in Amiga system run time library.
5
 
  Copyright (c) 2003 by Nils Sj�holm.
6
 
  member of the Amiga RTL development team.
7
 
 
8
 
  This is a unit for ahi.library
9
 
 
10
 
  See the file COPYING.FPC, included in this distribution,
11
 
  for details about the copyright.
12
 
 
13
 
  This program is distributed in the hope that it will be useful,
14
 
  but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16
 
 
17
 
**********************************************************************}
18
 
{
19
 
  History:
20
 
  
21
 
  First version of this unit.
22
 
  14 Jan 2003.
23
 
  
24
 
  Changed cardinal > longword.
25
 
  Added startcode for unit.
26
 
  12 Feb 2003.
27
 
  
28
 
  nils.sjoholm@mailbox.swipnet.se Nils Sjoholm
29
 
}  
30
 
 
31
 
{$mode objfpc}
32
 
{$I useamigasmartlink.inc}
33
 
{$ifdef use_amiga_smartlink}
34
 
   {$smartlink on}
35
 
{$endif use_amiga_smartlink}
36
 
 
37
 
UNIT AHI;
38
 
 
39
 
INTERFACE
40
 
 
41
 
USES Exec,utility;
42
 
 
43
 
VAR AHIBase : pLibrary;
44
 
 
45
 
{
46
 
        $VER: ahi.h 4.2 (27.4.97)
47
 
 
48
 
        ahi.device definitions
49
 
 
50
 
        (C) Copyright 1994-1997 Martin Blom
51
 
        All Rights Reserved.
52
 
 
53
 
     (TAB SIZE: 8)
54
 
   }
55
 
 
56
 
  type
57
 
 
58
 
     PFixed = ^Fixed;
59
 
     Fixed = LONGINT;
60
 
  { A fixed-point value, 16 bits
61
 
    to the left of the point and
62
 
    16 bits to the right  }
63
 
 
64
 
  type
65
 
 
66
 
     Psposition = ^sposition;
67
 
     sposition = Fixed;
68
 
 
69
 
  { AHIAudioCtrl  }
70
 
  { Lots of private data follows!  }
71
 
     PAHIAudioCtrl = ^tAHIAudioCtrl;
72
 
     tAHIAudioCtrl = record
73
 
          ahiac_UserData : APTR;
74
 
       end;
75
 
 
76
 
  { AHISoundMessage  }
77
 
     PAHISoundMessage = ^tAHISoundMessage;
78
 
     tAHISoundMessage = record
79
 
          ahism_Channel : UWORD;
80
 
       end;
81
 
 
82
 
  { AHIRecordMessage  }
83
 
     PAHIRecordMessage = ^tAHIRecordMessage;
84
 
     tAHIRecordMessage = record
85
 
          ahirm_Type : ULONG;     { Format of buffer (object)  }
86
 
          ahirm_Buffer : APTR;    { Pointer to the sample array  }
87
 
          ahirm_Length : ULONG;   { Number of sample frames in buffer  }
88
 
       end;
89
 
 
90
 
  { AHISampleInfo  }
91
 
     PAHISampleInfo = ^tAHISampleInfo;
92
 
     tAHISampleInfo = record
93
 
          ahisi_Type : ULONG;      { Format of samples  }
94
 
          ahisi_Address : APTR;    { Address to array of samples  }
95
 
          ahisi_Length : ULONG;    { Number of samples in array  }
96
 
       end;
97
 
 
98
 
  { AHIAudioModeRequester  }
99
 
     PAHIAudioModeRequester = ^tAHIAudioModeRequester;
100
 
     tAHIAudioModeRequester = record
101
 
          ahiam_AudioID : ULONG;      { Selected audio mode  }
102
 
          ahiam_MixFreq : ULONG;      { Selected mixing/sampling frequency  }
103
 
          ahiam_LeftEdge : WORD;      { Coordinates of requester on exit  }
104
 
          ahiam_TopEdge : WORD;
105
 
          ahiam_Width : WORD;
106
 
          ahiam_Height : WORD;
107
 
          ahiam_InfoOpened : BOOL;    { Info window opened on exit?  }
108
 
          ahiam_InfoLeftEdge : WORD;  { Last coordinates of Info window  }
109
 
          ahiam_InfoTopEdge : WORD;
110
 
          ahiam_InfoWidth : WORD;
111
 
          ahiam_InfoHeight : WORD;
112
 
          ahiam_UserData : APTR;      { You can store your own data here  }
113
 
          { Lots of private data follows!  }
114
 
       end;
115
 
 
116
 
  { AHIEffMasterVolume  }
117
 
     PAHIEffMasterVolume = ^tAHIEffMasterVolume;
118
 
     tAHIEffMasterVolume = record
119
 
          ahie_Effect : ULONG;     { Set to AHIET_MASTERVOLUME  }
120
 
          ahiemv_Volume : Fixed;   { See autodocs for range!  }
121
 
       end;
122
 
 
123
 
  { AHIEffOutputBuffer  }
124
 
     PAHIEffOutputBuffer = ^tAHIEffOutputBuffer;
125
 
     tAHIEffOutputBuffer = record
126
 
          ahie_Effect : ULONG;     { Set to AHIET_OUTPUTBUFFER  }
127
 
          ahieob_Func : PHook;
128
 
          { These fields are filled by AHI  }
129
 
          ahieob_Type : ULONG;     { Format of buffer  }
130
 
          ahieob_Buffer : APTR;    { Pointer to the sample array  }
131
 
          ahieob_Length : ULONG;   { Number of sample frames in buffer  }
132
 
       end;
133
 
 
134
 
  { AHIEffDSPMask (V4)  }
135
 
     PAHIEffDSPMask = ^tAHIEffDSPMask;
136
 
     tAHIEffDSPMask = record
137
 
          ahie_Effect : ULONG;       { Set to AHIET_DSPMASK  }
138
 
          ahiedm_Channels : UWORD;   { Number of elements in array  }
139
 
          ahiedm_Mask : array[0..0] of UBYTE;   { Here follows the array  }
140
 
       end;
141
 
 
142
 
 
143
 
  const
144
 
     AHIEDM_WET = 0;
145
 
     AHIEDM_DRY = 1;
146
 
  { AHIEffDSPEcho (V4)  }
147
 
  type
148
 
     PAHIDSPEcho = ^tAHIDSPEcho;
149
 
     tAHIDSPEcho = record
150
 
          ahie_Effect : ULONG;     { Set to AHIET_DSPECHO  }
151
 
          ahiede_Delay : ULONG;    { In samples  }
152
 
          ahiede_Feedback : Fixed;
153
 
          ahiede_Mix : Fixed;
154
 
          ahiede_Cross : Fixed;
155
 
       end;
156
 
 
157
 
  { AHIEffChannelInfo (V4)  }
158
 
     PAHIEffChannelInfo = ^tAHIEffChannelInfo;
159
 
     tAHIEffChannelInfo = record
160
 
          ahie_Effect : ULONG;    { Set to AHIET_CHANNELINFO  }
161
 
          ahieci_Func : PHook;
162
 
          ahieci_Channels : UWORD;
163
 
          ahieci_Pad : UWORD;
164
 
          { The rest is filled by AHI  }
165
 
          ahieci_Offset : array[0..0] of ULONG;   { The array follows  }
166
 
       end;
167
 
 
168
 
  {   TAGS  }
169
 
 
170
 
  const
171
 
     AHI_TagBase = TAG_USER;
172
 
     AHI_TagBaseR = AHI_TagBase or $8000;
173
 
  { AHI_AllocAudioA tags  }
174
 
  { Desired audio mode  }
175
 
     AHIA_AudioID = AHI_TagBase + 1;
176
 
  { Suggested mixing frequency  }
177
 
     AHIA_MixFreq = AHI_TagBase + 2;
178
 
  { Suggested number of channels  }
179
 
     AHIA_Channels = AHI_TagBase + 3;
180
 
  { Number of sounds to use  }
181
 
     AHIA_Sounds = AHI_TagBase + 4;
182
 
  { End-of-Sound Hook  }
183
 
     AHIA_SoundFunc = AHI_TagBase + 5;
184
 
  { Player Hook  }
185
 
     AHIA_PlayerFunc = AHI_TagBase + 6;
186
 
  { Frequency for player Hook (Fixed) }
187
 
     AHIA_PlayerFreq = AHI_TagBase + 7;
188
 
  { Minimum Frequency for player Hook  }
189
 
     AHIA_MinPlayerFreq = AHI_TagBase + 8;
190
 
  { Maximum Frequency for player Hook  }
191
 
     AHIA_MaxPlayerFreq = AHI_TagBase + 9;
192
 
  { Sample recording Hook  }
193
 
     AHIA_RecordFunc = AHI_TagBase + 10;
194
 
  { What to put in ahiac_UserData  }
195
 
     AHIA_UserData = AHI_TagBase + 11;
196
 
  { AHI_PlayA tags (V4)  }
197
 
  { All command tags should be...  }
198
 
     AHIP_BeginChannel = AHI_TagBase + 40;
199
 
  { ... enclosed by these tags.  }
200
 
     AHIP_EndChannel = AHI_TagBase + 41;
201
 
     AHIP_Freq = AHI_TagBase + 50;
202
 
     AHIP_Vol = AHI_TagBase + 51;
203
 
     AHIP_Pan = AHI_TagBase + 52;
204
 
     AHIP_Sound = AHI_TagBase + 53;
205
 
     AHIP_Offset = AHI_TagBase + 54;
206
 
     AHIP_Length = AHI_TagBase + 55;
207
 
     AHIP_LoopFreq = AHI_TagBase + 60;
208
 
     AHIP_LoopVol = AHI_TagBase + 61;
209
 
     AHIP_LoopPan = AHI_TagBase + 62;
210
 
     AHIP_LoopSound = AHI_TagBase + 63;
211
 
     AHIP_LoopOffset = AHI_TagBase + 64;
212
 
     AHIP_LoopLength = AHI_TagBase + 65;
213
 
  { AHI_ControlAudioA tags  }
214
 
  { Boolean  }
215
 
     AHIC_Play = AHI_TagBase + 80;
216
 
  { Boolean  }
217
 
     AHIC_Record = AHI_TagBase + 81;
218
 
     AHIC_MonitorVolume = AHI_TagBase + 82;
219
 
  { ti_Data is pointer to Fixed (LONG)  }
220
 
     AHIC_MonitorVolume_Query = AHI_TagBase + 83;
221
 
  { ti_Data is pointer to ULONG  }
222
 
     AHIC_MixFreq_Query = AHI_TagBase + 84;
223
 
  { --- New for V2, they will be ignored by V1 ---  }
224
 
     AHIC_InputGain = AHI_TagBase + 85;
225
 
  { ti_Data is pointer to Fixed (LONG)  }
226
 
     AHIC_InputGain_Query = AHI_TagBase + 86;
227
 
     AHIC_OutputVolume = AHI_TagBase + 87;
228
 
  { ti_Data is pointer to Fixed (LONG)  }
229
 
     AHIC_OutputVolume_Query = AHI_TagBase + 88;
230
 
     AHIC_Input = AHI_TagBase + 89;
231
 
  { ti_Data is pointer to ULONG  }
232
 
     AHIC_Input_Query = AHI_TagBase + 90;
233
 
     AHIC_Output = AHI_TagBase + 91;
234
 
  { ti_Data is pointer to ULONG  }
235
 
     AHIC_Output_Query = AHI_TagBase + 92;
236
 
  { AHI_GetAudioAttrsA tags  }
237
 
     AHIDB_AudioID = AHI_TagBase + 100;
238
 
  { Pointer to name of driver  }
239
 
     AHIDB_Driver = AHI_TagBaseR + 101;
240
 
  { Private!  }
241
 
     AHIDB_Flags = AHI_TagBase + 102;
242
 
  { Boolean  }
243
 
     AHIDB_Volume = AHI_TagBase + 103;
244
 
  { Boolean  }
245
 
     AHIDB_Panning = AHI_TagBase + 104;
246
 
  { Boolean  }
247
 
     AHIDB_Stereo = AHI_TagBase + 105;
248
 
  { Boolean  }
249
 
     AHIDB_HiFi = AHI_TagBase + 106;
250
 
  { Boolean  }
251
 
     AHIDB_PingPong = AHI_TagBase + 107;
252
 
  { Private!  }
253
 
     AHIDB_MultTable = AHI_TagBase + 108;
254
 
  { Pointer to name of this mode  }
255
 
     AHIDB_Name = AHI_TagBaseR + 109;
256
 
  { Output bits  }
257
 
     AHIDB_Bits = AHI_TagBase + 110;
258
 
  { Max supported channels  }
259
 
     AHIDB_MaxChannels = AHI_TagBase + 111;
260
 
  { Min mixing freq. supported  }
261
 
     AHIDB_MinMixFreq = AHI_TagBase + 112;
262
 
  { Max mixing freq. supported  }
263
 
     AHIDB_MaxMixFreq = AHI_TagBase + 113;
264
 
  { Boolean  }
265
 
     AHIDB_Record = AHI_TagBase + 114;
266
 
     AHIDB_Frequencies = AHI_TagBase + 115;
267
 
  { ti_Data is frequency index  }
268
 
     AHIDB_FrequencyArg = AHI_TagBase + 116;
269
 
     AHIDB_Frequency = AHI_TagBase + 117;
270
 
  { Pointer to driver author name  }
271
 
     AHIDB_Author = AHI_TagBase + 118;
272
 
  { Pointer to driver copyright notice  }
273
 
     AHIDB_Copyright = AHI_TagBase + 119;
274
 
  { Pointer to driver version string  }
275
 
     AHIDB_Version = AHI_TagBase + 120;
276
 
  { Pointer to driver annotation text  }
277
 
     AHIDB_Annotation = AHI_TagBase + 121;
278
 
  { Specifies the string buffer size  }
279
 
     AHIDB_BufferLen = AHI_TagBase + 122;
280
 
  { ti_Data is frequency!  }
281
 
     AHIDB_IndexArg = AHI_TagBase + 123;
282
 
     AHIDB_Index = AHI_TagBase + 124;
283
 
  { Boolean  }
284
 
     AHIDB_Realtime = AHI_TagBase + 125;
285
 
  { It's sample  frames   }
286
 
     AHIDB_MaxPlaySamples = AHI_TagBase + 126;
287
 
  { It's sample  frames   }
288
 
     AHIDB_MaxRecordSamples = AHI_TagBase + 127;
289
 
  { Boolean  }
290
 
     AHIDB_FullDuplex = AHI_TagBase + 129;
291
 
  { --- New for V2, they will be ignored by V1 ---  }
292
 
     AHIDB_MinMonitorVolume = AHI_TagBase + 130;
293
 
     AHIDB_MaxMonitorVolume = AHI_TagBase + 131;
294
 
     AHIDB_MinInputGain = AHI_TagBase + 132;
295
 
     AHIDB_MaxInputGain = AHI_TagBase + 133;
296
 
     AHIDB_MinOutputVolume = AHI_TagBase + 134;
297
 
     AHIDB_MaxOutputVolume = AHI_TagBase + 135;
298
 
     AHIDB_Inputs = AHI_TagBase + 136;
299
 
  { ti_Data is input index  }
300
 
     AHIDB_InputArg = AHI_TagBase + 137;
301
 
     AHIDB_Input = AHI_TagBase + 138;
302
 
     AHIDB_Outputs = AHI_TagBase + 139;
303
 
  { ti_Data is input index  }
304
 
     AHIDB_OutputArg = AHI_TagBase + 140;
305
 
     AHIDB_Output = AHI_TagBase + 141;
306
 
  { --- New for V4, they will be ignored by V2 and earlier ---  }
307
 
  { Private!  }
308
 
     AHIDB_Data = AHI_TagBaseR + 142;
309
 
  { AHI_BestAudioIDA tags  }
310
 
  { --- New for V4, they will be ignored by V2 and earlier ---  }
311
 
     AHIB_Dizzy = AHI_TagBase + 190;
312
 
  { AHI_AudioRequestA tags  }
313
 
  { Window control  }
314
 
  { Parent window  }
315
 
     AHIR_Window = AHI_TagBase + 200;
316
 
  { Screen to open on if no window  }
317
 
     AHIR_Screen = AHI_TagBase + 201;
318
 
  { Name of public screen  }
319
 
     AHIR_PubScreenName = AHI_TagBase + 202;
320
 
  { Allocate private IDCMP?  }
321
 
     AHIR_PrivateIDCMP = AHI_TagBase + 203;
322
 
  { Function to handle IntuiMessages  }
323
 
     AHIR_IntuiMsgFunc = AHI_TagBase + 204;
324
 
  { Block input in AHIR_Window?  }
325
 
     AHIR_SleepWindow = AHI_TagBase + 205;
326
 
  { What to put in ahiam_UserData  }
327
 
     AHIR_UserData = AHI_TagBase + 206;
328
 
  { Text display  }
329
 
  { Text font to use for gadget text  }
330
 
     AHIR_TextAttr = AHI_TagBase + 220;
331
 
  { Locale to use for text  }
332
 
     AHIR_Locale = AHI_TagBase + 221;
333
 
  { Title of requester  }
334
 
     AHIR_TitleText = AHI_TagBase + 222;
335
 
  { Positive gadget text  }
336
 
     AHIR_PositiveText = AHI_TagBase + 223;
337
 
  { Negative gadget text  }
338
 
     AHIR_NegativeText = AHI_TagBase + 224;
339
 
  { Initial settings  }
340
 
  { Initial requester coordinates  }
341
 
     AHIR_InitialLeftEdge = AHI_TagBase + 240;
342
 
     AHIR_InitialTopEdge = AHI_TagBase + 241;
343
 
  { Initial requester dimensions  }
344
 
     AHIR_InitialWidth = AHI_TagBase + 242;
345
 
     AHIR_InitialHeight = AHI_TagBase + 243;
346
 
  { Initial audio mode id  }
347
 
     AHIR_InitialAudioID = AHI_TagBase + 244;
348
 
  { Initial mixing/sampling frequency  }
349
 
     AHIR_InitialMixFreq = AHI_TagBase + 245;
350
 
  { Info window initially opened?  }
351
 
     AHIR_InitialInfoOpened = AHI_TagBase + 246;
352
 
  { Initial Info window coords.  }
353
 
     AHIR_InitialInfoLeftEdge = AHI_TagBase + 247;
354
 
     AHIR_InitialInfoTopEdge = AHI_TagBase + 248;
355
 
  { Not used!  }
356
 
     AHIR_InitialInfoWidth = AHI_TagBase + 249;
357
 
  { Not used!  }
358
 
     AHIR_InitialInfoHeight = AHI_TagBase + 250;
359
 
  { Options  }
360
 
  { Allow selection of mixing frequency?  }
361
 
     AHIR_DoMixFreq = AHI_TagBase + 260;
362
 
  { Allow selection of default mode? (V4)  }
363
 
     AHIR_DoDefaultMode = AHI_TagBase + 261;
364
 
  { Filtering  }
365
 
  { Pointer to filter taglist  }
366
 
     AHIR_FilterTags = AHI_TagBase + 270;
367
 
  { Function to filter mode id's  }
368
 
     AHIR_FilterFunc = AHI_TagBase + 271;
369
 
  {   DEFS  }
370
 
     AHINAME : PChar = 'ahi.device';
371
 
  { Invalid Audio ID  }
372
 
     AHI_INVALID_ID =  not (0);
373
 
  { Only for AHI_AllocAudioA()!  }
374
 
     AHI_DEFAULT_ID = $00000000;
375
 
  { Special sample render Audio ID  }
376
 
     AHI_LOOPBACK_ID = $00000001;
377
 
  { Only for AHI_AllocAudioA()!  }
378
 
     AHI_DEFAULT_FREQ = 0;
379
 
  { Special frequency for AHI_SetFreq()  }
380
 
     AHI_MIXFREQ =  not (0);
381
 
  { Turns a channel off  }
382
 
     AHI_NOSOUND = $ffff;
383
 
  { Set#? Flags  }
384
 
     AHISF_IMM = 1 shl 0;
385
 
     AHISB_IMM = 0;
386
 
  { Effect Types  }
387
 
  { OR with effect to disable  }
388
 
     AHIET_CANCEL = 1 shl 31;
389
 
     AHIET_MASTERVOLUME = 1;
390
 
     AHIET_OUTPUTBUFFER = 2;
391
 
  { --- New for V4 ---  }
392
 
     AHIET_DSPMASK = 3;
393
 
     AHIET_DSPECHO = 4;
394
 
     AHIET_CHANNELINFO = 5;
395
 
  { Sound Types  }
396
 
  { Private  }
397
 
     AHIST_NOTYPE =  not (0);
398
 
  { 8 or 16 bit sample  }
399
 
     AHIST_SAMPLE = 0;
400
 
  { Dynamic sample  }
401
 
     AHIST_DYNAMICSAMPLE = 1;
402
 
  { The input from your sampler  }
403
 
     AHIST_INPUT = 1 shl 29;
404
 
  { Private  }
405
 
     AHIST_BW = 1 shl 30;
406
 
  { Sample types  }
407
 
  { Note that only AHIST_M8S, AHIST_S8S, AHIST_M16S and AHIST_S16S
408
 
     are supported by AHI_LoadSound().  }
409
 
  { Mono, 8 bit signed (BYTE)  }
410
 
     AHIST_M8S = 0;
411
 
  { Mono, 16 bit signed (WORD)  }
412
 
     AHIST_M16S = 1;
413
 
  { Stereo, 8 bit signed (2�BYTE)  }
414
 
     AHIST_S8S = 2;
415
 
  { Stereo, 16 bit signed (2�WORD)  }
416
 
     AHIST_S16S = 3;
417
 
  { Mono, 32 bit signed (LONG)  }
418
 
     AHIST_M32S = 8;
419
 
  { Stereo, 32 bit signed (2�LONG)  }
420
 
     AHIST_S32S = 10;
421
 
  { OBSOLETE!  }
422
 
     AHIST_M8U = 4;
423
 
  { Error codes  }
424
 
  { No error  }
425
 
     AHIE_OK = 0;
426
 
  { Out of memory  }
427
 
     AHIE_NOMEM = 1;
428
 
  { Unknown sound type  }
429
 
     AHIE_BADSOUNDTYPE = 2;
430
 
  { Unknown/unsupported sample type  }
431
 
     AHIE_BADSAMPLETYPE = 3;
432
 
  { User-triggered abortion  }
433
 
     AHIE_ABORTED = 4;
434
 
  { Error, but unknown  }
435
 
     AHIE_UNKNOWN = 5;
436
 
  { CMD_WRITE/CMD_READ failure  }
437
 
     AHIE_HALFDUPLEX = 6;
438
 
  { DEVICE INTERFACE DEFINITIONS FOLLOWS                                     }
439
 
  { Device units  }
440
 
     AHI_DEFAULT_UNIT = 0;
441
 
     AHI_NO_UNIT = 255;
442
 
  { The preference file  }
443
 
     ID_AHIU = $41484955;
444
 
     ID_AHIG = $41484947;
445
 
 
446
 
 
447
 
  type
448
 
     PAHIUnitPrefs = ^tAHIUnitPrefs;
449
 
     tAHIUnitPrefs = record
450
 
          ahiup_Unit : UBYTE;
451
 
          ahiup_Pad : UBYTE;
452
 
          ahiup_Channels : UWORD;
453
 
          ahiup_AudioMode : ULONG;
454
 
          ahiup_Frequency : ULONG;
455
 
          ahiup_MonitorVolume : Fixed;
456
 
          ahiup_InputGain : Fixed;
457
 
          ahiup_OutputVolume : Fixed;
458
 
          ahiup_Input : ULONG;
459
 
          ahiup_Output : ULONG;
460
 
       end;
461
 
 
462
 
 
463
 
 
464
 
     PAHIGlobalPrefs = ^tAHIGlobalPrefs;
465
 
     tAHIGlobalPrefs = record
466
 
          ahigp_DebugLevel : UWORD;       { Range: 0-3 (for None, Low,}
467
 
          ahigp_DisableSurround : BOOL;   { High and All)  }
468
 
          ahigp_DisableEcho : BOOL;
469
 
          ahigp_FastEcho : BOOL;
470
 
          ahigp_MaxCPU : Fixed;
471
 
          ahigp_ClipMasterVolume : BOOL;
472
 
       end;
473
 
 
474
 
  { Debug levels  }
475
 
 
476
 
  const
477
 
     AHI_DEBUG_NONE = 0;
478
 
     AHI_DEBUG_LOW = 1;
479
 
     AHI_DEBUG_HIGH = 2;
480
 
     AHI_DEBUG_ALL = 3;
481
 
 
482
 
  { AHIRequest  }
483
 
  type
484
 
     PAHIRequest = ^tAHIRequest;
485
 
     tAHIRequest = record
486
 
          ahir_Std : tIOStdReq;                  { Standard IO request  }
487
 
          ahir_Version : UWORD;                  { Needed version  }
488
 
          { --- New for V4, they will be ignored by V2 and earlier ---  }
489
 
          ahir_Pad1 : UWORD;
490
 
          ahir_Private : array[0..1] of ULONG;   { Hands off!  }
491
 
          ahir_Type : ULONG;                     { Sample format  }
492
 
          ahir_Frequency : ULONG;                { Sample/Record frequency  }
493
 
          ahir_Volume : Fixed;                   { Sample volume  }
494
 
          ahir_Position : Fixed;                 { Stereo position  }
495
 
          ahir_Link : PAHIRequest;               { For double buffering  }
496
 
       end;
497
 
 
498
 
  { Flags for OpenDevice()  }
499
 
 
500
 
  const
501
 
     AHIDF_NOMODESCAN = 1 shl 0;
502
 
     AHIDB_NOMODESCAN = 0;
503
 
 
504
 
 
505
 
 
506
 
FUNCTION AHI_AddAudioMode(a0arg : pTagItem) : longword;
507
 
FUNCTION AHI_AllocAudioA(tagList : pTagItem) : pAHIAudioCtrl;
508
 
FUNCTION AHI_AllocAudioRequestA(tagList : pTagItem) : pAHIAudioModeRequester;
509
 
FUNCTION AHI_AudioRequestA(Requester : pAHIAudioModeRequester; tagList : pTagItem) : BOOLEAN;
510
 
FUNCTION AHI_BestAudioIDA(tagList : pTagItem) : longword;
511
 
FUNCTION AHI_ControlAudioA(AudioCtrl : pAHIAudioCtrl; tagList : pTagItem) : longword;
512
 
PROCEDURE AHI_FreeAudio(AudioCtrl : pAHIAudioCtrl);
513
 
PROCEDURE AHI_FreeAudioRequest(Requester : pAHIAudioModeRequester);
514
 
FUNCTION AHI_GetAudioAttrsA(ID : longword; Audioctrl : pAHIAudioCtrl; tagList : pTagItem) : BOOLEAN;
515
 
PROCEDURE AHI_KillAudio;
516
 
FUNCTION AHI_LoadModeFile(a0arg : pCHAR) : longword;
517
 
FUNCTION AHI_LoadSound(Sound : WORD; _Type : longword; Info : POINTER; AudioCtrl : pAHIAudioCtrl) : longword;
518
 
FUNCTION AHI_NextAudioID(Last_ID : longword) : longword;
519
 
PROCEDURE AHI_PlayA(Audioctrl : pAHIAudioCtrl; tagList : pTagItem);
520
 
FUNCTION AHI_RemoveAudioMode(d0arg : longword) : longword;
521
 
FUNCTION AHI_SampleFrameSize(SampleType : longword) : longword;
522
 
FUNCTION AHI_SetEffect(Effect : POINTER; AudioCtrl : pAHIAudioCtrl) : longword;
523
 
PROCEDURE AHI_SetFreq(Channel : WORD; Freq : longword; AudioCtrl : pAHIAudioCtrl; Flags : longword);
524
 
PROCEDURE AHI_SetSound(Channel : WORD; Sound : WORD; Offset : longword; len : LONGINT; AudioCtrl : pAHIAudioCtrl; Flags : longword);
525
 
PROCEDURE AHI_SetVol(Channel : WORD; Volume : LONGINT; Pan : LONGINT; AudioCtrl : pAHIAudioCtrl; Flags : longword);
526
 
PROCEDURE AHI_UnloadSound(Sound : WORD; Audioctrl : pAHIAudioCtrl);
527
 
{
528
 
 Functions and procedures with array of const go here
529
 
}
530
 
FUNCTION AHI_AllocAudio(const tagList : Array Of Const) : pAHIAudioCtrl;
531
 
FUNCTION AHI_AllocAudioRequest(const tagList : Array Of Const) : pAHIAudioModeRequester;
532
 
FUNCTION AHI_AudioRequest(Requester : pAHIAudioModeRequester; const tagList : Array Of Const) : BOOLEAN;
533
 
FUNCTION AHI_BestAudioID(const tagList : Array Of Const) : longword;
534
 
FUNCTION AHI_ControlAudio(AudioCtrl : pAHIAudioCtrl; const tagList : Array Of Const) : longword;
535
 
FUNCTION AHI_GetAudioAttrs(ID : longword; Audioctrl : pAHIAudioCtrl; const tagList : Array Of Const) : BOOLEAN;
536
 
PROCEDURE AHI_Play(Audioctrl : pAHIAudioCtrl; const tagList : Array Of Const);
537
 
 
538
 
{You can remove this include and use a define instead}
539
 
{$I useautoopenlib.inc}
540
 
{$ifdef use_init_openlib}
541
 
procedure InitAHILibrary;
542
 
{$endif use_init_openlib}
543
 
 
544
 
{This is a variable that knows how the unit is compiled}
545
 
var
546
 
    AHIIsCompiledHow : longint;
547
 
IMPLEMENTATION
548
 
 
549
 
uses
550
 
{$ifndef dont_use_openlib}
551
 
msgbox,
552
 
{$endif dont_use_openlib}
553
 
tagsarray;
554
 
 
555
 
FUNCTION AHI_AddAudioMode(a0arg : pTagItem) : longword;
556
 
BEGIN
557
 
  ASM
558
 
        MOVE.L  A6,-(A7)
559
 
        MOVEA.L a0arg,A0
560
 
        MOVEA.L AHIBase,A6
561
 
        JSR     -150(A6)
562
 
        MOVEA.L (A7)+,A6
563
 
        MOVE.L  D0,@RESULT
564
 
  END;
565
 
END;
566
 
 
567
 
FUNCTION AHI_AllocAudioA(tagList : pTagItem) : pAHIAudioCtrl;
568
 
BEGIN
569
 
  ASM
570
 
        MOVE.L  A6,-(A7)
571
 
        MOVEA.L tagList,A1
572
 
        MOVEA.L AHIBase,A6
573
 
        JSR     -042(A6)
574
 
        MOVEA.L (A7)+,A6
575
 
        MOVE.L  D0,@RESULT
576
 
  END;
577
 
END;
578
 
 
579
 
FUNCTION AHI_AllocAudioRequestA(tagList : pTagItem) : pAHIAudioModeRequester;
580
 
BEGIN
581
 
  ASM
582
 
        MOVE.L  A6,-(A7)
583
 
        MOVEA.L tagList,A0
584
 
        MOVEA.L AHIBase,A6
585
 
        JSR     -120(A6)
586
 
        MOVEA.L (A7)+,A6
587
 
        MOVE.L  D0,@RESULT
588
 
  END;
589
 
END;
590
 
 
591
 
FUNCTION AHI_AudioRequestA(Requester : pAHIAudioModeRequester; tagList : pTagItem) : BOOLEAN;
592
 
BEGIN
593
 
  ASM
594
 
        MOVE.L  A6,-(A7)
595
 
        MOVEA.L Requester,A0
596
 
        MOVEA.L tagList,A1
597
 
        MOVEA.L AHIBase,A6
598
 
        JSR     -126(A6)
599
 
        MOVEA.L (A7)+,A6
600
 
        TST.W   D0
601
 
        BEQ.B   @end
602
 
        MOVEQ   #1,D0
603
 
  @end: MOVE.B  D0,@RESULT
604
 
  END;
605
 
END;
606
 
 
607
 
FUNCTION AHI_BestAudioIDA(tagList : pTagItem) : longword;
608
 
BEGIN
609
 
  ASM
610
 
        MOVE.L  A6,-(A7)
611
 
        MOVEA.L tagList,A1
612
 
        MOVEA.L AHIBase,A6
613
 
        JSR     -114(A6)
614
 
        MOVEA.L (A7)+,A6
615
 
        MOVE.L  D0,@RESULT
616
 
  END;
617
 
END;
618
 
 
619
 
FUNCTION AHI_ControlAudioA(AudioCtrl : pAHIAudioCtrl; tagList : pTagItem) : longword;
620
 
BEGIN
621
 
  ASM
622
 
        MOVE.L  A6,-(A7)
623
 
        MOVEA.L AudioCtrl,A2
624
 
        MOVEA.L tagList,A1
625
 
        MOVEA.L AHIBase,A6
626
 
        JSR     -060(A6)
627
 
        MOVEA.L (A7)+,A6
628
 
        MOVE.L  D0,@RESULT
629
 
  END;
630
 
END;
631
 
 
632
 
PROCEDURE AHI_FreeAudio(AudioCtrl : pAHIAudioCtrl);
633
 
BEGIN
634
 
  ASM
635
 
        MOVE.L  A6,-(A7)
636
 
        MOVEA.L AudioCtrl,A2
637
 
        MOVEA.L AHIBase,A6
638
 
        JSR     -048(A6)
639
 
        MOVEA.L (A7)+,A6
640
 
  END;
641
 
END;
642
 
 
643
 
PROCEDURE AHI_FreeAudioRequest(Requester : pAHIAudioModeRequester);
644
 
BEGIN
645
 
  ASM
646
 
        MOVE.L  A6,-(A7)
647
 
        MOVEA.L Requester,A0
648
 
        MOVEA.L AHIBase,A6
649
 
        JSR     -132(A6)
650
 
        MOVEA.L (A7)+,A6
651
 
  END;
652
 
END;
653
 
 
654
 
FUNCTION AHI_GetAudioAttrsA(ID : longword; Audioctrl : pAHIAudioCtrl; tagList : pTagItem) : BOOLEAN;
655
 
BEGIN
656
 
  ASM
657
 
        MOVE.L  A6,-(A7)
658
 
        MOVE.L  ID,D0
659
 
        MOVEA.L Audioctrl,A2
660
 
        MOVEA.L tagList,A1
661
 
        MOVEA.L AHIBase,A6
662
 
        JSR     -108(A6)
663
 
        MOVEA.L (A7)+,A6
664
 
        TST.W   D0
665
 
        BEQ.B   @end
666
 
        MOVEQ   #1,D0
667
 
  @end: MOVE.B  D0,@RESULT
668
 
  END;
669
 
END;
670
 
 
671
 
PROCEDURE AHI_KillAudio;
672
 
BEGIN
673
 
  ASM
674
 
        MOVE.L  A6,-(A7)
675
 
        MOVEA.L AHIBase,A6
676
 
        JSR     -054(A6)
677
 
        MOVEA.L (A7)+,A6
678
 
  END;
679
 
END;
680
 
 
681
 
FUNCTION AHI_LoadModeFile(a0arg : pCHAR) : longword;
682
 
BEGIN
683
 
  ASM
684
 
        MOVE.L  A6,-(A7)
685
 
        MOVEA.L a0arg,A0
686
 
        MOVEA.L AHIBase,A6
687
 
        JSR     -162(A6)
688
 
        MOVEA.L (A7)+,A6
689
 
        MOVE.L  D0,@RESULT
690
 
  END;
691
 
END;
692
 
 
693
 
FUNCTION AHI_LoadSound(Sound : WORD; _Type : longword; Info : POINTER; AudioCtrl : pAHIAudioCtrl) : longword;
694
 
BEGIN
695
 
  ASM
696
 
        MOVE.L  A6,-(A7)
697
 
        MOVE.L  Sound,D0
698
 
        MOVE.L  _Type,D1
699
 
        MOVEA.L Info,A0
700
 
        MOVEA.L AudioCtrl,A2
701
 
        MOVEA.L AHIBase,A6
702
 
        JSR     -090(A6)
703
 
        MOVEA.L (A7)+,A6
704
 
        MOVE.L  D0,@RESULT
705
 
  END;
706
 
END;
707
 
 
708
 
FUNCTION AHI_NextAudioID(Last_ID : longword) : longword;
709
 
BEGIN
710
 
  ASM
711
 
        MOVE.L  A6,-(A7)
712
 
        MOVE.L  Last_ID,D0
713
 
        MOVEA.L AHIBase,A6
714
 
        JSR     -102(A6)
715
 
        MOVEA.L (A7)+,A6
716
 
        MOVE.L  D0,@RESULT
717
 
  END;
718
 
END;
719
 
 
720
 
PROCEDURE AHI_PlayA(Audioctrl : pAHIAudioCtrl; tagList : pTagItem);
721
 
BEGIN
722
 
  ASM
723
 
        MOVE.L  A6,-(A7)
724
 
        MOVEA.L Audioctrl,A2
725
 
        MOVEA.L tagList,A1
726
 
        MOVEA.L AHIBase,A6
727
 
        JSR     -138(A6)
728
 
        MOVEA.L (A7)+,A6
729
 
  END;
730
 
END;
731
 
 
732
 
FUNCTION AHI_RemoveAudioMode(d0arg : longword) : longword;
733
 
BEGIN
734
 
  ASM
735
 
        MOVE.L  A6,-(A7)
736
 
        MOVE.L  d0arg,D0
737
 
        MOVEA.L AHIBase,A6
738
 
        JSR     -156(A6)
739
 
        MOVEA.L (A7)+,A6
740
 
        MOVE.L  D0,@RESULT
741
 
  END;
742
 
END;
743
 
 
744
 
FUNCTION AHI_SampleFrameSize(SampleType : longword) : longword;
745
 
BEGIN
746
 
  ASM
747
 
        MOVE.L  A6,-(A7)
748
 
        MOVE.L  SampleType,D0
749
 
        MOVEA.L AHIBase,A6
750
 
        JSR     -144(A6)
751
 
        MOVEA.L (A7)+,A6
752
 
        MOVE.L  D0,@RESULT
753
 
  END;
754
 
END;
755
 
 
756
 
FUNCTION AHI_SetEffect(Effect : POINTER; AudioCtrl : pAHIAudioCtrl) : longword;
757
 
BEGIN
758
 
  ASM
759
 
        MOVE.L  A6,-(A7)
760
 
        MOVEA.L Effect,A0
761
 
        MOVEA.L AudioCtrl,A2
762
 
        MOVEA.L AHIBase,A6
763
 
        JSR     -084(A6)
764
 
        MOVEA.L (A7)+,A6
765
 
        MOVE.L  D0,@RESULT
766
 
  END;
767
 
END;
768
 
 
769
 
PROCEDURE AHI_SetFreq(Channel : WORD; Freq : longword; AudioCtrl : pAHIAudioCtrl; Flags : longword);
770
 
BEGIN
771
 
  ASM
772
 
        MOVE.L  A6,-(A7)
773
 
        MOVE.L  Channel,D0
774
 
        MOVE.L  Freq,D1
775
 
        MOVEA.L AudioCtrl,A2
776
 
        MOVE.L  Flags,D2
777
 
        MOVEA.L AHIBase,A6
778
 
        JSR     -072(A6)
779
 
        MOVEA.L (A7)+,A6
780
 
  END;
781
 
END;
782
 
 
783
 
PROCEDURE AHI_SetSound(Channel : WORD; Sound : WORD; Offset : longword; len : LONGINT; AudioCtrl : pAHIAudioCtrl; Flags : longword);
784
 
BEGIN
785
 
  ASM
786
 
        MOVE.L  A6,-(A7)
787
 
        MOVE.L  Channel,D0
788
 
        MOVE.L  Sound,D1
789
 
        MOVE.L  Offset,D2
790
 
        MOVE.L  len,D3
791
 
        MOVEA.L AudioCtrl,A2
792
 
        MOVE.L  Flags,D4
793
 
        MOVEA.L AHIBase,A6
794
 
        JSR     -078(A6)
795
 
        MOVEA.L (A7)+,A6
796
 
  END;
797
 
END;
798
 
 
799
 
PROCEDURE AHI_SetVol(Channel : WORD; Volume : LONGINT; Pan : LONGINT; AudioCtrl : pAHIAudioCtrl; Flags : longword);
800
 
BEGIN
801
 
  ASM
802
 
        MOVE.L  A6,-(A7)
803
 
        MOVE.L  Channel,D0
804
 
        MOVE.L  Volume,D1
805
 
        MOVE.L  Pan,D2
806
 
        MOVEA.L AudioCtrl,A2
807
 
        MOVE.L  Flags,D3
808
 
        MOVEA.L AHIBase,A6
809
 
        JSR     -066(A6)
810
 
        MOVEA.L (A7)+,A6
811
 
  END;
812
 
END;
813
 
 
814
 
PROCEDURE AHI_UnloadSound(Sound : WORD; Audioctrl : pAHIAudioCtrl);
815
 
BEGIN
816
 
  ASM
817
 
        MOVE.L  A6,-(A7)
818
 
        MOVE.L  Sound,D0
819
 
        MOVEA.L Audioctrl,A2
820
 
        MOVEA.L AHIBase,A6
821
 
        JSR     -096(A6)
822
 
        MOVEA.L (A7)+,A6
823
 
  END;
824
 
END;
825
 
 
826
 
{
827
 
 Functions and procedures with array of const go here
828
 
}
829
 
FUNCTION AHI_AllocAudio(const tagList : Array Of Const) : pAHIAudioCtrl;
830
 
begin
831
 
    AHI_AllocAudio := AHI_AllocAudioA(readintags(tagList));
832
 
end;
833
 
 
834
 
FUNCTION AHI_AllocAudioRequest(const tagList : Array Of Const) : pAHIAudioModeRequester;
835
 
begin
836
 
    AHI_AllocAudioRequest := AHI_AllocAudioRequestA(readintags(tagList));
837
 
end;
838
 
 
839
 
FUNCTION AHI_AudioRequest(Requester : pAHIAudioModeRequester; const tagList : Array Of Const) : BOOLEAN;
840
 
begin
841
 
    AHI_AudioRequest := AHI_AudioRequestA(Requester , readintags(tagList));
842
 
end;
843
 
 
844
 
FUNCTION AHI_BestAudioID(const tagList : Array Of Const) : longword;
845
 
begin
846
 
    AHI_BestAudioID := AHI_BestAudioIDA(readintags(tagList));
847
 
end;
848
 
 
849
 
FUNCTION AHI_ControlAudio(AudioCtrl : pAHIAudioCtrl; const tagList : Array Of Const) : longword;
850
 
begin
851
 
    AHI_ControlAudio := AHI_ControlAudioA(AudioCtrl , readintags(tagList));
852
 
end;
853
 
 
854
 
FUNCTION AHI_GetAudioAttrs(ID : longword; Audioctrl : pAHIAudioCtrl; const tagList : Array Of Const) : BOOLEAN;
855
 
begin
856
 
    AHI_GetAudioAttrs := AHI_GetAudioAttrsA(ID , Audioctrl , readintags(tagList));
857
 
end;
858
 
 
859
 
PROCEDURE AHI_Play(Audioctrl : pAHIAudioCtrl; const tagList : Array Of Const);
860
 
begin
861
 
    AHI_PlayA(Audioctrl , readintags(tagList));
862
 
end;
863
 
 
864
 
const
865
 
    { Change VERSION and LIBVERSION to proper values }
866
 
 
867
 
    VERSION : string[2] = '0';
868
 
    LIBVERSION : longword = 0;
869
 
 
870
 
{$ifdef use_init_openlib}
871
 
  {$Info Compiling initopening of ahi.library}
872
 
  {$Info don't forget to use InitAHILibrary in the beginning of your program}
873
 
 
874
 
var
875
 
    ahi_exit : Pointer;
876
 
 
877
 
procedure CloseahiLibrary;
878
 
begin
879
 
    ExitProc := ahi_exit;
880
 
    if AHIBase <> nil then begin
881
 
        CloseLibrary(AHIBase);
882
 
        AHIBase := nil;
883
 
    end;
884
 
end;
885
 
 
886
 
procedure InitAHILibrary;
887
 
begin
888
 
    AHIBase := nil;
889
 
    AHIBase := OpenLibrary(AHINAME,LIBVERSION);
890
 
    if AHIBase <> nil then begin
891
 
        ahi_exit := ExitProc;
892
 
        ExitProc := @CloseahiLibrary;
893
 
    end else begin
894
 
        MessageBox('FPC Pascal Error',
895
 
        'Can''t open ahi.library version ' + VERSION + #10 +
896
 
        'Deallocating resources and closing down',
897
 
        'Oops');
898
 
        halt(20);
899
 
    end;
900
 
end;
901
 
 
902
 
begin
903
 
    AHIIsCompiledHow := 2;
904
 
{$endif use_init_openlib}
905
 
 
906
 
{$ifdef use_auto_openlib}
907
 
  {$Info Compiling autoopening of ahi.library}
908
 
 
909
 
var
910
 
    ahi_exit : Pointer;
911
 
 
912
 
procedure CloseahiLibrary;
913
 
begin
914
 
    ExitProc := ahi_exit;
915
 
    if AHIBase <> nil then begin
916
 
        CloseLibrary(AHIBase);
917
 
        AHIBase := nil;
918
 
    end;
919
 
end;
920
 
 
921
 
begin
922
 
    AHIBase := nil;
923
 
    AHIBase := OpenLibrary(AHINAME,LIBVERSION);
924
 
    if AHIBase <> nil then begin
925
 
        ahi_exit := ExitProc;
926
 
        ExitProc := @CloseahiLibrary;
927
 
        AHIIsCompiledHow := 1;
928
 
    end else begin
929
 
        MessageBox('FPC Pascal Error',
930
 
        'Can''t open ahi.library version ' + VERSION + #10 +
931
 
        'Deallocating resources and closing down',
932
 
        'Oops');
933
 
        halt(20);
934
 
    end;
935
 
 
936
 
{$endif use_auto_openlib}
937
 
 
938
 
{$ifdef dont_use_openlib}
939
 
begin
940
 
    AHIIsCompiledHow := 3;
941
 
   {$Warning No autoopening of ahi.library compiled}
942
 
   {$Warning Make sure you open ahi.library yourself}
943
 
{$endif dont_use_openlib}
944
 
 
945
 
END. (* UNIT AHI *)
946
 
 
947
 
{
948
 
  $Log
949
 
}
950
 
 
951