archivelib-sys 0.2.0

An implementaton(in C++) of the Greenleaf ArchiveLib compression/decompression algorithm
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
/*
Copyright 1990-2008 Light Infocon Tecnologia S/A

Este arquivo é parte do programa LightBase - Banco de Dados Textual Documental

O LightBase é um software livre; você pode redistribui-lo e/ou modifica-lo dentro
dos termos da Licença Pública Geral GNU como publicada pela Fundação do Software
Livre (FSF); na versão 2 da Licença.

Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO
EM PARTICULAR. Veja a Licença Pública Geral GNU para maiores detalhes.

Você deve ter recebido uma cópia da Licença Pública Geral GNU versao 2, sob o
título "LICENCA.txt", junto com este programa, se não, escreva para a Fundação do
Software Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/


#include "arclib.h"
#pragma hdrstop

#include "al.h"
#include "alcxl.h"

//
// extern "C" hALEngine newALCopyEngine( void )
//
// ARGUMENTS:
//
//  None.
//
// RETURNS
//
//  A handle for (pointer to) a newly create ALCopyEngine object.
//  If for some reason the constructor failed this function might
//  just return a 0.
//
// DESCRIPTION
//
//  This is the C/VB translation layer function for the C++ constructor
//  ALCopyEngine::ALCopyEngine(). It simply calls the constructor
//  and returns the resulting value.  For more information on what
//  actually happens inside the constructor, see COPYENGN.CPP.
//
// REVISION HISTORY
//
//   May 24, 1994  1.0A  : First release
//

extern "C" hALEngine AL_FUNCTION newALCopyEngine( void )
{
    return (hALEngine) new ALCopyEngine();
}

//
// extern "C" hALEngine newALGreenleafEngine( void )
//
// ARGUMENTS:
//
//  None.
//
// RETURNS
//
//  A handle for (pointer to) a newly create ALGreenleafEngine object.
//  If for some reason the constructor failed this function might
//  just return a 0.
//
// DESCRIPTION
//
//  This is the C/VB translation layer function for the C++ constructor
//  ALGreenleafEngine::ALGreenleafEngine(). It simply calls the constructor
//  and returns the resulting value.  For more information on what
//  actually happens inside the constructor, see GRENENGN.CPP.
//
// REVISION HISTORY
//
//   May 24, 1994  1.0A  : First release
//

extern "C" hALEngine AL_FUNCTION newALGreenleafEngine( int level )
{
    return (hALEngine) new ALGreenleafEngine( (short int) level );
}


//
// extern "C" short int ALGreenleafEngineGetLevel( hALEngine this_object )
//
// ARGUMENTS:
//
//  this_object   : A handle for (pointer to) an ALGreenleafEngine object.
//
// RETURNS
//
//  A short integer that contains the current compression level for the
//  Greenleaf Engine.  If a compression pass fails because a file is
//  incompressible, this guy will return AL_GREENLEAF_COPY, otherwise
//  it should normally be one of AL_GREENLEAF_LEVEL_*.
//
// DESCRIPTION
//
//  This is the C/VB wrapper function for the C++ function
//  ALGreenleafEngine::CompressionLevel() as implemented for objects of
//  type ALGreenleafEngine.  For details on how the member
//  function actually works, take a look at GRENENGN.H.
//
//  All that happens here is that the arguments are checked for correct
//  type (when in debug mode), and a call is made to the appropriate
//  member function, with lots of casting.
//
// REVISION HISTORY
//
//   August 11, 1994  1.0B  : First release
//

extern "C" short int AL_FUNCTION
ALGreenleafEngineGetLevel( hALEngine this_object )
{
    AL_ASSERT_OBJECT( this_object, ALGreenleafEngine, "ALGreenleafEngineGetLevel" );
    return ( (ALGreenleafEngine *) this_object )->CompressionLevel();
}

//
// extern "C" int ALEngineGetStatusCode( hALEngine this_object )
//
// ARGUMENTS:
//
//  this_object   : A handle for (pointer to) an ALCompressionEngine object.
//
// RETURNS
//
//  An integer that contains the current status code for the object.
//  Note that values of < 0 always indicate an error conditions.
//
// DESCRIPTION
//
//  This is the C/VB wrapper function for the C++ function
//  ALName::GetStatusCode() as implemented for objects of type
//  ALCompressionEngine.  For details on how the member
//  function actually works, take a look at OBJNAME.CPP.
//
//  All that happens here is that the arguments are checked for correct
//  type (when in debug mode), and a call is made to the appropriate
//  member function, with lots of casting.
//
// REVISION HISTORY
//
//   May 24, 1994  1.0A  : First release
//

extern "C" int AL_FUNCTION ALEngineGetStatusCode( hALEngine this_object )
{
    AL_ASSERT_OBJECT( this_object, ALCompressionEngine, "ALEngineGetStatusCode" );
    return ( (ALCompressionEngine *) this_object )->mStatus.GetStatusCode();
}

//
// extern "C" int ALEngineSetError( hALEngine this_object,
//                                  int error,
//                                  char *text )
//
// ARGUMENTS:
//
//  this_object   : A handle for (pointer to) an ALCompressionEngine object.
//                  We are going to set the engine's status member
//                  so that it is in an error state.
//
//  error         : The error code to apply to the object.  Values from
//                  ALDEFS.H are good, but it really doesn't matter as
//                  long as you use a negative number.
//
//  text          : The text of the error message you want to associate with
//                  this error.
//
// RETURNS
//
//  Returns the error code that you passed it.
//
// DESCRIPTION
//
//  This is the C/VB wrapper function for the C++ member function
//  ALName::SetError(), as applied to an ALCompressionEngine object.
//  For more details on how the function actually works, check out
//  OBJNAME.CPP.
//
//  All that happens here is that the arguments are checked for correct
//  type (when in debug mode), and a call is made to the appropriate
//  member function, with lots of casting.
//
// REVISION HISTORY
//
//   May 24, 1994  1.0A  : First release
//
extern "C" int AL_FUNCTION ALEngineSetError( hALEngine this_object,
                                             int error,
                                             char AL_DLL_FAR *text )
{
    AL_ASSERT_OBJECT( this_object, ALCompressionEngine, "ALEngineSetError" );
    ( (ALCompressionEngine *) this_object )->mStatus.SetError( error, text );
    return error;
}

//
// extern "C" char *ALEngineGetStatusString( hALEngine this_object )
//
// ARGUMENTS:
//
//  this_object   : A handle for (pointer to) an ALCompressionEngine object.
//                  We want to get the string translation of the error
//                  code for this object.
//
// RETURNS
//
//  Always returns a pointer to a short string translation of the
//  current error code.
//
// DESCRIPTION
//
//  This is the C wrapper function for the C++ function
//  ALName::GetStatusString(), as implemented for class ALCompressionEngine.
//  Note that we need a completely different function return strings
//  to VB programmers.
//
//  All that happens here is that the arguments are checked for correct
//  type (when in debug mode), and a call is made to the appropriate
//  member function, with lots of casting.
//
// REVISION HISTORY
//
//   May 24, 1994  1.0A  : First release
//

extern "C" char AL_DLL_FAR * AL_FUNCTION
ALEngineGetStatusString( hALEngine this_object )
{
    AL_ASSERT_OBJECT( this_object, ALCompressionEngine, "ALEngineGetStatusString" );
    const char *status = ( (ALCompressionEngine *) this_object )->mStatus.GetStatusString();
    if ( status == 0 )
        status = "";
    return (char AL_DLL_FAR *) status;
}

//
// extern "C" long ALEngineGetStatusStringVB( hALEngine this_object )
//
// ARGUMENTS:
//
//  this_object   : A handle for (pointer to) an ALCompressionEngine object.
//                  We want to get the string translation of the error
//                  code for this object.
//
// RETURNS
//
//  Always returns a VB handle (pointer?) to a short string translation of
//  the current error code for the ALCompressionEngine object.
//
// DESCRIPTION
//
//  This is the VB wrapper function for the C++ function
//  ALName::GetStatusString(), as implemented for class ALCompressionEngine.
//  Note that we need a completely different function to return strings
//  to C programmers.  In this case, we use a special VB translation routine
//  to convert a C string to one that is nice and easy for VB to use.
//
//  All that happens here is that the arguments are checked for correct
//  type (when in debug mode), and a call is made to the appropriate
//  member function, with lots of casting.
//
// REVISION HISTORY
//
//   May 24, 1994  1.0A   : First release
//
//   August 10, 1994 1.0B : Combined a bunch of #ifdefs into a single test
//                          against AL_VB

#if defined( AL_VB )
extern "C" long AL_FUNCTION ALEngineGetStatusStringVB( hALEngine this_object )
{
    AL_ASSERT_OBJECT( this_object , ALCompressionEngine, "ALEngineGetStatusStringVB" );
    const char _far *status = ( (ALCompressionEngine *) this_object )->mStatus.GetStatusString();
    if ( status == 0 )
        status = "";
    return ALCreateVBString( status, (unsigned short int) _fstrlen( status ) );
}
#endif

//
// extern "C" char * ALEngineGetStatusDetail( hALEngine this_object )
//
// ARGUMENTS:
//
//  this_object   : A handle for (pointer to) an ALCompressionEngine object.
//                  We want to get the detailed string describing this
//                  object's current status.
//
// RETURNS
//
//  Always returns a pointer to a status detail message.
//
// DESCRIPTION
//
//  This is the C wrapper function for the C++ function
//  ALName::GetStatusDetail(), as implemented for class ALCompressionEngine.
//  Note that we need a completely different function to return strings
//  to VB programmers.
//
//  All that happens here is that the arguments are checked for correct
//  type (when in debug mode), and a call is made to the appropriate
//  member function, with lots of casting.
//
// REVISION HISTORY
//
//   May 24, 1994  1.0A  : First release
//

extern "C" char AL_DLL_FAR * AL_FUNCTION
ALEngineGetStatusDetail( hALEngine this_object )
{
    AL_ASSERT_OBJECT( this_object, ALCompressionEngine, "ALEngineGetStatusDetail" );
    const char *status = ( (ALCompressionEngine *) this_object )->mStatus.GetStatusDetail();
    if ( status == 0 )
        status = "";
    return (char AL_DLL_FAR *) status;
}

//
// extern "C" long ALEngineGetStatusDetailVB( hALEngine this_object )
//
// ARGUMENTS:
//
//  this_object   : A handle for (pointer to) an ALCompressionEngine object.
//                  We want to get the detailed status message for
//                  this object.
//
// RETURNS
//
//  Always returns a VB handle (pointer?) to a translation of
//  the current status detail for the ALCompressionEngine object.
//
// DESCRIPTION
//
//  This is the VB wrapper function for the C++ function
//  ALName::GetStatusDetail(), as implemented for class ALCompressionEngine.
//  Note that we need a completely different function to return strings
//  to C programmers.  In this case, we use a special VB translation routine
//  to convert a C string to one that is nice and easy for VB to use.
//
//  All that happens here is that the arguments are checked for correct
//  type (when in debug mode), and a call is made to the appropriate
//  member function, with lots of casting.
//
// REVISION HISTORY
//
//   May 24, 1994  1.0A   : First release
//
//   August 10, 1994 1.0B : Combined a bunch of #ifdefs into a single test
//                          against AL_VB

#if defined( AL_VB )
extern "C" long AL_FUNCTION ALEngineGetStatusDetailVB( hALEngine this_object )
{
    AL_ASSERT_OBJECT( this_object, ALCompressionEngine, "ALEngineGetStatusDetailVB" );
    const char _far *status = ( (ALCompressionEngine *) this_object )->mStatus.GetStatusDetail();
    if ( status == 0 )
        status = "";
    return ALCreateVBString( status, (unsigned short int) _fstrlen( status ) );
}
#endif

//
// extern "C" void deleteALEngine( hALEngine this_object )
//
// ARGUMENTS:
//
//  this_object   : A handle for (pointer to) an ALCompressionEngine object.
//                  We destroy it in this function.
//
// RETURNS
//
//  No returns from destructors.
//
// DESCRIPTION
//
//  This is the C/VB wrapper function for the C++ destructor
//  ALCompressionEngine::~ALCompressionEngine()).  For details
//  on what the member function actually works, take a look at
//  CMPENGN.CPP.
//
//  Note that this destructor function is virtual, and should be called
//  to destroy any derived classes (ALCopyEngine and ALGreenleafEngine).
//
//  All that happens here is that the arguments are checked for correct
//  type (when in debug mode), and a call is made to the appropriate
//  member function, with lots of casting.
//
// REVISION HISTORY
//
//   May 24, 1994  1.0A  : First release
//

extern "C" void AL_FUNCTION deleteALEngine( hALEngine this_object )
{
    AL_ASSERT_OBJECT( this_object, ALCompressionEngine, "deleteALEngine" );
    delete (ALCompressionEngine *) this_object;
}

//
// extern "C" int ALEngineCompress( hALEngine this_object,
//                                  hALStorage input,
//                                  hALStorage output )
//
// ARGUMENTS:
//
//  this_object   : A handle for (pointer to) an object of type
//                  ALCompressionEngine.  The engine contains
//                  the code that will perform the compression.
//
//  input         : A handle for (pointer to) an object of type
//                  ALStorage that contains the input data that will
//                  be fed to the compression engine.
//
//  output        : A handle for (pointer to) an object of type
//                  ALStorage that will receive the compressed output
//                  from the engine.
//
// RETURNS
//
//  AL_SUCCESS if everything worked, code < AL_SUCCESS if not.
//
// DESCRIPTION
//
//  This function is the C/VB translation function for the C++ member
//  function ALCompressionEngine::Compress().  For details on what
//  this function does, you will need to look at the source code
//  in the appropriate module, such as COPYENGN.CPP or GRENENGN.CPP.
//
//  All the wrapper function does is check the type of the arguments
//  (if in debug mode), then call the C++ member function, returning
//  the result to the calling routine.
//
// REVISION HISTORY
//
//   May 24, 1994  1.0A  : First release
//

extern "C" int AL_FUNCTION ALEngineCompress( hALEngine this_object,
                                             hALStorage input,
                                             hALStorage output )
{
    AL_ASSERT_OBJECT( this_object, ALCompressionEngine, "ALEngineCompress" );
    AL_ASSERT_OBJECT( input, ALStorage, "ALEngineCompress" );
    AL_ASSERT_OBJECT( output, ALStorage, "ALEngineCompress" );
    return ( (ALCompressionEngine *) this_object )->Compress( *(ALStorage *) input, *(ALStorage *) output );
}

//
// extern "C" int ALEngineDecompress( hALEngine this_object,
//                                    hALStorage input,
//                                    hALStorage output )
//
// ARGUMENTS:
//
//  this_object   : A handle for (pointer to) an object of type
//                  ALCompressionEngine.  The engine contains
//                  the code that will perform the expansion.
//
//  input         : A handle for (pointer to) an object of type
//                  ALStorage that contains a stream of compressed
//                  data that was previously created using Compress().
//
//  output        : A handle for (pointer to) an object of type
//                  ALStorage that will receive the plain text output
//                  from the compression engine.
//
// RETURNS
//
//  AL_SUCCESS if everything worked, code < AL_SUCCESS if not.
//
// DESCRIPTION
//
//  This function is the C/VB translation function for the C++ member
//  function ALCompressionEngine::Decompress().  For details on what
//  this function does, you will need to look at the source code
//  in the appropriate module, such as COPYENGN.CPP or GRENENGN.CPP.
//
//  All the wrapper function does is check the type of the arguments
//  (if in debug mode), then call the C++ member function, returning
//  the result to the calling routine.
//
// REVISION HISTORY
//
//   May 24, 1994  1.0A  : First release
//

extern "C" int AL_FUNCTION
ALEngineDecompress( hALEngine this_object,
                    hALStorage input,
                    hALStorage output,
                    long compressed_length )
{
    AL_ASSERT_OBJECT( this_object, ALCompressionEngine, "ALEngineDecompress" );
    AL_ASSERT_OBJECT( input, ALStorage, "ALEngineDecompress" );
    AL_ASSERT_OBJECT( output, ALStorage, "ALEngineDecompress" );
    return ( (ALCompressionEngine *) this_object )->Decompress( *(ALStorage *) input, *(ALStorage *) output, compressed_length );
}

//
// extern "C" int ALEngineGetTypeCode( hALEngine this_object )
//
// ARGUMENTS:
//
//  this_object  : A handle for (pointer to) an object of type
//                 ALCompressionEngine.
//
// RETURNS
//
//  The compression engine type, found in enum ALCompressionType in
//  ALDEFS.H.
//
// DESCRIPTION
//
//  This function is the C/VB translation function that provides access
//  to the C++ data member ALCompressionEngine::miCompressionType.  Since
//  C and VB can't access the class object directly, they have to go through
//  this function as an intermediary.
//
// REVISION HISTORY
//
//   May 24, 1994  1.0A  : First release
//

extern "C" int AL_FUNCTION ALEngineGetTypeCode( hALEngine this_object )
{
    AL_ASSERT_OBJECT( this_object, ALCompressionEngine, "ALEngineGetTypeCode" );
    return ( (ALCompressionEngine *) this_object )->miCompressionType;
}

//
// extern "C" char *ALEngineGetTypeString( hALEngine this_object )
//
// ARGUMENTS:
//
//  this_object  : A handle for (pointer to) an object of type
//                 ALCompressionEngine.
//
// RETURNS
//
//  The string describing the engine type.  The description string is always
//  provided by the derived class.
//
// DESCRIPTION
//
//  This function is the C translation function that provides access
//  to the C++ data member ALCompressionEngine::mszCompressionType.  Since
//  C can't access the class object directly, it has to go through
//  this function as an intermediary.  Note that there is a special
//  function to return the compression type string to a VB program.
//
// REVISION HISTORY
//
//   May 24, 1994  1.0A  : First release
//

extern "C" char AL_DLL_FAR * AL_FUNCTION ALEngineGetTypeString( hALEngine this_object )
{
    AL_ASSERT_OBJECT( this_object, ALCompressionEngine, "ALEngineGetTypeString" );
    return (char AL_DLL_FAR *) ( (ALCompressionEngine *) this_object )->mszCompressionType;
}

//
// extern "C" char *ALEngineGetTypeStringVB( hALEngine this_object )
//
// ARGUMENTS:
//
//  this_object  : A handle for (pointer to) an object of type
//                 ALCompressionEngine.
//
// RETURNS
//
//  A VB string describing the engine type.  The description string is
//  always provided by the derived class.
//
// DESCRIPTION
//
//  This function is the VB translation function that provides access
//  to the C++ data member ALCompressionEngine::mszCompressionType.  Since
//  VB can't access the class object directly, it has to go through
//  this function as an intermediary.  Note that this is a special
//  function that knows how to convert a standard C string to one that
//  VB likes.
//
// REVISION HISTORY
//
//   May 24, 1994  1.0A   : First release
//
//   August 10, 1994 1.0B : Combined a bunch of #ifdefs into a single test
//                          against AL_VB

#if defined( AL_VB )
extern "C" long AL_FUNCTION ALEngineGetTypeStringVB( hALEngine this_object )
{
    AL_ASSERT_OBJECT( this_object, ALCompressionEngine, "ALEngineGetTypeStringVB" );
    const char _far *status = ( (ALCompressionEngine *) this_object )->mszCompressionType;
    if ( status == 0 )
        status = "";
    return ALCreateVBString( status, (unsigned short int) _fstrlen( status ) );
}
#endif