00001 #include <stdlib.h>
00002 #include "sadie.h"
00003 #include "chain.h"
00004
00005
00006 void CHAIN2DISK (
00007 CHAIN *chainmap,
00008 char *filename
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
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
00034 fwrite((char *)&(current_cnode->code), 2*sizeof(unsigned char), 1, fp);
00035 current_cnode = (CHAIN_NODE *)current_cnode->next;
00036 }
00037
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