INTEGER FUNCTION IPLOC (LOC, SX, IX)
      REAL SX(*)
      INTEGER IX(*)
C***FIRST EXECUTABLE STATEMENT  IPLOC
      IF (LOC.LE.0) THEN
         CALL XERMSG ('SLATEC', 'IPLOC',
     +     'A value of LOC, the first argument, .LE. 0 was encountered',
     +     55, 1)
         IPLOC = 0
         RETURN
      ENDIF
C
C     Two cases exist:  (1.LE.LOC.LE.K) .OR. (LOC.GT.K).
C
      K = IX(3) + 4
      LMX = IX(1)
      LMXM1 = LMX - 1
      IF (LOC.LE.K) THEN
         IPLOC = LOC
         RETURN
      ENDIF
C
C     Compute length of the page, starting address of the page, page
C     number and relative working address.
C
      LPG = LMX-K
      ITEMP = LOC - K - 1
      IPAGE = ITEMP/LPG + 1
      IPLOC = MOD(ITEMP,LPG) + K + 1
      NP = ABS(IX(LMXM1))
C
C     Determine if a page fault has occurred.  If so, write page NP
C     and read page IPAGE.  Write the page only if it has been
C     modified.
C
      IF (IPAGE.NE.NP) THEN
         IF (SX(LMX).EQ.1.0) THEN
            SX(LMX) = 0.0
            KEY = 2
            CALL PRWPGE (KEY, NP, LPG, SX, IX)
         ENDIF
         KEY = 1
         CALL PRWPGE (KEY, IPAGE, LPG, SX, IX)
      ENDIF
      RETURN
      END