/* flag.[ch] is a set of routines which will set up an array of bits ** that allow the programmer to "flag" cells in a cell file. ** ** FLAG * ** flag_create(nrows,ncols) ** int nrows, ncols; ** opens the structure flag. ** The flag structure will be a two dimensional array of bits the ** size of nrows by ncols. Will initalize flags to zero (unset). ** ** flag_destroy(flags) ** FLAG *flags; ** closes flags and gives the memory back to the system. ** ** flag_clear_all(flags) ** FLAG *flags; ** sets all values in flags to zero. ** ** flag_unset(flags, row, col) ** FLAG *flags; ** int row, col; ** sets the value of (row, col) in flags to zero. ** ** flag_set(flags, row, col) ** FLAG *flags; ** int row, col; ** will set the value of (row, col) in flags to one. ** ** int ** flag_get(flags, row, col) ** FLAG *flags; ** int row, col; ** returns the value in flags that is at (row, col). ** ** idea by Michael Shapiro ** code by Chuck Ehlschlaeger ** April 03, 1989 */ #define FLAG struct _flagsss_ FLAG { int nrows, ncols, leng; unsigned char **array; }; #define FLAG_UNSET(flags,row,col) \ (flags)->array[(row)][(col)>>3] &= ~(1<<((col) & 7)) #define FLAG_SET(flags,row,col) \ (flags)->array[(row)][(col)>>3] |= (1<<((col) & 7)) #define FLAG_GET(flags,row,col) \ (flags)->array[(row)][(col)>>3] & (1<<((col) & 7)) /* flag_clr_all.c */ int flag_clear_all(FLAG *); /* flag_create.c */ FLAG *flag_create(int, int); /* flag_destroy.c */ int flag_destroy(FLAG *); /* flag_get.c */ int flag_get(FLAG *, int, int); /* flag_set.c */ int flag_set(FLAG *, int, int); /* flag_unset.c */ int flag_unset(FLAG *, int, int);