Pick the Best Route and Means (Air or Ground) to Ship a Package Between Two Cities

////////////////////////////////////////////////////////////////////////////
// Transportation Megaprogram
//
// Joshua Hui
// Meikel Poess
// Catherine Tornabene
//
// March 24, 1997
// 
////////////////////////////////////////////////////////////////////////////



// Indicate which megamodules will be used

import "IOMM"         // does I/O between megaprogram and user 
import "RouteMM"      // get all routes between two given cities
import "AirMM"        // calculate the cost between two cities by air
import "GroundMM"     // calculate the cost between two cities by ground
import "BestRouteMM"  // pick the best route, given several routes


Program 
{

   // bind to the megamodules

   ioh = setup ("IOMM");
   routeh = setup ("RouteMM");
   airh = setup ("AirMM");
   groundh = setup ("GroundMM");
   bestrouteh = setup ("BestRouteMM"); 


   // get the two desired cities from the megaprogram user
   ioph = ioh.invoke ("input");
 
   // wait for the IO megamodule to finish 
   while (ioph.examine () != DONE) {}
  
   // get all routes between the two cities 
   routeph = routeh.invoke ("GetRoutes", ioph.OutputString);
  
   // wait for the route megamodule to finish 
   while (routeph.examine () != DONE) {}

   // get all city pairs
   routeph = routeh.invoke ("GetCityPairList", routeph.RouteList);
   
   // wait for the route megamodule to finish 
   while (routeph.examine () != DONE) {}

   // calculate the costs of all routes
   airph = airh.invoke ("GetCost", routeph.CityPairs);
   groundph = groundh.invoke ("GetCost", routeph.CityPairs);

   // wait for air, ground megamodules to finish
   while (airph.examine () != DONE) {}
   while (groundph.examine () != DONE) {}

   // pick the best route
   bestrouteph = bestrouteh.invoke ("PickBest", groundph.GroundCost, 
                                                airph.AirCost, 
                                                routeph.RouteList);

   // wait for best route megamodule to finish
   while (bestrouteph.examine () != DONE) {}

   // print out the best route for the megaprogram user
   ioph = ioh.invoke ("output", bestrouteph.BestRoute);

}



3/25/97ct