home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Database / CLIPR503.W96 / MOD.PR_ / MOD.PR
Text File  |  1995-06-20  |  3KB  |  65 lines

  1. /***
  2. *
  3. *  Mod.prg
  4. *
  5. *  Summer '87 MOD() Compatibility Routine
  6. *
  7. *  Copyright (c) 1993, Computer Associates International Inc.
  8. *  All rights reserved.
  9. *
  10. */
  11.  
  12.  
  13. /***
  14. *
  15. *    MOD( <expN1>, <expN2> )
  16. *
  17. *    Return remainder of <expN1> divided by <expN2>
  18. *
  19. *    Note: Difference between the dBASE modulus function and the Clipper
  20. *         modulus operator is indicated by an arrow <-->:
  21. *
  22. *         Clipper operator:        dBASE function:
  23. *         -----------------        -----------------
  24. *          3 %  3 ::=  0.00        MOD( 3, 3) ::=  0      
  25. *          3 %  2 ::=  1.00        MOD( 3, 2) ::=  1      
  26. *          3 %  1 ::=  0.00        MOD( 3, 1) ::=  0      
  27. *          3 %  0 ::=  0.00  <-->  MOD( 3, 0) ::=  3      
  28. *          3 % -1 ::=  0.00        MOD( 3,-1) ::=  0      
  29. *          3 % -2 ::=  1.00  <-->  MOD( 3,-2) ::= -1      
  30. *          3 % -3 ::=  0.00        MOD( 3,-3) ::=  0      
  31. *                                                            
  32. *         -3 %  3 ::=  0.00        MOD(-3, 3) ::=  0      
  33. *         -3 %  2 ::= -1.00  <-->  MOD(-3, 2) ::=  1      
  34. *         -3 %  1 ::=  0.00        MOD(-3, 1) ::=  0      
  35. *         -3 %  0 ::=  0.00  <-->  MOD(-3, 0) ::= -3      
  36. *         -3 % -1 ::=  0.00        MOD(-3,-1) ::=  0      
  37. *         -3 % -2 ::= -1.00        MOD(-3,-2) ::= -1      
  38. *         -3 % -3 ::=  0.00        MOD(-3,-3) ::=  0      
  39. *                                                            
  40. *          3 %  3 ::=  0.00        MOD( 3, 3) ::=  0      
  41. *          2 %  3 ::=  2.00        MOD( 2, 3) ::=  2      
  42. *          1 %  3 ::=  1.00        MOD( 1, 3) ::=  1      
  43. *          0 %  3 ::=  0.00        MOD( 0, 3) ::=  0      
  44. *         -1 %  3 ::= -1.00  <-->  MOD(-1, 3) ::=  2      
  45. *         -2 %  3 ::= -2.00  <-->  MOD(-2, 3) ::=  1      
  46. *         -3 %  3 ::=  0.00        MOD(-3, 3) ::=  0      
  47. *                                                            
  48. *          3 % -3 ::=  0.00        MOD( 3,-3) ::=  0      
  49. *          2 % -3 ::=  2.00  <-->  MOD( 2,-3) ::= -1      
  50. *          1 % -3 ::=  1.00  <-->  MOD( 1,-3) ::= -2      
  51. *          0 % -3 ::=  0.00        MOD( 0,-3) ::=  0      
  52. *         -1 % -3 ::= -1.00        MOD(-1,-3) ::= -1      
  53. *         -2 % -3 ::= -2.00        MOD(-2,-3) ::= -2      
  54. *         -3 % -3 ::=  0.00        MOD(-3,-3) ::=  0      
  55. */
  56. FUNCTION MOD(cl_num, cl_base)
  57.    
  58.    LOCAL cl_result
  59.  
  60.     cl_result = cl_num % cl_base
  61.  
  62.     RETURN IF( cl_base = 0, ;
  63.                cl_num,;
  64.                IF(cl_result * cl_base < 0, cl_result + cl_base, cl_result) )
  65.