home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 18 REXX / 18-REXX.zip / kzr_0899.zip / MOD.CMD < prev    next >
OS/2 REXX Batch file  |  1998-07-11  |  3KB  |  73 lines

  1. /*  REXX-Programm  mod(x,y)  */
  2.    signal on syntax name potMOD  
  3.  
  4. /* Diese Variablen müssen für jede Prozedur definiert werden, damit die  */
  5. /* Prozedur die Variable bufND kennt und die Variable ND übernehmen kann.*/
  6.    Pfd=SysSearchPath("PATH", "kzr.cmd")
  7.    lp=LastPos("\", Pfd)
  8.    Pfd=DelStr(Pfd, 1+lp)
  9.    NDAMOD=Pfd||"NDAMOD.DAT"
  10.    bufND =Pfd||"NDZahl.DAT"
  11.    bufMsg=Pfd||"Meldung.DAT"
  12.  
  13.    arg u,v,s
  14.    
  15.    if length(s)>0 then
  16.    do
  17.      call charout(NDAMOD) ; Call SysFileDelete NDAMOD
  18.      ret=LineOut(bufMsg, "Im Argument von  MOD(.. , ..)  ist mindestens  1  nicht zulässige Variable !")
  19.   /* "bufMsg" und  "bufND" werden immer beim Beenden von kzr.cmd gelöscht, */
  20.   /*  damit in den diesbezüglichen temporären Dateien                      */
  21.   /*  Meldungen und ND-Werte nicht aneinandergehängt werden.               */
  22.      EXIT
  23.    end
  24.   
  25.    if length(v)=0 | v==0 then
  26.    do
  27.      call charout(NDAMOD) ; Call SysFileDelete NDAMOD
  28.      ret=LineOut(bufMsg, "Die zweite Variable der Funktion  MOD(.. , ..)  fehlt oder ist gleich Null !")
  29.   /* "bufMsg" und  "bufND" werden immer beim Beenden von kzr.cmd gelöscht, */
  30.   /*  damit in den diesbezüglichen temporären Dateien                      */
  31.   /*  Meldungen und ND-Werte nicht aneinandergehängt werden.               */
  32.      EXIT
  33.    end
  34.                                   
  35.    if v<1 then
  36.    do
  37.      call charout(NDAMOD) ; Call SysFileDelete NDAMOD
  38.      ret=LineOut(bufMsg, "Das zweite Argument von  MOD(.. , ..)  darf nicht Null oder negativ sein !")
  39.   /* "bufMsg" und  "bufND" werden immer beim Beenden von kzr.cmd gelöscht, */
  40.   /*  damit in den diesbezüglichen temporären Dateien                      */
  41.   /*  Meldungen und ND-Werte nicht aneinandergehängt werden.               */
  42.      EXIT              
  43.    end                               
  44.                                   
  45.    lu=length(Format(abs(u),,,0))
  46.    lv=length(Format(abs(v),,,0))
  47.    lm=Max(lu,lv); 
  48.    ND=lm
  49.    NUMERIC DIGITS ND+6
  50.  
  51. /*   if v=1 & abs(u)>0 then do; z=0; signal RT; end
  52.    if v>1 & abs(u)=0 then do; z=0; signal RT; end  */
  53.  
  54.    if abs(u)>0 & v=1  then do; z=0; signal RT; end
  55.    if abs(u)=0 & v>=1 then do; z=0; signal RT; end  
  56.    if sign(u)==sign(v) then z=u-v*trunc(u/v) 
  57.                        else z=u+v*(1-trunc(u/v))
  58.    RT:
  59.    NUMERIC DIGITS ND
  60.    return(Format(z))
  61.  
  62. potMOD:
  63.    sf=ErrorText(RC)
  64.    if  Pos("Bad arithmetic conversion", sf) > 0 then
  65.    do
  66.      call charout(NDAMOD) ; Call SysFileDelete NDAMOD
  67.      ret=LineOut(bufMsg, "Sie haben in  MOD(.. , ..)  keine gültigen Argumente eingegeben !")
  68.   /* "bufMsg" und  "bufND" werden immer beim Beenden von kzr.cmd gelöscht, */
  69.   /*  damit in den diesbezüglichen temporären Dateien                      */
  70.   /*  Meldungen und ND-Werte nicht aneinandergehängt werden.               */
  71.      EXIT
  72.    end
  73.