hi there, i need some help here, i've the script in .cpp below and i want
to compile using ns2 (my OS is windows XP and i use cygwin), please help
me...

===================start code==============================================

#include "freeway.h"
#include "map.h"
#include "node.h"

//global variable
int global_clock=0;

class Map mymap;
class Node *mynode;



//sort all nodes on the maps into several queues
void sort_initial(class Map *my_map, class Node *my_node)
{
        int i,j;
        int src_lane_id,src_phase_id;
        int pre=-1,suc=-1;
        float min_pre=10000.0,min_suc=10000.0; // min distance to pre/suc

        printf("N=%d\n",NUM_OF_NODE);

        for(i=0;i<NUM_OF_NODE;i++)
        {

                src_lane_id = my_node[i].src_lane;
                src_phase_id = my_node[i].src_phase;
                pre=-1;suc=-1;
                min_pre=10000.0;min_suc=10000.0;

                //if the lane is empty, insert the 1st one
                if(my_map->lane_array[src_lane_id].vehicle_head == NULL)
                        my_map->link_initiate (src_lane_id,i);

                //else
                else {
                        for(j=0;j<i;j++)
                        {
                                if( my_node[i].src_lane == my_node[j].src_lane 
&&
                                        my_node[i].src_phase >= 
my_node[j].src_phase &&
                                        
//getmy_distance(my_node[i].src_x,my_node[i].src_y,my_node[j].src_x,my_node[j].src_x)
< min_suc &&
                                        
//getmy_sign(my_map->lane_array[src_lane_id].phase_array[src_phase_id].x0,my_map->lane_array[src_lane_id].phase_array[src_phase_id].x1,my_map->lane_array[src_lane_id].phase_array[src_phase_id].y0,my_map->lane_array[src_lane_id].phase_array[src_phase_id].y1)
                                        //  ==
getmy_sign(my_node[j].src_x,my_node[i].src_x,my_node[j].src_y,my_node[i].src_y)
                                        
getmy_phase_dist1(my_node[i].src_phase,my_node[i].src_offset,my_node[j].src_phase,my_node[j].src_offset)
< min_suc    )
                                {
                                        suc = j;
                                        min_suc =
getmy_phase_dist1(my_node[i].src_phase,my_node[i].src_offset,my_node[j].src_phase,my_node[j].src_offset);
                                        
//printf("i=%d,suc=%d,min_suc=%f\n",i,suc,min_suc);
                                }

                                if( my_node[i].src_lane == my_node[j].src_lane 
&&
                                        my_node[i].src_phase <= 
my_node[j].src_phase &&
                                        
//getmy_distance(my_node[i].src_x,my_node[i].src_y,my_node[j].src_x,my_node[j].src_x)
< min_pre &&
                                        
//getmy_sign(my_map->lane_array[src_lane_id].phase_array[src_phase_id].x0,my_map->lane_array[src_lane_id].phase_array[src_phase_id].x1,my_map->lane_array[src_lane_id].phase_array[src_phase_id].y0,my_map->lane_array[src_lane_id].phase_array[src_phase_id].y1)
                                        //  ==
getmy_sign(my_node[i].src_x,my_node[j].src_x,my_node[i].src_y,my_node[j].src_y)
)
                                        
getmy_phase_dist2(my_node[i].src_phase,my_node[i].src_offset,my_node[j].src_phase,my_node[j].src_offset)
< min_pre )
                                {
                                        pre = j;
                                        min_pre =
getmy_phase_dist2(my_node[i].src_phase,my_node[i].src_offset,my_node[j].src_phase,my_node[j].src_offset);
                                        
//printf("i=%d,pre=%d,min_pre=%f\n",i,pre,min_pre);
                                }
                        }//for j
                        //printf("ID=%d's pre=%d, suc=%d\n",i,pre,suc);
                        my_map->link_insert(src_lane_id,pre,suc,i);
                }//if-else

                //printf("node=%d on lane=%d: ",i,src_lane_id);
                //my_map->show_linklist(src_lane_id);

        }//for i

        //printf("INITIATION: queue is like that\n");
        //for(i=0;i<my_map->get_lane_num();i++)
        //      my_map->show_linklist(i);
}


