/* PsychCopyInScreenNumberArg() Automaticially derive the screen number from a window index if provided. Otherwise return the screen number if that is what is provided. */ psych_bool PsychCopyInScreenNumberArg(int position, psych_bool required, int *screenNumber) { PsychNumdexType numdex; PsychWindowRecordType *winRec; double arg; psych_bool isThere; if(position==kPsychUseDefaultArgPosition) position = kPsychDefaultNumdexArgPosition; isThere=PsychCopyInDoubleArg(position,required,&arg); if(!isThere) return(FALSE); numdex = (PsychNumdexType)arg; if(IsWindowIndex(numdex)){ //it's a window index, so get the window record and from that get the screen number. FindWindowRecord((PsychWindowIndexType)numdex, &winRec); *screenNumber=winRec->screenNumber; return(TRUE); }else if(IsValidScreenNumber(numdex)){ //it's a screen number, so just return it. *screenNumber=(int)numdex; return(TRUE); }else{ //we were passed something that is neither a window index nor a screen number so issue an error. PsychErrorExitMsg(PsychError_invalidNumdex,NULL); return(FALSE); } }
/* Accept a screen number and return the corresponding screen record */ PsychError FindScreenRecord(int screenNumber, PsychScreenRecordType **screenRecord) { if(IsValidScreenNumber(screenNumber)){ *screenRecord = screenRecordArrayWINBANK[screenNumber]; return(PsychError_none); }else return(PsychError_invalidScumber); }
psych_bool PsychIsScreenNumberArg(int position) { PsychNumdexType numdex; double arg; if(position==kPsychUseDefaultArgPosition) position = kPsychDefaultNumdexArgPosition; if(!PsychCopyInDoubleArg(position,kPsychArgAnything,&arg)) return(FALSE); numdex = (PsychNumdexType)arg; return(IsValidScreenNumber(numdex)); }
/* PsychIsScreenNumberOrUnaffiliatedArg() Returns true iff the argument in the specified position is either a window argumen or one of the key values which means not to associate a window with any particular display. For now that value is -1 but within the PTB environment we could also alow NaN because that makes more sense than -1. */ psych_bool PsychIsScreenNumberOrUnaffiliatedArg(int position) { PsychNumdexType numdex; double arg; if(position==kPsychUseDefaultArgPosition) position = kPsychDefaultNumdexArgPosition; if(!PsychCopyInDoubleArg(position,FALSE,&arg)) return(FALSE); numdex = (PsychNumdexType)arg; return(IsValidScreenNumber(numdex) || numdex==kPsychUnaffiliatedWindow); }