home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 164.lha / ARexx / Make_Arexx / rxmake < prev    next >
Text File  |  1988-04-28  |  5KB  |  234 lines

  1. /*    Simple MAKE routine written in ARexx    */
  2.  
  3. address COMMAND
  4. drop Src. Obj.
  5.  
  6. 'list Source:*.c to ram:$$source'
  7. 'list Obj:*.o to ram:$$obj'
  8.  
  9. call open( 'source', 'ram:$$source', 'R' )
  10. call open( 'obj', 'ram:$$obj', 'R' )
  11. call open( 'exec', 'ram:$$comp', 'W' )
  12.  
  13. call readln( 'source' )
  14.  
  15. call getdateparms
  16. parmresult = 1
  17.  
  18. do forever
  19.     if eof( 'source' ) then break
  20.     instring = readln( 'source' )
  21.     call getparm
  22.     if parmresult = 0 then iterate
  23.  
  24.     Src. = fname
  25.     Src.sd = date
  26.     Src.st = time
  27.  
  28.     gomf = 0
  29.     call seek( 'obj', 0, 'B' )
  30.     do forever
  31.         if eof( 'obj' ) then gomf = 1
  32.         if gomf then break
  33.         instring = readln( 'obj' )
  34.         call getparm
  35.         if ( compare( Src., fname ) = 0) then break
  36.     end
  37.  
  38.     if gomf
  39.         then call makecomp
  40.         else do
  41.             Obj. = fname
  42.              Obj.od = date
  43.              Obj.ot = time
  44.  
  45.             call chkday( compare( Src.sd, Obj.od ) )
  46.         end
  47.  
  48. end
  49.  
  50. call close( 'source' )
  51. call close( 'obj' )
  52.  
  53. call writeln( 'exec', 'execute m:c/rlink Main' )
  54. call close( 'exec' )
  55.  
  56. echo ''
  57. echo 'Type...'
  58. echo ''
  59. echo '       execute ram:$$comp'
  60. echo ''
  61. echo '                ...to begin the compile and link process.'
  62. exit
  63.  
  64. getparm:
  65.     temp = pos( '.', instring ) - 1
  66.     if temp = -1 
  67.         then parmresult = 0
  68.         else do
  69.             parmresult = 1
  70.             fname = left( instring, temp )
  71.             date = subword( instring, 4, 1 )
  72.             time = subword( instring, 5, 1 )
  73.         end
  74. return(1)
  75.  
  76. a2d:
  77. arg string
  78.     tens = (c2d( substr(string,1,1) ) - 48) * 10
  79.     digits = (c2d( substr(string,2,1) ) - 48)
  80.     d = tens + digits
  81. return( d )
  82.  
  83. d2a:
  84. arg d
  85.     tens = d % 10 + 48
  86.     digits = d // 10 + 48
  87.     string = d2c(tens) || d2c(digits)
  88. return(string)
  89.  
  90. chkday:
  91. arg diff
  92.     if diff = 0
  93.         then call chkhrs
  94.         else call comparedates( Src.sd, Obj.od )
  95. return(1)
  96.  
  97. chkhrs:
  98.     hours = a2d( substr(Src.st,1,2) ) - a2d( substr(Obj.ot,1,2) )
  99.     diffmin = a2d( substr(Src.st,4,2) ) - a2d( substr(Obj.ot,4,2) )
  100.     diffsec = a2d( substr(Src.st,7,2) ) - a2d( substr(Obj.ot,7,2) )
  101.  
  102.     select
  103.         when hours < 0 then echo Src. 'will NOT be compiled...'
  104.         when hours > 0 then call makecomp
  105.         otherwise call chkmin( diffmin )
  106.     end
  107. return(1)
  108.  
  109. chkmin:
  110. arg mins
  111.     select
  112.         when mins < 0 then echo Src. 'will NOT be compiled...'
  113.         when mins > 0 then call makecomp
  114.         otherwise call chksec( diffsec )
  115.     end
  116. return(1)
  117.  
  118. chksec:
  119. arg secs
  120.     select
  121.         when secs < 0 then echo Src. 'will NOT be compiled...'
  122.         when secs > 0 then call makecomp
  123.         otherwise call makecomp
  124.     end
  125. return(1)
  126.  
  127. getdateparms:
  128.     dayname.1 = 'Sunday'
  129.     dayname.2 = 'Monday'
  130.     dayname.3 = 'Tuesday'
  131.     dayname.4 = 'Wednesday'
  132.     dayname.5 = 'Thursday'
  133.     dayname.6 = 'Friday'
  134.     dayname.7 = 'Saturday'
  135.  
  136.     'date >ram:$$date'
  137.  
  138.     call open( 'datefile','ram:$$date','R' )
  139.     instring = readln( 'datefile' )
  140.     call close( 'datefile' )
  141.  
  142.     day = subword( instring, 1, 1 )
  143.     date = subword( instring, 2, 1 )
  144.     todaysnum = dayofweek( day )
  145.  
  146.     dayname.todaysnum.fullnum = date
  147.     todaysdate = a2d( date,1,2 )
  148.  
  149.     call setdaydate
  150. return(1)
  151.  
  152. setdaydate:
  153. arg weekday
  154.     x = todaysnum
  155.     do i = 1 to 6
  156.         if x = 1
  157.             then x = 7
  158.             else x = x - 1
  159.         y = todaysdate - i
  160.  
  161.         if y < 1 then say 'crossed over month!!!'
  162.  
  163.         dayname.x.fullnum = d2a(y) || right(date, 7)
  164.     end
  165. return(1)
  166.  
  167. dayofweek:
  168. arg weekday
  169.     select
  170.         when weekday = 'SUNDAY' then datenumber = 1
  171.         when weekday = 'MONDAY' then datenumber = 2
  172.         when weekday = 'TUESDAY' then datenumber = 3
  173.         when weekday = 'WEDNESDAY' then datenumber = 4
  174.         when weekday = 'THURSDAY' then datenumber = 5
  175.         when weekday = 'FRIDAY' then datenumber = 6
  176.         when weekday = 'SATURDAY' then datenumber = 7
  177.         when weekday = 'TODAY' then datenumber = 8
  178.         when weekday = 'YESTERDAY' then datenumber = 9
  179.         otherwise datenumber = 0
  180.     end
  181. return(datenumber)
  182.  
  183. comparedates:
  184. arg Srcdate, Objdate
  185.     snum = dayofweek(Srcdate) 
  186.     if snum = 0 
  187.         then sdate = Src.date
  188.         else if snum >= 8
  189.             then do
  190.                 temp = todaysnum - (snum - 8)
  191.                 sdate = dayname.temp.fullnum
  192.                 end
  193.             else sdate = dayname.snum.fullnum
  194.  
  195.     onum = dayofweek(Objdate) 
  196.     if snum = 0 
  197.         then odate = Obj.date
  198.         else if snum >= 8
  199.             then do
  200.                 temp = todaysnum - (onum - 8)
  201.                 odate = dayname.temp.fullnum
  202.                 end
  203.             else odate = dayname.onum.fullnum
  204.  
  205.     call chkyear( sdate, odate )
  206. return(diff)
  207.  
  208. chkyear:
  209. arg s, o
  210.     if compare( right(s,2), right(o,2) )
  211.         then 
  212.             do
  213.             temp1 = a2d(right(s,2)
  214.             temp2 = a2d(right(o,2)
  215.             if ( (temp1 - temp2) >= 1 )
  216.                 then call makecomp
  217.                 else echo Src. 'will NOT be compiled...'
  218.             end
  219.         else if compare( substr(s,4,3), substr(o,4,3) )
  220.             then say 'months are different!'
  221.             else do
  222.                 temp1 = a2d(left(s,2))
  223.                 temp2 = a2d(left(o,2))
  224.                 if ( (temp1 - temp2) >= 1 )
  225.                     then call makecomp
  226.                     else echo Src. 'will NOT be compiled...'
  227.                 end
  228. return(1)
  229.  
  230. makecomp:
  231.     echo Src. 'will be compiled...'
  232.     call writeln( 'exec', 'execute m:c/rcomp ' || Src. )
  233. return(1)
  234.