This is NCommon.c in view mode; [Download] [Up]
#include <strings.h> #import "NCommon.h" /*----------------------------------------------------------------------*/ /* Purpose : Function returns the direction in whihc the flow will */ /* exit if it enters from a particular direction. This */ /* implies that if the return value is NOTVALID then the */ /* water flow connot enter from that direction! */ /* */ /* Parameters : NPipe_t pipe Pipe type to be tested. */ /* Direction_t entry Direction from which water flow */ /* will enter. */ /* */ /* Return value : Direction_t Direction from which water flow */ /* will exit pipe. */ /*----------------------------------------------------------------------*/ Direction_t entry2exit( NPipe_t pipe, Direction_t entry) { static Direction_t exit_direction[14][4] = { { INVALID_DIR, INVALID_DIR, INVALID_DIR, INVALID_DIR}, /* obstacle, no input , no exit */ { INVALID_DIR, INVALID_DIR, INVALID_DIR, INVALID_DIR}, /* unassigned, no input , no exit */ { INVALID_DIR, INVALID_DIR, INVALID_DIR, EAST}, /* source, no input , no exit */ { INVALID_DIR, SOUTH, INVALID_DIR, NORTH }, /* vertical pipe */ { WEST, INVALID_DIR, EAST, INVALID_DIR }, /* horizontal pipe */ { SOUTH, INVALID_DIR, INVALID_DIR, EAST }, /* upper left */ { INVALID_DIR, INVALID_DIR, SOUTH, WEST }, { NORTH, EAST, INVALID_DIR, INVALID_DIR }, { INVALID_DIR, WEST, NORTH, INVALID_DIR}, /* lower right */ { WEST, SOUTH, EAST, NORTH }, /* intersection */ { INVALID_DIR, INVALID_DIR, INVALID_DIR, NORTH }, { INVALID_DIR, SOUTH, INVALID_DIR, INVALID_DIR }, { WEST, INVALID_DIR, INVALID_DIR, INVALID_DIR }, { INVALID_DIR, INVALID_DIR, EAST, INVALID_DIR }, }; if( pipe < PIPE_UNASSIGNED || pipe > PIPE_HORIZONTAL_ONEWAY_RIGHT ) return INVALID_DIR; if( entry < EAST || entry > SOUTH ) return INVALID_DIR; return( exit_direction[(int)pipe][(int)entry] ); } /*----------------------------------------------------------------------*/ /* Purpose : Indicate the direction the water flow will enter the */ /* adjoining cell if it exits from a particular */ /* direction. */ /* */ /* Parameters : Direction_t entry Exit direction from current cell. */ /* */ /* Return value : Direction_t Direction from which water flow will */ /* enter new cell. */ /*----------------------------------------------------------------------*/ Direction_t exit2entry( Direction_t entry) { static Direction_t entry_direction[] = { WEST, SOUTH, EAST, NORTH }; if( entry < EAST || entry > SOUTH ) return INVALID_DIR; return( entry_direction[entry] ); } /*----------------------------------------------------------------------*/ /* Purpose : */ /* Parameters : */ /* Return value : */ /*----------------------------------------------------------------------*/ Rotation_t direction2rotation( NPipe_t pipe, Direction_t entry) { static Rotation_t rotation[14][4] = { { INVALID_ROT, INVALID_ROT, INVALID_ROT, INVALID_ROT }, /* obstacle, no input , no exit */ { INVALID_ROT, INVALID_ROT, INVALID_ROT, INVALID_ROT }, /* unassigned, no input , no exit */ { INVALID_ROT, INVALID_ROT, INVALID_ROT, INVALID_ROT }, /* source, no input , no exit */ { INVALID_ROT, INVALID_ROT, INVALID_ROT, INVALID_ROT }, /* vertical pipe */ { INVALID_ROT, INVALID_ROT, INVALID_ROT, INVALID_ROT }, /* horizontal pipe */ { COUNTERCLOCKWISE, INVALID_ROT, INVALID_ROT, CLOCKWISE }, /* upper left */ { INVALID_ROT, INVALID_ROT, CLOCKWISE, COUNTERCLOCKWISE }, { CLOCKWISE, COUNTERCLOCKWISE, INVALID_ROT, INVALID_ROT }, { INVALID_ROT, CLOCKWISE, COUNTERCLOCKWISE, INVALID_ROT }, /* lower right */ { INVALID_ROT, INVALID_ROT, INVALID_ROT, INVALID_ROT }, /* intersection */ { INVALID_ROT, INVALID_ROT, INVALID_ROT, NORTH }, { INVALID_ROT, SOUTH, INVALID_ROT, INVALID_ROT }, { WEST, INVALID_ROT, INVALID_ROT, INVALID_ROT }, { INVALID_ROT, INVALID_ROT, EAST, INVALID_ROT }, }; if( pipe < PIPE_UNASSIGNED || pipe > PIPE_HORIZONTAL_ONEWAY_RIGHT ) return INVALID_ROT; if( entry < EAST || entry > SOUTH ) return INVALID_ROT; return( rotation[(int)pipe][(int)entry] ); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.