/************************************************************************** F I L E S . C ***************************************************************************/ /* Filename : files.c * purpose : To create, read, and update the information files * associated to different puzzle pieces. ***************************************************************************/ #include #include #include "statline.h" #include "piece.h" #include extern int inverse_isthmus; extern int deltax, deltay; extern int i; extern char strg[79]; extern struct fgread_struct fg_rw; /**************************************************************************** load_piece_ds ****************************************************************************/ load_piece_ds(length,x,y,pcnum) int *length, *x, *y, pcnum; { int i,j,k; piece[pcnum].pathcnt = *length; for(i=1; i<=*length; i++) { k = x[i]; piece[pcnum].avgx[i] = (float)k; } for(i=1; i<=*length; i++) { k = y[i]; piece[pcnum].avgy[i] = (float)k; } piece[pcnum].strtx = (int)piece[pcnum].avgx[1]; piece[pcnum].strty = (int)piece[pcnum].avgy[1]; } /* end function */ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ read_new_info initializes the piece data structure kept in memory from info on file. the pathcnt, x's, y's, numinres, startx, and starty MUST be loaded in here for the previous "curv" code to work properly -- well... as properly as can be expected. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ read_new_info(pcnum) int pcnum; { int i,j,good,fp,fp2,d,r,reslt; char c; int numpts,resl; float fltnum; sprintf(strg,"piece%d.xy",pcnum); fp = open(strg,2); if (fp == -1) { sprintf(strg, "fp problems can not open: piece%d.xy",pcnum); printit(strg); return(-1); } reslt = read(fp,&numpts,4); /* Prints out the first array of integers ==> X's */ for(i=1;i<=numpts;i++) { reslt = read(fp,&j,4); piece[pcnum].avgx[i] = (float)j; } /* Prints out the second array of integers ==> Y's */ for(i=1;i<=numpts;i++) { reslt = read(fp,&j,4); piece[pcnum].avgy[i] = (float)j; } reslt = read(fp,&j,4); piece[pcnum].isthnum = j; for(i=1; i<=piece[pcnum].isthnum; i++) { reslt = read(fp,&j,4); piece[pcnum].dmtisth[i].indexbeg = j; reslt = read(fp,&j,4); piece[pcnum].dmtisth[i].indexend = j; reslt = read(fp,&j,4); piece[pcnum].dmtisth[i].lenseg = j; reslt = read(fp,&j,4); piece[pcnum].dmtisth[i].skeldist = j; /*printf ("skeldist: %d\n", j); */ reslt = read(fp,&j,4); piece[pcnum].dmtisth[i].index_dist = j; reslt = read(fp,&j,4); piece[pcnum].dmtisth[i].branch_index = j; } reslt = read(fp,&j,4); piece[pcnum].inv_isthnum = j; for(i=1; i<=piece[pcnum].inv_isthnum; i++) { reslt = read(fp,&j,4); piece[pcnum].inv_isth[i].indexbeg = j; reslt = read(fp,&j,4); piece[pcnum].inv_isth[i].indexend = j; reslt = read(fp,&j,4); piece[pcnum].inv_isth[i].lenseg = j; reslt = read(fp,&j,4); piece[pcnum].inv_isth[i].skeldist = j; /*printf ("skeldist: %d\n", j); */ reslt = read(fp,&j,4); piece[pcnum].inv_isth[i].index_dist = j; reslt = read(fp,&j,4); piece[pcnum].inv_isth[i].branch_index = j; } reslt = read(fp,&j,4); piece[pcnum].pos_skelx[0] = j; for(i=1; i<=piece[pcnum].pos_skelx[0]; i++) { reslt = read(fp,&j,4); piece[pcnum].pos_skelx[i] = j; } for(i=1; i<=piece[pcnum].pos_skelx[0]; i++) { reslt = read(fp,&j,4); piece[pcnum].pos_skely[i] = j; } reslt = read(fp,&j,4); piece[pcnum].inv_skelx[0] = j; for(i=1; i<=piece[pcnum].inv_skelx[0]; i++) { reslt = read(fp,&j,4); piece[pcnum].inv_skelx[i] = j; } for(i=1; i<=piece[pcnum].inv_skelx[0]; i++) { reslt = read(fp,&j,4); piece[pcnum].inv_skely[i] = j; } close (fp); piece[pcnum].pathcnt = numpts; piece[pcnum].strtx = (int)piece[pcnum].avgx[1]; piece[pcnum].strty = (int)piece[pcnum].avgy[1]; } /* end function */ /***************************************************************************** WRITE_NEW_PIECE *****************************************************************************/ write_new_piece(pcnum) int pcnum; { int i,j,k,fp; int length; sprintf(strg,"piece%d.xy",pcnum); fp = creat(strg,0777); if (fp == -1) printf("Hello == You have FILE CREATION Problems!!\n\n"); else { length = piece[pcnum].pathcnt; k = length; j = write(fp,&k,4); for(i=1; i<=length; i++) { k = (int)piece[pcnum].avgx[i]; j = write(fp,&k,4); } for(i=1; i<=length; i++) { k = (int)piece[pcnum].avgy[i]; j = write(fp,&k,4); } k = piece[pcnum].isthnum; j = write(fp,&k,4); for(i=1; i<=piece[pcnum].isthnum; i++) { k = piece[pcnum].dmtisth[i].indexbeg; j = write(fp,&k,4); k = piece[pcnum].dmtisth[i].indexend; j = write(fp,&k,4); k = piece[pcnum].dmtisth[i].lenseg; j = write(fp,&k,4); k = piece[pcnum].dmtisth[i].skeldist; j = write(fp,&k,4); k = piece[pcnum].dmtisth[i].index_dist; j = write(fp,&k,4); k = piece[pcnum].dmtisth[i].branch_index; j = write(fp,&k,4); } if (inverse_isthmus) { k = piece[pcnum].inv_isthnum; j = write(fp,&k,4); for(i=1; i<=piece[pcnum].inv_isthnum; i++) { k = piece[pcnum].inv_isth[i].indexbeg; j = write(fp,&k,4); k = piece[pcnum].inv_isth[i].indexend; j = write(fp,&k,4); k = piece[pcnum].inv_isth[i].lenseg; j = write(fp,&k,4); k = piece[pcnum].inv_isth[i].skeldist; j = write(fp,&k,4); k = piece[pcnum].inv_isth[i].index_dist; j = write(fp,&k,4); k = piece[pcnum].inv_isth[i].branch_index; j = write(fp,&k,4); } } else { k = 0; j = write(fp,&k,4); } k = piece[pcnum].pos_skelx[0]; j = write(fp,&k,4); for(i=1; i<=piece[pcnum].pos_skelx[0]; i++) { k = piece[pcnum].pos_skelx[i]; j = write(fp,&k,4); } for(i=1; i<=piece[pcnum].pos_skelx[0]; i++) { k = piece[pcnum].pos_skely[i]; j = write(fp,&k,4); } k = piece[pcnum].inv_skelx[0]; j = write(fp,&k,4); for(i=1; i<=piece[pcnum].inv_skelx[0]; i++) { k = piece[pcnum].inv_skelx[i]; j = write(fp,&k,4); } for(i=1; i<=piece[pcnum].inv_skelx[0]; i++) { k = piece[pcnum].inv_skely[i]; j = write(fp,&k,4); } }/* end of ok to write to files */ close(fp); printit("All DONE Writing Piece Information "); } /* end function */ /***************************************************************************** WRITE_IMAGE_TO_FILE *****************************************************************************/ write_image_to_file(pcnum, minx, maxx, miny, maxy) int pcnum, minx, maxx, miny, maxy; { int i,j,k,fp, y; int length; int *values = fg_rw.values; /* makes it faster */ sprintf(strg,"piece%d.image",pcnum); fp = creat(strg,0777); if (fp == -1) printf("Hello == You have FILE CREATION Problems!!\n\n"); else { k = minx; j = write(fp,&k,4); k = maxx; j = write(fp,&k,4); k = miny; j = write(fp,&k,4); k = maxy; j = write(fp,&k,4); deltax = maxx - minx; for (y=miny; y <= maxy; y++) { VIS$READ_HORIZONTAL_LINE (minx, y, deltax, values); for (i=0;i