181 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			181 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /*
 | |
|  * EX11CON.C
 | |
|  *
 | |
|  *  C/DOS Example program for ArchiveLib 2.0
 | |
|  *
 | |
|  *  Copyright (c) Greenleaf Software, Inc. 1994 - 1996
 | |
|  *  All Rights Reserved
 | |
|  *
 | |
|  * MEMBERS/FUNCTIONS DEMONSTRATED
 | |
|  *
 | |
|  *  ALStorageCreate()
 | |
|  *  ALStorageIsOpen()
 | |
|  *  ALStorageReadLong()
 | |
|  *  ALStorageReadShort()
 | |
|  *  ALStorageWriteChar()
 | |
|  *  ALStorageWriteLong()
 | |
|  *  ALStorageWriteShort()
 | |
|  *  ALStorageWriteString()
 | |
|  *
 | |
|  * DESCRIPTION
 | |
|  *
 | |
|  *  This simple example program is used to test the hardware independent
 | |
|  *  WritePortable...() functions.  It does this by creating a test
 | |
|  *  file, writing a bunch of stuff out to it, then reading the same
 | |
|  *  stuff back in.
 | |
|  *
 | |
|  * REVISION HISTORY
 | |
|  *
 | |
|  *  February 1, 1996  2.0A  : Second release
 | |
|  *
 | |
|  */
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| #include <string.h>
 | |
| #include <conio.h>
 | |
| 
 | |
| #include "al.h"
 | |
| 
 | |
| int create_test( void );
 | |
| int read_test( void );
 | |
| 
 | |
| /*
 | |
|  * The way this program works is a little funny.  The first time you run
 | |
|  * it, it just creates TESTFILE.DAT.  From then on, it will perform the
 | |
|  * read tests.  If you want it to go back and create the file again, you
 | |
|  * just need to delete TESTFILE.DAT.
 | |
|  */
 | |
| 
 | |
| int main()
 | |
| {
 | |
|  FILE *f = fopen( "TESTFILE.DAT", "r" );
 | |
| 
 | |
|  printf( "Archive Library 2.0\nEX11CON.C\n\n" );
 | |
|  printf( "The way this program works is a little funny.  The first time you run\n" );
 | |
|  printf( "it, it just creates TESTFILE.DAT.  From then on, it will perform the\n" );
 | |
|  printf( "read tests.  If you want it to go back and create the file again, you\n" );
 | |
|  printf( "just need to delete TESTFILE.DAT.\n\n" );
 | |
|  getch();
 | |
| 
 | |
|  if ( f ) {
 | |
|      fclose( f );
 | |
|      read_test();
 | |
|  } else
 | |
|      create_test();
 | |
|  return 1;
 | |
| }
 | |
| 
 | |
| /*
 | |
|  * This routine is called if the file didn't already exist when the program
 | |
|  * started.  It creates the file, then writes out the data using the
 | |
|  * portable functions.  The data is pretty simple, no tricks here.
 | |
|  */
 | |
| 
 | |
| int create_test()
 | |
| {
 | |
|  hALStorage file;
 | |
|  long spot;
 | |
|  int i;
 | |
| 
 | |
|  printf( "Creating TESTFILE.DAT\n" );
 | |
|  printf( "Run this program a second time to test data file structure\n" );
 | |
|  file = newALFile( "TESTFILE.DAT" );
 | |
|  ALStorageCreate( file, AL_DEFAULT );
 | |
|  if ( !ALStorageIsOpen( file ) ) {
 | |
|      printf( "Error creating file!\n" );
 | |
|      return 1;
 | |
|  }
 | |
|  ALStorageWriteGlLong( file, 0x12345678L );
 | |
|  ALStorageWriteGlLong( file, 0xfedcba98L );
 | |
|  ALStorageWritePkLong( file, 0x87654321L );
 | |
|  ALStorageWritePkShort( file, 0x2345 );
 | |
|  ALStorageWriteGlShort( file, 0x5566 );
 | |
|  ALStorageWriteGlShort( file, (short int) 0x9988 );
 | |
|  for ( i = 0 ; i < 256 ; i++ )
 | |
|      ALStorageWriteChar( file, i );
 | |
|  ALStorageWriteString( file, "ABCDE" );
 | |
|  spot = ALStorageTell( file );
 | |
|  ALStorageWriteGlLong( file, spot );
 | |
|  deleteALStorage( file );
 | |
|  return 0;
 | |
| }
 | |
