1. Pointer work around
- Posted by Paul Martin <twilight at WCC.NET> Jan 07, 1999
- 596 views
--=====================_915745647==_ Hello all, I still kinda interested in porting Doom to Euphoria, and overwhelming response was that pointers would pose a problem. Well I've enclosed a short C++ program that uses pointers and a ported Euphoria version. I was wondering if some of you who know C or C++ and Euphoria would mind taking a look at it, and determine if this would work in a larger port like Doom. The version of Doom I would like to port in a Linux version that seems to be written almost entirely in C, so I don't think I have to worry about pointers and dynamic memory. Thanks Paul Martin --=====================_915745647==_ x-mac-type="705A4950"; x-mac-creator="705A4950"
2. Re: Pointer work around
- Posted by "Krepps, K" <kkrepps at ALINK.COM> Jan 07, 1999
- 580 views
The version of Doom I would like to port in a Linux version that seems to be written almost entirely in C, so I don't think I have to worry about pointers and dynamic memory. You still might, C has pointers not just C++. -----Original Message----- From: Euphoria Programming for MS-DOS [mailto:EUPHORIA at LISTSERV.MUOHIO.EDU]On Behalf Of Paul Martin Sent: Thursday, January 07, 1999 10:47 AM To: EUPHORIA at LISTSERV.MUOHIO.EDU Subject: Pointer work around Hello all, I still kinda interested in porting Doom to Euphoria, and overwhelming response was that pointers would pose a problem. Well I've enclosed a short C++ program that uses pointers and a ported Euphoria version. I was wondering if some of you who know C or C++ and Euphoria would mind taking a look at it, and determine if this would work in a larger port like Doom. The version of Doom I would like to port in a Linux version that seems to be written almost entirely in C, so I don't think I have to worry about pointers and dynamic memory. Thanks Paul Martin
3. Re: Pointer work around
- Posted by Irv Mullins <irv at ELLIJAY.COM> Jan 07, 1999
- 581 views
On Thu, 7 Jan 1999 09:47:27 -0600, Paul Martin <twilight at WCC.NET> wrote: >Hello all, > >I still kinda interested in porting Doom to Euphoria, and overwhelming >response was that pointers would pose a problem. Well I've enclosed a short >C++ program that uses pointers and a ported Euphoria version. Looks good to me. I would make a function to get the input values, as below, to save space. include get.e -- to handle value() -- Code to setup structure for point sequence point, pt1, pt2, median constant point_x = 1, point_y = 2 point = {0,0} pt1 = point pt2 = point function getMedian( sequence p1, sequence p2) -- set-up new structure for result sequence result result = point -- do the actual business result[point_x] = (p1[point_x]+p2[point_x])/2 result[point_y] = (p1[point_y]+p2[point_y])/2 return result end function function getXY (atom pt) sequence xy xy = point printf(1,"Enter the X and Y coordinates for point # %d : ",pt) xy[point_x] = gets(0) xy[point_x] = value (xy[point_x]) xy[point_x] = xy[point_x][2] printf(1,"%d\t",xy[point_x]) xy[point_y] = gets(0) xy[point_y] = value (xy[point_y]) xy[point_y] = xy[point_y][2] printf(1,"%d\n",xy[point_y]) return xy end function pt1 = getXY(1) pt2 = getXY(2) median = getMedian(pt1,pt2) printf (1,"Mid point in (%g, %g)\n", {median[point_x],median[point_y]})
4. Re: Pointer work around
- Posted by Adam Weeden <SkaMan325 at AOL.COM> Jan 08, 1999
- 570 views
Your program in C or Eu doesn't even use pointers!
5. Re: Pointer work around
- Posted by Paul Martin <twilight at WCC.NET> Jan 08, 1999
- 584 views
Hello, I'm afraid that there is some sort of misunderstanding here. I copied this program directly from a book, and the section I copied it from was entitled "Passing Structures by Pointers" which incidentally is in the remarks in the program. If this program is not using pointers; then what is it using? If you have a short C program that uses pointers; I would like to see it. I'm not saying you are wrong, because I still have a lot to learn about C and C++. And yes, my Euphoria program does not contain pointers because, Euphoria as far as I know does not support them, at least the way C or C++ does. What I was trying to achieve was to rewrite the source code for the Linux version of Doom into Euphoria. Since Euphoria does not handle pointers and structures like C does I was trying to find a simple solution that can be inserted, so that I would not have completely restructure the program and its data. Thanks Paul Martin At 03:58 AM 1/8/99 EST, you wrote: >Your program in C or Eu doesn't even use pointers! > >
6. Re: Pointer work around
- Posted by "Cuny, David" <David.Cuny at DSS.CA.GOV> Jan 08, 1999
- 634 views
Paul Martin wrote: > Since Euphoria does not handle pointers and structures like C > does I was trying to find a simple solution that can be inserted, > so that I would not have completely restructure the program and > its data. You probably want to map C structures into Euphoria sequences. Instead of pointers, store the 'structures' in a global sequence, and pass the index instead of a pointer. I typically name my global structure 'the'. It help if you have some support functions to allocate/deallocate indexes in the sequence. You can do this by setting up a parallel sequence which contains a flag indicating if the sequence is free (untested code follows): sequence the, isFree the = {} isFree = {} function storeVal( object val ) -- store a value into sequence 'the' -- return the index integer at -- look for a free slot at = find( -1, isFree ) if at then -- store the[at]= val -- flag as taken isFree[at] = 0 -- return index return at end if -- add an index the = append( the, value ) -- add a flag isFree = append( isFree, 0 ) -- return index return length( the ) end function procedure freeVal( integer index ) -- free value at index -- free the memory the[index] = 0 -- flag the index as free isFree[index] = -1 end procedure The functions storeVal/freeVal roughly map into malloc/free. The 'swap' function is typical example using pointers. In Euphoria (and C), since parameters are treated as local, the following will *NOT* work: procedure swap( integer a, integer b ) -- example of swap routine that *won't* work integer tmp tmp = a a = b b = tmp end procedure Here is a version which uses indexes to the global sequence instead: procedure swap( integer first, integer second ) -- swap two values in a global sequence integer tmp tmp = the[first] the[first] = the[second] the[second] = tmp end procedure You could then do a swap like this: integer ptrA, ptrB -- allocate and store values in "addresses" ptrA = storeVal( 123 ) ptrB = storeVal( 456 ) -- swap values in "addresses" swap( ptrA, ptrB ) -- display values in "addresses" ? the[ptrA] ? the[ptrB] -- free "addresses" freeVal( ptrA ) freeVal( ptrB ) I find that 'the' as the name of the global sequence makes my code more readable: the[creature][image] = bitmap12 Hope this helps. -- David Cuny
7. Re: Pointer work around
- Posted by Adam Weeden <SkaMan325 at AOL.COM> Jan 08, 1999
- 567 views
- Last edited Jan 09, 1999
Your program just uses 2 variables that have two other variables that are "twins" of them. I'll come up with a simple C pointer program later and send it to you.
8. Re: Pointer work around
- Posted by Adam Weeden <SkaMan325 at AOL.COM> Jan 09, 1999
- 614 views
--part0_915900581_boundary Content-ID: <0_915900581 at inet_out.mail.aol.com.1> Content-type: text/plain; charset=US-ASCII Here is a simple C++ prog that uses pointers, i put in comments but if there are any questions feel free to ask. --part0_915900581_boundary Content-ID: <0_915900581 at inet_out.mail.aol.com.2> Content-type: text/plain; name="POINTER.CPP" Content-transfer-encoding: quoted-printable Content-disposition: inline // Pointer example. #include <iostream.h> #include <math.h> #include <complex.h> typedef struct =09{ =09=09int X, Y; =09} Point; double Slope(Point First, Point Second); void main() { =09Point P[2] //Declares an array of two sets of points. =09Point *PP; //Declares a pointer to a point. =09PP =3D new Point; //Initiallizes pointer. =09PP =3D &P[0]; //Sets pointer to equal the first point in P. =09cout << "X1: "; =09cin >> PP->X; //Gets the value of X1 with the pointer. =09cout << "Y1 :"; =09cin >> PP->Y; //Gets the value of Y1 with the pointer. =09PP++; //Sets the pointer to equal the second point in P. =09cout << "X2 :"; =09cin >> PP->X; //Gets the value of X2 with the pointer. =09cout << "Y2 :"; =09cin >> PP->Y; //Gets the value of Y2 with the pointer. =09cout << "The slope of the line between (X1, Y1) and (X2, Y2) is " =09cout << Slope(P[0], P[1]) << "."; //Finds the slope with the actual a= rray. } double Slope(Point One, Point Two) { =09return ((Two.Y - One.Y)/(Two.X - One.X)); } --part0_915900581_boundary--
9. Re: Pointer work around
- Posted by stab master <stabmaster_ at HOTMAIL.COM> Jan 11, 1999
- 577 views
I've ported some polygon-drawing routines written i C to Euphoria, and I had to solve the problem with pointers. This is how I did it: I changed anything looking like this: struct { int X int Y }Array char Array *pt1 int Crap Crap=pt1->X to this: sequence Array integer Crap constant X=1 constant Y=2 Array=repeat(0,2) Crap=Array[X] ...And anything looking like this: int Array[200] int Crap Crap=*(Array+100) was changed to this: sequence Array integer Crap Array=repeat(0,200) Crap=Array[100] I hope this makes sense. It worked anyway... ______________________________________________________ Get Your Private, Free Email at http://www.hotmail.com
10. Re: Pointer work around
- Posted by Adam Weeden <SkaMan325 at AOL.COM> Jan 11, 1999
- 567 views
it's still not using anything pointer oriented in Euphoria but its a step in the right direction.
11. Re: Pointer work around
- Posted by Irv Mullins <irv at ELLIJAY.COM> Jan 11, 1999
- 557 views
On Mon, 11 Jan 1999 03:14:18 EST, Adam Weeden <SkaMan325 at AOL.COM> wrote: >it's still not using anything pointer oriented in Euphoria but its a step in >the right direction. It's a workaround for the lack of proper structures in Euphoria. A pointer is a value corresponding to the address of an object in memory. There is no need for a pointer in Euphoria, since there is nothing you can do with the address of the variable that you can't do by referencing the object directly by name, or name[index]. Nothing, that is, except crash the program by overwriting something you shouldn't be messing with. I believe that Euphoria moves stuff around in memory as it wants, which means unless you specifically allocate a block of memory for a variable, it won't necessarily be in the same place next time you look for it. Irv
12. Re: Pointer work around
- Posted by Daniel Berstein <daber at PAIR.COM> Jan 11, 1999
- 593 views
At 04:14 a.m. 11-01-99 , you wrote: >it's still not using anything pointer oriented in Euphoria but its a step in >the right direction. > The main problem with pointers in Euphoria is that we can't pass arguments by reference. The only work around is to make variables globals (ugghh!) or make it a function. Example in unchecked C (I'm no C expert): void square(long* a) { *a *= *a; } int main(....) { long x; ... square(&x); } [probably this C code is wrong, but some C guy may fix it, it only shows the idea] In Euphoria you have two choices: A) global integer x procedure square() x = x*x end procedure ... square() B) function square(integer a) return a*a end function integer x ... x = square(x) Alternative A is quite un practicable. Alternative B is what we usually do. The problems get's worst when you're working with sequences, you have to use (most of the times) a temporary sequence. What I would like to see in Euphoria: 1) Passing variables by reference 2) Sequence templates Sequence templates would be like records, and would define the general "morphology" of a sequence. Example: template MySeq MySeq = {{integer, sequence},{atom}} end template sequence x of MySeq x = {{0,"Hello"},{1000}} -- OK x = {{"Hello",0},{1000}} -- Wrong! Compiler error expected Regards, Daniel Berstein daber at pair.com