public bool GetDO(int port) { Func <short, int> getDO = ty => { int s; N.GT_GetDo(card, ty, out s).Verify(); return(s); }; var p = port; if (p < 0) { return(false); } if (p < 16) { return(CheckBit(getDO(Api.MC_GPO), p)); } p -= 16; if (p < 8) { return(CheckBit(getDO(Api.MC_ENABLE), p)); } p -= 8; if (p < 8) { return(CheckBit(getDO(Api.MC_CLEAR), p)); } return(false); }