15c6c1daeSBarry Smith #include <petsc-private/fortranimpl.h> 25c6c1daeSBarry Smith 35c6c1daeSBarry Smith #if defined(PETSC_HAVE_FORTRAN_CAPS) 45c6c1daeSBarry Smith #define petscdrawzoom_ PETSCDRAWZOOM 55c6c1daeSBarry Smith #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 65c6c1daeSBarry Smith #define petscdrawzoom_ petscdrawzoom 75c6c1daeSBarry Smith #endif 85c6c1daeSBarry Smith 95c6c1daeSBarry Smith typedef void (PETSC_STDCALL *FCN)(PetscDraw*,void*,PetscErrorCode*); /* force argument to next function to not be extern C*/ 105c6c1daeSBarry Smith 115c6c1daeSBarry Smith static PetscErrorCode ourdrawzoom(PetscDraw draw,void *ctx) 125c6c1daeSBarry Smith { 135c6c1daeSBarry Smith PetscErrorCode ierr = 0; 145c6c1daeSBarry Smith 155c6c1daeSBarry Smith (*(void (PETSC_STDCALL*)(PetscDraw*,void*,PetscErrorCode*))(((PetscObject)draw)->fortran_func_pointers[0]))(&draw,ctx,&ierr);CHKERRQ(ierr); 165c6c1daeSBarry Smith return 0; 175c6c1daeSBarry Smith } 185c6c1daeSBarry Smith 195c6c1daeSBarry Smith EXTERN_C_BEGIN 205c6c1daeSBarry Smith 215c6c1daeSBarry Smith void PETSC_STDCALL petscdrawzoom_(PetscDraw *draw,FCN f,void *ctx,PetscErrorCode *ierr) 225c6c1daeSBarry Smith { 235c6c1daeSBarry Smith PetscObjectAllocateFortranPointers(*draw,1); 245c6c1daeSBarry Smith ((PetscObject)*draw)->fortran_func_pointers[0] = (PetscVoidFunction)f; 25*a297a907SKarl Rupp 265c6c1daeSBarry Smith *ierr = PetscDrawZoom(*draw,ourdrawzoom,ctx); 275c6c1daeSBarry Smith } 285c6c1daeSBarry Smith 295c6c1daeSBarry Smith EXTERN_C_END 30