C
Cooper Stevenson
Hello,
My apologies if this has already been discussed in detail on the list
but I've been working with the Pragmatics an O'Rielly's for some time
now and I think it's time to call for a 'help.'
I would like to interface what seems to be a straightforward main
program (as I understand it that's all I need to interface, not the rest
of the .c files, please correct me if this is in error) and have
achieved a compile with an empty Init function like so:
void
Init_jzipr()
{
}
irb works:
$ irb
irb(main):001:0> require 'jzipr'
=> true
I am finding the next step--creating the class--difficult. Here's
jzip.c--it's doesn't look like much but doing it for the first time...
------------------Begin jzip.c------------------------
/* $Id: jzip.c,v 1.3 2000/10/04 23:07:57 jholder Exp $
* --------------------------------------------------------------------
* see doc/License.txt for License Information
* --------------------------------------------------------------------
*
* File name: $Id: jzip.c,v 1.3 2000/10/04 23:07:57 jholder Exp $
*
* Description:
*
* Modification history:
* $Log: jzip.c,v $
* Revision 1.3 2000/10/04 23:07:57 jholder
* fixed redirect problem with isolatin1 range chars
*
* Revision 1.2 2000/05/25 22:28:56 jholder
* changes routine names to reflect zmachine opcode names per spec 1.0
*
* Revision 1.1.1.1 2000/05/10 14:21:34 jholder
*
* imported
*
*
* --------------------------------------------------------------------
*/
/*
* jzip.c
*
* Z code interpreter main routine.
*
* Revisions list:
* Mark Howell 10-Mar-1993 V2.0 (e-mail address removed)
* V2.0.1(some of a-f)
* John Holder 22-Nov-1995 V2.0.1g (e-mail address removed)
* John Holder 06-Feb-1998 V2.0.2 (e-mail address removed) Zstrict & Quetzal
*
* If you have problems with this interpreter and/or fix bugs in it,
* please notify John Holder ([email protected]) and he will add your
* fix to the official JZIP distribution.
*/
#include "ztypes.h"
extern int GLOBALVER;
static void configure( zbyte_t, zbyte_t );
/*
* main
*
* Initialise environment, start interpreter, clean up.
*/
int main( int argc, char *argv[] )
{
process_arguments( argc, argv );
configure( V1, V8 );
initialize_screen( );
load_cache( );
z_restart( );
( void ) interpret( );
unload_cache( );
close_story( );
close_script( );
reset_screen( );
exit( EXIT_SUCCESS );
return ( 0 );
} /* main */
/*
* configure
*
* Initialise global and type specific variables.
*
*/
static void configure( zbyte_t min_version, zbyte_t max_version )
{
zbyte_t header[PAGE_SIZE], second;
read_page( 0, header );
datap = header;
h_type = get_byte( H_TYPE );
GLOBALVER = h_type;
if ( h_type < min_version || h_type > max_version ||
( get_byte( H_CONFIG ) & CONFIG_BYTE_SWAPPED ) )
fatal( "Wrong game or version" );
/*
* if (h_type == V6 || h_type == V7)
* fatal ("Unsupported zcode version.");
*/
if ( h_type < V4 )
{
story_scaler = 2;
story_shift = 1;
property_mask = P3_MAX_PROPERTIES - 1;
property_size_mask = 0xe0;
}
else if ( h_type < V8 )
{
story_scaler = 4;
story_shift = 2;
property_mask = P4_MAX_PROPERTIES - 1;
property_size_mask = 0x3f;
}
else
{
story_scaler = 8;
story_shift = 3;
property_mask = P4_MAX_PROPERTIES - 1;
property_size_mask = 0x3f;
}
h_config = get_byte( H_CONFIG );
h_version = get_word( H_VERSION );
h_data_size = get_word( H_DATA_SIZE );
h_start_pc = get_word( H_START_PC );
h_words_offset = get_word( H_WORDS_OFFSET );
h_objects_offset = get_word( H_OBJECTS_OFFSET );
h_globals_offset = get_word( H_GLOBALS_OFFSET );
h_restart_size = get_word( H_RESTART_SIZE );
h_flags = get_word( H_FLAGS );
h_synonyms_offset = get_word( H_SYNONYMS_OFFSET );
h_file_size = get_word( H_FILE_SIZE );
if ( h_file_size == 0 )
h_file_size = get_story_size( );
h_checksum = get_word( H_CHECKSUM );
h_alternate_alphabet_offset = get_word( H_ALTERNATE_ALPHABET_OFFSET );
if ( h_type >= V5 )
{
h_unicode_table = get_word( H_UNICODE_TABLE );
}
datap = NULL;
} /* configure */
------------------End jzip.c------------------------
Any help is greatly appreciated.
-Cooper
My apologies if this has already been discussed in detail on the list
but I've been working with the Pragmatics an O'Rielly's for some time
now and I think it's time to call for a 'help.'
I would like to interface what seems to be a straightforward main
program (as I understand it that's all I need to interface, not the rest
of the .c files, please correct me if this is in error) and have
achieved a compile with an empty Init function like so:
void
Init_jzipr()
{
}
irb works:
$ irb
irb(main):001:0> require 'jzipr'
=> true
I am finding the next step--creating the class--difficult. Here's
jzip.c--it's doesn't look like much but doing it for the first time...
------------------Begin jzip.c------------------------
/* $Id: jzip.c,v 1.3 2000/10/04 23:07:57 jholder Exp $
* --------------------------------------------------------------------
* see doc/License.txt for License Information
* --------------------------------------------------------------------
*
* File name: $Id: jzip.c,v 1.3 2000/10/04 23:07:57 jholder Exp $
*
* Description:
*
* Modification history:
* $Log: jzip.c,v $
* Revision 1.3 2000/10/04 23:07:57 jholder
* fixed redirect problem with isolatin1 range chars
*
* Revision 1.2 2000/05/25 22:28:56 jholder
* changes routine names to reflect zmachine opcode names per spec 1.0
*
* Revision 1.1.1.1 2000/05/10 14:21:34 jholder
*
* imported
*
*
* --------------------------------------------------------------------
*/
/*
* jzip.c
*
* Z code interpreter main routine.
*
* Revisions list:
* Mark Howell 10-Mar-1993 V2.0 (e-mail address removed)
* V2.0.1(some of a-f)
* John Holder 22-Nov-1995 V2.0.1g (e-mail address removed)
* John Holder 06-Feb-1998 V2.0.2 (e-mail address removed) Zstrict & Quetzal
*
* If you have problems with this interpreter and/or fix bugs in it,
* please notify John Holder ([email protected]) and he will add your
* fix to the official JZIP distribution.
*/
#include "ztypes.h"
extern int GLOBALVER;
static void configure( zbyte_t, zbyte_t );
/*
* main
*
* Initialise environment, start interpreter, clean up.
*/
int main( int argc, char *argv[] )
{
process_arguments( argc, argv );
configure( V1, V8 );
initialize_screen( );
load_cache( );
z_restart( );
( void ) interpret( );
unload_cache( );
close_story( );
close_script( );
reset_screen( );
exit( EXIT_SUCCESS );
return ( 0 );
} /* main */
/*
* configure
*
* Initialise global and type specific variables.
*
*/
static void configure( zbyte_t min_version, zbyte_t max_version )
{
zbyte_t header[PAGE_SIZE], second;
read_page( 0, header );
datap = header;
h_type = get_byte( H_TYPE );
GLOBALVER = h_type;
if ( h_type < min_version || h_type > max_version ||
( get_byte( H_CONFIG ) & CONFIG_BYTE_SWAPPED ) )
fatal( "Wrong game or version" );
/*
* if (h_type == V6 || h_type == V7)
* fatal ("Unsupported zcode version.");
*/
if ( h_type < V4 )
{
story_scaler = 2;
story_shift = 1;
property_mask = P3_MAX_PROPERTIES - 1;
property_size_mask = 0xe0;
}
else if ( h_type < V8 )
{
story_scaler = 4;
story_shift = 2;
property_mask = P4_MAX_PROPERTIES - 1;
property_size_mask = 0x3f;
}
else
{
story_scaler = 8;
story_shift = 3;
property_mask = P4_MAX_PROPERTIES - 1;
property_size_mask = 0x3f;
}
h_config = get_byte( H_CONFIG );
h_version = get_word( H_VERSION );
h_data_size = get_word( H_DATA_SIZE );
h_start_pc = get_word( H_START_PC );
h_words_offset = get_word( H_WORDS_OFFSET );
h_objects_offset = get_word( H_OBJECTS_OFFSET );
h_globals_offset = get_word( H_GLOBALS_OFFSET );
h_restart_size = get_word( H_RESTART_SIZE );
h_flags = get_word( H_FLAGS );
h_synonyms_offset = get_word( H_SYNONYMS_OFFSET );
h_file_size = get_word( H_FILE_SIZE );
if ( h_file_size == 0 )
h_file_size = get_story_size( );
h_checksum = get_word( H_CHECKSUM );
h_alternate_alphabet_offset = get_word( H_ALTERNATE_ALPHABET_OFFSET );
if ( h_type >= V5 )
{
h_unicode_table = get_word( H_UNICODE_TABLE );
}
datap = NULL;
} /* configure */
------------------End jzip.c------------------------
Any help is greatly appreciated.
-Cooper