/* * EX14CON.C * * C/DOS Example program for ArchiveLib 2.0 * * Copyright (c) Greenleaf Software, Inc. 1994 - 1996 * All Rights Reserved * * MEMBERS/FUNCTIONS DEMONSTRATED * * ALMemoryBaseGetBufferSize() * ALMemoryGetBuffer() * ALMemoryBaseGetBufferOwner() * ALMemoryBaseSetBufferOwner() * * DESCRIPTION * * This example program creates an ALMemory storage object using * an object owned memory buffer. Then I take the buffer away so I * can use it myself. * * REVISION HISTORY * * February 1, 1996 2.0A : Second release * */ #include #include #include "arclib.h" #include "memstore.h" int main() { hALStorage memory; int i; unsigned char *buffer; printf( "Archive Library 2.0\nEX14CON.C\n\n" ); printf( "This example program creates an ALMemory storage object using\n" ); printf( "an object owned memory buffer. Then I take the buffer away so I\n" ); printf( "can use it myself.\n\n" ); getch(); memory = newALMemory( "My memory", 0, 0 ); ALStorageCreate( memory, AL_DEFAULT ); for ( i = 0 ; i < 20000 ; i++ ) ALStorageWriteChar( memory, i & 255 ); /* * There are three cases here where I cast something before giving it * to printf. This is to turn off errors from gcc. */ printf( "ALMemory buffer size before FlushBuffer() = %u\n", (int) ALMemoryBaseGetBufferSize( memory ) ); ALStorageFlushBuffer( memory ); printf( "ALMemory buffer size after FlushBuffer() = %u\n", (int) ALMemoryBaseGetBufferSize( memory ) ); ALStorageClose( memory ); printf( "ALMemory buffer size after Close() = %u\n", (int) ALMemoryBaseGetBufferSize( memory ) ); printf( "ALMemory owner = %s\n", ALMemoryBaseGetBufferOwner( memory ) ? "User" : "Object" ); ALMemoryBaseSetBufferOwner( memory, 1 ); buffer = (unsigned char *) ALMemoryGetBuffer( memory ); for ( i = 0 ; i < 20000 ; i++ ) if ( buffer[ i ] != (unsigned char) ( i & 255 ) ) break; printf( "Comparison %s\n", i == 20000 ? "passed" : "failed" ); return 1; }