home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Interactive Guide / c-cplusplus-interactive-guide.iso / c_ref / csource1 / program4 / pushdbf.prg < prev    next >
Text File  |  1993-02-17  |  1KB  |  42 lines

  1.  
  2. #include "wat.ch"
  3.  
  4. STATIC stack
  5.  
  6. //────────────────────────────────────────────────────────────────────────────
  7.     FUNCTION Pushdbf()
  8. *-- Purpose: To save the current state of the dbf
  9. *-- Updated: Sat  04-11-1992  10:03:01
  10. //────────────────────────────────────────────────────────────────────────────
  11.  
  12.      If(stack == NIL, stack := {}, NIL)
  13.      aadd(stack, ;
  14.      { select(), recno(), indexord(), set(_SET_SOFTSEEK), set(_SET_DELETED) } )
  15.  
  16. RETURN len(stack)
  17.  
  18.  
  19. //────────────────────────────────────────────────────────────────────────────
  20.     FUNCTION Popdbf(nPop)                       // Ex.   nSav := Pushdbf()
  21. //  Purpose: To Restore the saved state of the dbf.      RECOVER using oErr
  22. //         :                                                Popdbf(nSav)
  23. //         :                                             END SEQUENCE
  24. //  Updated: Sat  04-11-1992  10:03:46                   Popdbf()
  25. //────────────────────────────────────────────────────────────────────────────
  26.   LOCAL bot
  27.  
  28.     IF stack != NIL
  29.        If(nPop == NIL, nPop := len(stack)-1, NIL)
  30.        WHILE (bot := len(stack)) > nPop
  31.           select(stack[bot,1]); dbgoto(stack[bot,2]); dbsetorder(stack[bot,3])
  32.           set(_SET_SOFTSEEK, stack[bot,4])
  33.           set(_SET_DELETED,  stack[bot,5])
  34.           ASHRINK(stack)
  35.        ENDWHILE
  36.        If(empty(stack), stack := NIL, NIL)
  37.     ENDIF
  38.  
  39. RETURN if(stack == NIL, 0, len(stack))
  40.  
  41.  
  42.