#include #include #include "flag.h" void FlagClearAll(FLAG *flags) { register int r, c; for(r=0; rnrows; r++) { for (c=0; cleng; c++) { flags->array[r][c] = 0; } } } FLAG *FlagCreate(int nrows, int ncols) { unsigned char *temp; FLAG *new_flag; register int i; new_flag = (FLAG *)G_malloc(sizeof(FLAG)); new_flag->nrows = nrows; new_flag->ncols = ncols; new_flag->leng = (ncols + 7) / 8; new_flag->array = (unsigned char **)G_malloc(nrows * sizeof(unsigned char *)); temp = (unsigned char *)G_calloc(nrows * new_flag->leng, sizeof(unsigned char)); for (i=0; iarray[i] = temp; temp += new_flag->leng; } return(new_flag); } void FlagDestroy(FLAG *flags) { G_free (flags->array[0]); G_free (flags->array); G_free (flags); } int FlagGet(FLAG *flags, int row, int col) { return(flags->array[row][col>>3] & (1 << (col & 7))); } void FlagSet(FLAG *flags, int row, int col) { flags->array[row][col>>3] |= (1 << (col & 7)); } void FlagUnset(FLAG *flags, int row, int col) { flags->array[row][col>>3] &= ~(1 << (col & 7)); }