float speed_check(int i, int clock, class Map *my_map, class Node *my_node)
{
        int predecessor,successor;
        float distance1,distance2,return_value;

        predecessor = my_map->predecessor(i);
        successor =  my_map->successor(i);
        if(predecessor!=-1)
                
distance1=getmy_distance(my_node[i].x_array[clock],my_node[i].y_array[clock],my_node[predecessor].x_array[clock],my_node[predecessor].y_array[clock]);
        if(successor!=-1)
                
distance2=getmy_distance(my_node[i].x_array[clock],my_node[i].y_array[clock],my_node[successor].x_array[clock],my_node[successor].y_array[clock]);

        //printf("i=%d's predecessor is %d,
successor=%d\n",i,predecessor,successor);
        //printf("dist1=%f,dist2=%f\n",distance1,distance2);

        if(predecessor == -1 && successor!= -1 && distance2 >= 40.0)
                return_value = -1.0;
        else if( predecessor != -1 && distance1 <= 40.0 )
                return_value = my_node[predecessor].speed_array[clock] - 
ACCELERATION*0.5;
        else if( predecessor != -1 && successor!= -1 && distance1 >100.0 &&
distance2< 40.0 )
                return_value = my_node[i].speed_array[clock]+ACCELERATION;
        else if(predecessor == -1 && successor!= -1 && distance2<40.0)
                return_value = my_node[i].speed_array[clock]+ACCELERATION;
        else
                return_value = -1;

        //printf("value=%f\n",return_value);
        return return_value;
}





//main function
void main()
{
        int m,n;
        int i,j,k;
        float req_speed;
        FILE *fp;
        int input_d;
        float input_f;
        char map_name[20],trace_name[20];


        printf("*********************************************************\n");
        printf("*Welcome to the Freeway Mobility Generator by [EMAIL 
PROTECTED]");
        printf("*********************************************************\n\n");

        printf("input Number of Node:\n");
        scanf("%d",&input_d);
        NUM_OF_NODE = input_d;

        printf("input the Acceleration Speed:\n");
        scanf("%f",&input_f);
        ACCELERATION = input_f;

        printf("input the Filename of the map:\n");
        scanf("%s", map_name);

        printf("input the Filename of the Trace Output File:\n");
        scanf("%s", trace_name);

        mynode = new class Node[NUM_OF_NODE];

        mymap.map_read(map_name);
        fp = fopen(trace_name,"w");
        if(fp == NULL)
        {       printf("Error opening output file!\n");
                exit(-1);       }


        for(i=0;i<100;i++)
                        rand();

        mymap.map_read(map_name);

        fp = fopen(trace_name,"w");
        if(fp == NULL)
        {       printf("Error opening output file!\n");
                exit(1);
        }

        for(i=0;i<NUM_OF_NODE;i++)
                {
                        for(n=0;n<100;n++)
                                rand();
                        mynode[i].initialize(i,&mymap);
                        //mynode[i].show_trace (0);
                }
        sort_initial(&mymap,mynode);

        for(i=0;i<NUM_OF_NODE;i++)
                mynode[i].save_file(fp,0,0);


        for(i=1;i<SIMULATION_DURATION;i++)
                for(j=0;j<NUM_OF_NODE;j++)
                        {
                                rand();
                                global_clock=i;

                                req_speed = 
speed_check(j,global_clock-1,&mymap,mynode);
                                mynode[j].update(&mymap,global_clock,req_speed);
                                //mynode[j].show_trace(global_clock);
                        }


        for(k=0; k<SIMULATION_DURATION;k++)
                for(i=0;i<NUM_OF_NODE;i++)
                        for(j=i+1;j<NUM_OF_NODE;j++)
                                if( 
getmy_distance(mynode[i].x_array[k],mynode[i].y_array[k],
                                        
mynode[j].x_array[k],mynode[j].y_array[k]) < 0.01 )
                                {
                                        //printf("TOO close: t=%d, i=%d 
<%f,%f>, j=%d <%f,%f>\n",
                                        //      
k,i,mynode[i].x_array[k],mynode[i].y_array[k],
                                        //      
j,mynode[j].x_array[k],mynode[j].y_array[k]);
                                        if( mynode[i].y_array[k] >= 
mynode[j].y_array[k] )
                                                mynode[i].y_array[k] += 0.2;
                                        else if ( mynode[i].y_array[k] < 
mynode[j].y_array[k] )
                                                mynode[j].y_array[k] += 0.2;
                                }

        for(k=0; k<SIMULATION_DURATION;k++)
                for(i=0;i<NUM_OF_NODE;i++)
                        for(j=i+1;j<NUM_OF_NODE;j++)
                                if( 
getmy_distance(mynode[i].x_array[k],mynode[i].y_array[k],
                                        
mynode[j].x_array[k],mynode[j].y_array[k]) < 0.01 )
                                {
                                        //printf("STILL TOO close: t=%d, i=%d 
<%f,%f>, j=%d <%f,%f>\n",
                                        //      
k,i,mynode[i].x_array[k],mynode[i].y_array[k],
                                        //      
j,mynode[j].x_array[k],mynode[j].y_array[k]);
                                }


        for(j=SIMULATION_DURATION-1;j>=0;j--)
                for(i=0;i<NUM_OF_NODE;i++)
                        mynode[i].save_file(fp,1,j);

        fclose(fp);
        delete [] mynode;

}



=====================================end code==============================

thank you for your help...





Reply via email to