| 
 | |
| /*
 | |
|  * The second time you run this program, you read back in all the data
 | |
|  * from the file that was created earlier.  This gets a little more
 | |
|  * complicated, because all the data has to be read into local variables,
 | |
|  * then checked for errors.  That's why this routine is twice as long
 | |
|  * as the guy that writes stuff out.
 | |
|  */
 | |
| 
 | |
| int read_test()
 | |
| {
 | |
|  hALStorage file;
 | |
|  long dat1 = 0;
 | |
|  long dat2 = 0;
 | |
|  short int dat3 = 0;
 | |
|  short int dat4 = 0;
 | |
|  int i;
 | |
|  short length = 0;
 | |
|  char buffer[ 5 ];
 | |
|  long my_spot;
 | |
|  long his_spot = 0;
 | |
| 
 | |
|  printf( "Reading TESTFILE.DAT\n" );
 | |
|  file = newALFile( "TESTFILE.DAT" );
 | |
|  ALStorageOpen( file );
 | |
|  if ( !ALStorageIsOpen( file ) ) {
 | |
|      printf( "Error opening file!\n" );
 | |
|      return 1;
 | |
|  }
 | |
|  ALStorageReadGlLong( file, &dat1 );
 | |
|  ALStorageReadGlLong( file, &dat2 );
 | |
|  if ( dat1 != 0x12345678L || dat2 != 0xfedcba98L ) {
 | |
|      printf( "Error reading long data\n" );
 | |
|      return 1;
 | |
|  }
 | |
|  ALStorageReadPkLong( file, &dat1 );
 | |
|  if ( dat1 != 0x87654321L ) {
 | |
|      printf( "Error reading long Pk data\n" );
 | |
|      return 1;
 | |
|  }
 | |
|  ALStorageReadPkShort( file, &dat3 );
 | |
|  if ( dat3 != 0x2345 ) {
 | |
|      printf( "Error reading short Pk data\n" );
 | |
|      return 1;
 | |
|  }
 | |
|  ALStorageReadGlShort( file, &dat3 );
 | |
|  ALStorageReadGlShort( file, &dat4 );
 | |
|  if ( dat3 != 0x5566 || dat4 != (short) 0x9988 ) {
 | |
|      printf( "Error reading short data\n" );
 | |
|      return 1;
 | |
|  }
 | |
|  for ( i = 0 ; i < 256 ; i++ ) {
 | |
|      int c = ALStorageReadChar( file );
 | |
|      if ( c != i ) {
 | |
|          printf( "Error reading characater data, position %d\n", i );
 | |
|          return 1;
 | |
|      }
 | |
|  }
 | |
| /*
 | |
|  * Reading strings is still a hassle, you have to do it manually, there is
 | |
|  * no readstring function available as a public member.
 | |
|  */
 | |
|  ALStorageReadGlShort( file, &length );
 | |
|  ALStorageReadBuffer( file, (unsigned char *) buffer, 5 );
 | |
|  if ( length != 5 || memcmp( buffer, "ABCDE", 5 ) != 0 ) {
 | |
|      printf( "Error reading string\n" );
 | |
|      return 1;
 | |
|  }
 | |
|  my_spot = ALStorageTell( file );
 | |
|  ALStorageReadGlLong( file, &his_spot );
 | |
|  if ( my_spot != his_spot ) {
 | |
|      printf( "Error in Tell()!\n" );
 | |
|      return 1;
 | |
|  }
 | |
|  printf( "File passed all tests.\n" );
 | |
|  deleteALStorage( file );
 | |
|  return 0;
 | |
| }
 |