1. Converting C
- Posted by Joseph Martin <jam at MAILHUB.EXIS.NET> Jun 09, 1997
- 839 views
- Last edited Jun 10, 1997
I have a C program that calculates stardates in several different ways. It came in source only and I can get the darn thing to compile. (It might help if I had the docs for the compiler and knew what I was doing =>). Is there anyone here who could convert the program to Euphoria for me? It is more or less ANSI C (I think). If you can please respond via private mail at joe at cyber-wizard.com Thanks. ~~>Joseph Martin ~~>E-mail: joe at cyber-wizard.com ~~>URL: http://users.exis.net/~jam/
2. Re: Converting C
- Posted by Larry D Poos <ldpoos at JUNO.COM> Jun 13, 1997
- 838 views
On Mon, 9 Jun 1997 21:39:45 -0500 Joseph Martin <jam at MAILHUB.EXIS.NET> writes: >I have a C program that calculates stardates in several different >ways. It came in source only and I can get the darn thing to compile. >(It might help if I had the docs for the compiler and knew what I was >doing =>). Is there anyone here who could convert the program to >Euphoria for me? I did not convert his source from C but I did find a couple of C algorithms that calculated Scalar, Julian and Papal calendar dates and converted them. If you need to do some date calculations these might help. Larry D. Poos -[USMC (Retar{bks}{bks}ired) Havelock, NC]- - Programming and System Consultant, LTAD Enterprises - e-mail: ldpoos at juno.com Fido: 1:3629/101.6 -- begin code -- ****************************************************************** -- -- Filename: Dates.ex -- Author: Larry D. Poos -- Enviormemt: Euphouia -- Date: Thu 06-12-1997 -- Date Last Modified: Fri 06-13-1997 -- Remarks: -- some date functions converted from c++ files -- -- ****************************************************************** function isleap(atom yr) -- leap years are years divisible evenly by 4 unless they are the -- last year of a century (end in 00). If they are the last year of a -- century they must be divisible by 400 to be a leap year. atom Leap Leap= remainder(yr,400)=0 or (remainder(yr,100)!=0 and remainder(yr,4)=0) return Leap end function function month2Sdays(integer month) return (month*3057-3007)/100 end function function years2Sdays(integer year) return year*365 + year/4 - year/100 + year/400 end function function Date2sdn(atom year,atom month,atom day) -- calculate scalar date useful for calculating the number of days -- between two dates ** uses Jan. 1, 1 AD as te base date atom scalar scalar=day+month2Sdays(month) if month >2 then if isleap(year) then scalar=scalar-2 else scalar=scalar-1 end if end if year=year-1 scalar=scalar+years2Sdays(year) return scalar end function function ParseMo(atom month) sequence MoName MoName={"Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec"} return MoName[month] end function function ParseJul(atom Jul) sequence Caln Caln={"AutoMatic","Papal","Julian"} return Caln[2+Jul] end function constant LASTJD = 15821004 function ymd2jdn(atom y,atom m,atom d, atom LASTJD, atom julian) atom jdn if julian <0 then -- calculate if date is before or after conversion from Julian by the -- pope on 4 Oct 1582 when the next day became 15 Oct 1582 julian = (((y*100)+m)*100+d<=LASTJD) end if if y<0 then y=y+1 end if if julian then jdn=367*y-7*(y+5001+(m-9)/7)/4+275*m/9+d+1729777 else jdn=(d-32076)+1461*(y+4800+(m-14)/12)/4 +367*(m-2-(m-14)/12*12)/12-3*((y+4900+(m-14)/12)/100)/4 end if return {julian,jdn} end function procedure ScalarDate(atom yy, atom mm,atom dd) printf(1,"\n Scalar date at noon on %s/%d/%d is %d \n", {ParseMo(mm),dd,yy,Date2sdn(yy,mm,dd)}) end procedure procedure JDNDate(atom yy, atom mm,atom dd, atom julian) sequence JDN JDN=ymd2jdn(yy,mm,dd,LASTJD,julian) printf(1," JDN(StarDate) by the %6s calander = %d\n", {ParseJul(JDN[1]),JDN[2]}) end procedure -- main atom yy,mm,dd,CalType -- sub this with your own input routines yy=1582 mm=10 dd=4 CalType=-1 -- <0=Automatic 0=Papal >0=Julian -- then call this ScalarDate(yy,mm,dd) JDNDate(yy,mm,dd,CalType) -- test data CalType=1 JDNDate(yy,mm,dd,CalType) CalType=0 JDNDate(yy,mm,dd,CalType) yy=1582 mm=10 dd=5 CalType=-1 ScalarDate(yy,mm,dd) JDNDate(yy,mm,dd,CalType) CalType=1 JDNDate(yy,mm,dd,CalType) CalType=0 JDNDate(yy,mm,dd,CalType) yy=1582 mm=10 dd=15 CalType=-1 ScalarDate(yy,mm,dd) JDNDate(yy,mm,dd,CalType) CalType=1 JDNDate(yy,mm,dd,CalType) CalType=0 JDNDate(yy,mm,dd,CalType) yy=1997 mm=6 dd=13 CalType=-1 ScalarDate(yy,mm,dd) JDNDate(yy,mm,dd,CalType) CalType=1 JDNDate(yy,mm,dd,CalType) CalType=0 JDNDate(yy,mm,dd,CalType) -- end code