Main Page   Data Structures   File List   Data Fields   Globals  

chain2disk.c

Go to the documentation of this file.
00001 #include <stdlib.h>
00002 #include "sadie.h"
00003 #include "chain.h"
00004 
00005 
00006 void CHAIN2DISK (
00007 CHAIN *chainmap,              /* Pointer to chain structure */
00008 char *filename                /* Filename for saving the chain code */
00009 ) {
00010     unsigned char termcode, termvalid;
00011     LIST_NODE *current_lnode;
00012     CHAIN_NODE *current_cnode;
00013     FILE *fp;
00014 
00015     fp = fopen(filename, "w");
00016     if (fp == NULL) {
00017         MESSAGE('E'," Unable to open file for writing chain code.");
00018         goto the_end;
00019     }
00020 
00021     termcode = TERM_CODE;
00022     termvalid = TERM_VALID;
00023 
00024     /* Write header to disk */
00025     fwrite((char *)&(chainmap->nlin), CHAIN_HEADER_SIZE, 1, fp);
00026     current_lnode = chainmap->list;
00027     while (current_lnode != NULL) {
00028         fwrite((char *)&(current_lnode->startj), 2*sizeof(unsigned int), 1, fp);
00029         fwrite((char *)&(current_lnode->ring_type), sizeof(unsigned char), 1, fp);
00030         fwrite((char *)&(current_lnode->ring_id), sizeof(int), 1, fp);
00031         current_cnode = current_lnode->chain;
00032         while (current_cnode != NULL) {
00033             /* Write chain code and valid byte */
00034             fwrite((char *)&(current_cnode->code), 2*sizeof(unsigned char), 1, fp);
00035             current_cnode = (CHAIN_NODE *)current_cnode->next;
00036         }
00037         /* Write terminating code(9) and valid byte for chain */
00038         fwrite((unsigned char *)&termcode, sizeof(unsigned char), 1, fp);
00039         fwrite((unsigned char *)&termvalid, sizeof(unsigned char), 1, fp);
00040 
00041         current_lnode = current_lnode->next;
00042     }
00043     fclose(fp);
00044     
00045     the_end:
00046 }
00047 

Generated on Wed Apr 9 08:56:03 2003 for TREES by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002