C++ builder 6

hello

can some one help me with builder. i have a cpp file. but i do not know how works builder.
normaly i work with turbo C++. In the help file i read that i need a header file and 
(object treeview and object inspector) how i can make this
 code:
/---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "sort.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
  __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
  void __fastcall TForm1::Input1Change(TObject *Sender)
{
        Input1->MaxLength = 20;                
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        ReadUserData();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ReadUserData()
{
//pre:
//post:OutputData(int& len, int* data) is called if input OK, else: idle
        int len = Input1->GetTextLen();
        len++;                                   //'\0'
        pBuf = new char[len];
        if ( pBuf == 0 )
        {
                ShowMessage("Error: memory could not be allocated");
                exit(0);
        }

        Input1->GetTextBuf(pBuf, len);
        if ( len <= 1 )
        {
                ShowMessage("Enter at least one character,please.");
                Input1->SetFocus();
                return;
        }
        FilterData(len, pBuf);
        if ( len <= 1 )
        {
                ShowMessage("There is no low case letter typed.");
                Input1->SetFocus();
                return;
        }
        if ( !ConcatenateExtraLetter(len, pBuf) )
        {
                EditExtraLetter->SetFocus();
                return;
        }
        len++;                                  //for pBufPlus extra letter

        int size_array = (len-1);
        array = new int[size_array];
        if ( array == 0 )
        {
                ShowMessage("Error: memory could not be allocated");
                exit(0);
        }

        for (int i=0;i<size_array;i++)
        {
                array[i] = *pBufPlus;
                pBufPlus++;
        }

        Quicksort(0,size_array-1,array);
        OutputData( len, array );

}
//---------------------------------------------------------------------------
void __fastcall TForm1::FilterData(int& len, char* data)
{
//pre:contains "len" and "data" data
//post:"len" and "data" data changed if input not OK (not low case letters)
        for (int i=0;i<len-1;i++)
        {
                int a = int(data[i]);
                if ( a < 97 || a > 122 )
                {
                        for (int j=i;j<len-1;j++)
                        {
                                data[j] = data[j+1];
                        }
                        len--;
                        if ( i <= (len-2) )
                        {
                                i--;
                        }
                }
        }
}
//---------------------------------------------------------------------------
bool __fastcall TForm1::ConcatenateExtraLetter(int len, char* Data)
{
//pre:contains "len" and "Data" data
//post:false is returned,if extra letter notOK,else:ExtraLetter is concatenated
//     with Data and true returned
        ExtraLetter = new char;
        if ( ExtraLetter == 0 )
        {
                ShowMessage("Error: memory could not be allocated");
                exit(0);
        }
        int LenLetter = EditExtraLetter->GetTextLen();
        LenLetter++;            //'\0'
        EditExtraLetter->GetTextBuf(ExtraLetter, LenLetter);
        FilterData( LenLetter, ExtraLetter );
        if ( LenLetter == 1 )
        {
                ShowMessage("The extra character has to be low case letter!");
                return false;

        }
        len++;
        pBufPlus = new char[len];
        if ( pBufPlus == 0 )
        {
                ShowMessage("Error: memory could not be allocated");
                exit(0);
        }


        strcpy(pBufPlus,Data);
        pBufPlus[len-2] = ExtraLetter[0];
        return true;
}
//---------------------------------------------------------------------------
int __fastcall TForm1::Partition( int left,int right,int arr[] )
{
//pre: contains left, right, arr[]
//post: elements of arr[] are swapped and/if rm returned
        int lm, rm, pivot, temp;
        pivot = arr[left];
        lm = left-1;
        rm = right+1;
        for (;;)
        {
                do
			rm--;
		while (arr[rm] > pivot);
                do
			lm++;
		while( arr[lm] < pivot);

                if( lm < rm )
                {
                        swap(arr[lm],arr[rm]);
                }
                else    return rm;
        }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Quicksort( int left, int right, int arr[] )
{
//pre: contains left, right, arr[]
//post: elements of arr[] are swapped if they had to be sorted
	if(left < right)
        {
                int NewPivot = Partition(left, right, arr);
		Quicksort( left, NewPivot, arr );
		Quicksort( NewPivot+1, right, arr );
        }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::swap( int& left, int& right)
{
//pre: contains left, right
//post: left and right values are swapped
        int temp;
        temp = left;
        left = right;
        right = temp;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OutputData(int& len, int* data)
{
//pre: contains len, data
//post: Edit fields are changed
        char* text = new char[len];
        if ( text == 0 )
        {
                ShowMessage("Error: memory could not be allocated");
                exit(0);
        }
        
        int LetterNumber;
        for (int i=0;i<len-1;i++)
        {
                text[i] = char(data[i]);
        }
        text[len-1] = '\0';
        Output1->Text = text;

        LetterNumber = GetExtraLetterNumber( len, text );
        EditExtraLetterNr->Text = LetterNumber;
        Input1->SetFocus();
}
//---------------------------------------------------------------------------
int __fastcall TForm1::GetExtraLetterNumber(int len, char * data)
{
//pre: contains len, data
//post: number is returned
        int number;
        for (number=0;number<len;number++)
        {
                if ( *data == ExtraLetter[0] )
                {
                        break;
                }
                data++;
        }
        number++;
        return number;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Input1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
        if ( Key == 13 )
        {
                Button1->Click();
        }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::EditExtraLetterChange(TObject *Sender)
{
        EditExtraLetter->MaxLength = 1;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::EditExtraLetterKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
        if ( Key == 13 )
        {
                Button1->Click();
        }
}
//---------------------------------------------------------------------------


thanks

T&T
0
hans
3/10/2009 9:57:11 AM
embarcadero.cppbuilder.ide 2180 articles. 1 followers. Follow

2 Replies
1009 Views

Similar Articles

[PageSpeed] 10
Get it on Google Play
Get it on Apple App Store

First of all you need more information than is provided.
A form in C++ Builder consists of 3 files of which you have shown 1.
1) .h file - contains class definition for form data
2) .cpp file - contains the code
3) .dfm file - contains form definition - what controls are visible and all 
properties (values) for each control
I am assuming that your cpp file is called sort.cpp. You therefore need 
sort.h and sort.dfm to continue.
Once you have these files, add sort.cpp to a new VCL Forms project and it 
should compile.
If you don't have those files then you are probably stuck.
Come back here if you have problems once you have found the files.
Cheers, Pete

<hans v.d heuvel> wrote in message news:90765@forums.codegear.com...
> hello
>
> can some one help me with builder. i have a cpp file. but i do not know 
> how works builder.
> normaly i work with turbo C++. In the help file i read that i need a 
> header file and
> (object treeview and object inspector) how i can make this
> code:
> /---------------------------------------------------------------------------
>
> #include <vcl.h>
> #pragma hdrstop
>
> #include "sort.h"
> //---------------------------------------------------------------------------
> #pragma package(smart_init)
> #pragma resource "*.dfm"
> TForm1 *Form1;
> //---------------------------------------------------------------------------
> __fastcall TForm1::TForm1(TComponent* Owner)
>        : TForm(Owner)
> {
> }
> //---------------------------------------------------------------------------
>  __fastcall TForm1::TForm1(TComponent* Owner)
>        : TForm(Owner)
> {
> }
> //---------------------------------------------------------------------------
>  void __fastcall TForm1::Input1Change(TObject *Sender)
> {
>        Input1->MaxLength = 20;
> }
> //---------------------------------------------------------------------------
> void __fastcall TForm1::Button1Click(TObject *Sender)
> {
>        ReadUserData();
> }
> //---------------------------------------------------------------------------
> void __fastcall TForm1::ReadUserData()
> {
> //pre:
> //post:OutputData(int& len, int* data) is called if input OK, else: idle
>        int len = Input1->GetTextLen();
>        len++;                                   //'\0'
>        pBuf = new char[len];
>        if ( pBuf == 0 )
>        {
>                ShowMessage("Error: memory could not be allocated");
>                exit(0);
>        }
>
>        Input1->GetTextBuf(pBuf, len);
>        if ( len <= 1 )
>        {
>                ShowMessage("Enter at least one character,please.");
>                Input1->SetFocus();
>                return;
>        }
>        FilterData(len, pBuf);
>        if ( len <= 1 )
>        {
>                ShowMessage("There is no low case letter typed.");
>                Input1->SetFocus();
>                return;
>        }
>        if ( !ConcatenateExtraLetter(len, pBuf) )
>        {
>                EditExtraLetter->SetFocus();
>                return;
>        }
>        len++;                                  //for pBufPlus extra letter
>
>        int size_array = (len-1);
>        array = new int[size_array];
>        if ( array == 0 )
>        {
>                ShowMessage("Error: memory could not be allocated");
>                exit(0);
>        }
>
>        for (int i=0;i<size_array;i++)
>        {
>                array[i] = *pBufPlus;
>                pBufPlus++;
>        }
>
>        Quicksort(0,size_array-1,array);
>        OutputData( len, array );
>
> }
> //---------------------------------------------------------------------------
> void __fastcall TForm1::FilterData(int& len, char* data)
> {
> //pre:contains "len" and "data" data
> //post:"len" and "data" data changed if input not OK (not low case 
> letters)
>        for (int i=0;i<len-1;i++)
>        {
>                int a = int(data[i]);
>                if ( a < 97 || a > 122 )
>                {
>                        for (int j=i;j<len-1;j++)
>                        {
>                                data[j] = data[j+1];
>                        }
>                        len--;
>                        if ( i <= (len-2) )
>                        {
>                                i--;
>                        }
>                }
>        }
> }
> //---------------------------------------------------------------------------
> bool __fastcall TForm1::ConcatenateExtraLetter(int len, char* Data)
> {
> //pre:contains "len" and "Data" data
> //post:false is returned,if extra letter notOK,else:ExtraLetter is 
> concatenated
> //     with Data and true returned
>        ExtraLetter = new char;
>        if ( ExtraLetter == 0 )
>        {
>                ShowMessage("Error: memory could not be allocated");
>                exit(0);
>        }
>        int LenLetter = EditExtraLetter->GetTextLen();
>        LenLetter++;            //'\0'
>        EditExtraLetter->GetTextBuf(ExtraLetter, LenLetter);
>        FilterData( LenLetter, ExtraLetter );
>        if ( LenLetter == 1 )
>        {
>                ShowMessage("The extra character has to be low case 
> letter!");
>                return false;
>
>        }
>        len++;
>        pBufPlus = new char[len];
>        if ( pBufPlus == 0 )
>        {
>                ShowMessage("Error: memory could not be allocated");
>                exit(0);
>        }
>
>
>        strcpy(pBufPlus,Data);
>        pBufPlus[len-2] = ExtraLetter[0];
>        return true;
> }
> //---------------------------------------------------------------------------
> int __fastcall TForm1::Partition( int left,int right,int arr[] )
> {
> //pre: contains left, right, arr[]
> //post: elements of arr[] are swapped and/if rm returned
>        int lm, rm, pivot, temp;
>        pivot = arr[left];
>        lm = left-1;
>        rm = right+1;
>        for (;;)
>        {
>                do
> rm--;
> while (arr[rm] > pivot);
>                do
> lm++;
> while( arr[lm] < pivot);
>
>                if( lm < rm )
>                {
>                        swap(arr[lm],arr[rm]);
>                }
>                else    return rm;
>        }
> }
> //---------------------------------------------------------------------------
> void __fastcall TForm1::Quicksort( int left, int right, int arr[] )
> {
> //pre: contains left, right, arr[]
> //post: elements of arr[] are swapped if they had to be sorted
> if(left < right)
>        {
>                int NewPivot = Partition(left, right, arr);
> Quicksort( left, NewPivot, arr );
> Quicksort( NewPivot+1, right, arr );
>        }
> }
> //---------------------------------------------------------------------------
> void __fastcall TForm1::swap( int& left, int& right)
> {
> //pre: contains left, right
> //post: left and right values are swapped
>        int temp;
>        temp = left;
>        left = right;
>        right = temp;
> }
> //---------------------------------------------------------------------------
> void __fastcall TForm1::OutputData(int& len, int* data)
> {
> //pre: contains len, data
> //post: Edit fields are changed
>        char* text = new char[len];
>        if ( text == 0 )
>        {
>                ShowMessage("Error: memory could not be allocated");
>                exit(0);
>        }
>
>        int LetterNumber;
>        for (int i=0;i<len-1;i++)
>        {
>                text[i] = char(data[i]);
>        }
>        text[len-1] = '\0';
>        Output1->Text = text;
>
>        LetterNumber = GetExtraLetterNumber( len, text );
>        EditExtraLetterNr->Text = LetterNumber;
>        Input1->SetFocus();
> }
> //---------------------------------------------------------------------------
> int __fastcall TForm1::GetExtraLetterNumber(int len, char * data)
> {
> //pre: contains len, data
> //post: number is returned
>        int number;
>        for (number=0;number<len;number++)
>        {
>                if ( *data == ExtraLetter[0] )
>                {
>                        break;
>                }
>                data++;
>        }
>        number++;
>        return number;
> }
> //---------------------------------------------------------------------------
> void __fastcall TForm1::Input1KeyDown(TObject *Sender, WORD &Key,
>      TShiftState Shift)
> {
>        if ( Key == 13 )
>        {
>                Button1->Click();
>        }
> }
> //---------------------------------------------------------------------------
> void __fastcall TForm1::EditExtraLetterChange(TObject *Sender)
> {
>        EditExtraLetter->MaxLength = 1;
> }
> //---------------------------------------------------------------------------
>
> void __fastcall TForm1::EditExtraLetterKeyDown(TObject *Sender, WORD &Key,
>      TShiftState Shift)
> {
>        if ( Key == 13 )
>        {
>                Button1->Click();
>        }
> }
> //---------------------------------------------------------------------------
>
>
> thanks
>
> T&T
0
Pete
3/10/2009 4:12:35 PM
hans v.d heuvel wrote:

> hello
> 
> can some one help me with builder. i have a cpp file. but i do not
> know how works builder.  normaly i work with turbo C++. In the help
> file i read that i need a header file and (object treeview and object
> inspector) how i can make this  code:
> /---------------------------------------------------------------------
> ------

I'd start by finding a decent book or reading the manual.

You posted a .cpp file, which contains your code, but it won't be much
use without the associated ".dfm" file which defines the visual layout
of the form (buttons, labels, etc), and the .h file which has all the
class declarations.

 - Roddy
0
Roddy
3/10/2009 10:52:32 PM
Reply:

Similar Artilces:

problem of converting from C++ Builder 6 to C++ Builder 2007
Hi, A program which was developed by our partner was built fine with C++ Builder 6. Now I need to make some changes to it. We bought C++ Builder 2007 a few weeks ago. When I open the program with C++ Builder 2007, I was told that the project needs to be converted. I agreed. Then when I compile it, some errors happen: [BCC32 Error] ComCtrls.hpp(435): E2272 Identifier expected [BCC32 Error] ComCtrls.hpp(3880): E2272 Identifier expected [BCC32 Error] ComCtrls.hpp(4658): E2272 Identifier expected ...... Anybody has any idea how to fix it? Thanks, Allen In article <14040@f...

Convert to C++ Builder XE from C++ Builder 6 and 2007
Any information regarding the roadblocks of converting the code build in C++ Builder 6,2007 to C++ Builder XE? On 6/20/2012 8:20 AM, Girish Duddu wrote: > Any information regarding the roadblocks of converting the code build in C++ Builder 6,2007 to C++ Builder XE? The big change is the default string in XE is UnicodeString rather than AnsiString. All VCL String properites (Text, etc.) are Unicode in XE. There are good white papers regarding making this transition on the Embarcadero EDN site. I found that most of the changes I had to make fell into two categories: 1) Places...

sgcWebSockets for C++ Builder 6
The library documentation and the install readme says that the project, who was build for Delphi, works as well for C++ Builder. [http://www.esegece.com/manual/sgcWebSockets.pdf] a) All Delphi/C++Builder Versions: Add the directory {$DIR}\source to the library path How can I run delphi code in a C++ Builder Project? Is it possible? > {quote:title=Eliseu Martins Gomes wrote:}{quote} > The library documentation and the install readme says that the project, who was build for Delphi, works as well for C++ Builder. Most Delphi components are usable in C++Builder...

Error while launching C++ Builder 6 IDE [Edit]
Hi, Good Afternoon, I have installed japanese version of C++ builder 6 software in my PC(English version of Windows XP). After complete installation(typical mode), i tried to launch the IDE through the following path. Start->All Programs-> Borland C++Builder 6-> C++ Builder6. While launching the IDE, i am getting the following error. I tried installation in other modes(Custom and Compact) also. I am facing the same problem. *モジュール’coreide60.bpl'のアドレス0053FE88でアドレス00000008に対する読み込み違反が起きました* Can anyone help me in resolving this error? Is there any pre-requisite for in...

C++ Builder 6 professional IDE Package beta testing and developing.
I have 24 years experience programming in Borland C++. I have very little Delphi or pascal knowledge. If this is not posted properly right forum ...please excuse me I have not reached out for help much since the days of CompuServe and Tapcis. Ok ... Im using C++ Builder 6 professional for an application that uses a Turbo-Power Async Pro api toolkit written in delphi 5.0. It comes with the delphi source files and package files so you can make changes. The toolkit has about 30 files that make up the ent ire package. I'm adding/working on one of those pascal unit files in the tool kit. ...

Strange behaviour of IDE while reading XML UTF-8 file under C++ Builder 6.0
Dear C++ Builder users, Did anyone face this kind of problem? I've got an XML file with the following header: <?xml version="1.0" encoding="UTF-8"?> but the text is fully ASCII letters (I asked to change encoding, it is impossible). Also I read that if the text is ASCII it could be read using old methods: fopen(), fgets() and we can save result to strings or vector of strings. And it is actually happening seemingly with no errors, but at the midtime strange thing is happening, such as "Floating point overflow" at the place where I'm changin...

Using Xercesc C++ XML parser library with C++ builder 6
hi i am working on a project built in c++ builder 4 that uses Xercesc C++ XML parser v1.5.1, now i am trying to upgrade that to c++ builder 6. I have few queries related to it. 1. whether we can use the v1.5.1 for the c++ builder 6 2. how to build xercesc library 3. whether using the current version of xercesc library will be cause any issues since the project uses v1.5.1 Thanks. ...

C++Builder 6
Is is worth still using C++Builder 6 or go to C++Builder XE2? Hi bert bert odell wrote: > Is is worth still using C++Builder 6 or go to C++Builder XE2? That certainly depends on what You want to do. Could You be a little bit more specific ? Best regards Asger-P http://Asger-P.dk/software Quick Launch is a must try. On 15/04/2012 01:52 PM, bert odell wrote: > Is is worth still using C++Builder 6 or go to C++Builder XE2? ======------ BCB6 cons ======------ 1. If you start a new project at times, the IDE can crash. 2. If you open an existing project and d...

C++ Builder 6 Object inspector : C and S keys have stopped working
Hi I've been using C++ builder 6 for about 3 years now, and suddenly the C and S keys have stopped working in the object inspector. e.g. I'm putting a caption of "Options" onto a menu item, and the 's' never appears. If I type it into the IDE and copy the text, it pasted in OK, This is the same whether or not it's in upper or lower case. I noticed this last year on a PC I was using, but that PC blew up, and I had to build another one. Since then it's been ok up until this morning. Just noticed, it seems to be only in the current project I'm work...

C++Builder 2010 and C++Builder XE2 in the same machine
Is it possible to install C++Builder 2010 and C++Builder XE2 in the same machine? Can they coexist? Hi Richard Richard Weber wrote: > Is it possible to install C++Builder 2010 and C++Builder XE2 in the same > machine? Can they coexist? I don't know about those two, but it is normally not a problem to have different version of C++ Builder on the same machine. It is how ever recommended that they be installed in the order they were released. Best regards Asger-P Richard Weber <> wrote: >Is it possible to install C++Builder 2010 and >C++Builde...

Upgrading Code from C++ Builder 4 to C++ Builder 2007
I am working on project written in C++ Builder 4, it uses TMS Component pack. Now the TMS Component pack has been upgraded so i do not find any compatible version of TMS Component to use with C++ Builder 4. I need to upgrade my code from C++ Builder 4 to C++ Builder 2007. I want to know whether code written in C++ Builder 4 is feasible with C++ Builder 2007. Thanks Arshdeep wrote: > I want to know whether code written in C++ Builder 4 is feasible > with C++ Builder 2007. Feisible, but do take into account that there have been RTL/VCL changes between BCB4 and CB2007, so y...

C++Builder 2010: same old bugs.... goodbye, C++Builder.
I've tried the demo version, built my OCX, set the constrained size, and added some event handler. It works exactly like the old Borland CBuilder 6: the grab handles does not follow the constrained size, the OnCloseQuery and OnDestroy events are not fired, there's is not an OnAmbientChange event available. Building OCX is an important feature for us, as our customer needs them... so, if i were the one that take the final decision, i'll migrate to MS developement tools.... i'm not that one, but i'll strongly push in that direction. It's a shame, anyway. If yo...

C++Builder 2006 stopped working after C++Builder 2009
Is there a way to key both IDEs (2006 & 2009) on the same computer while I complete software migration? Both compilers are installed on a Windows Vista Proffesional. Thanks, Roberto Hello, Roberto Meneghini wrote: > Is there a way to key both IDEs (2006 & 2009) on the same computer > while I complete software migration? yes, it works fine for me. What particular problem are you having? -- Moritz "Hey, it compiles! Ship it!" As soon as I launch the compiler, the following error message is displayed: "Exception EPackageRegistrationEx...

WebSocket for C++ Builder 6
Hi, does someone know where I can find a WebSocket who can run on C++ Builder 6? Hi Eliseu Eliseu Martins Gomes wrote: > Hi, does someone know where I can find a WebSocket who can run on C++ Builder 6? I'm not sure if it covers WebSockets, but most people here use INDY for dealing with the web / net. You can get a pre-built Indy suite for C++Builder 5 through to XE5 here: http://www.mjfreelancing.com/indy.htm Best regards Asger-P http://asger-p.dk/software Asger wrote: > I'm not sure if it covers WebSockets, but most people > here use INDY for d...

Web resources about - C++ builder 6 - embarcadero.cppbuilder.ide

Interface Builder - Wikipedia, the free encyclopedia
This article includes a list of references , related reading or external links , but its sources remain unclear because it lacks inline citations ...

Facebook Page Builder ShortStack Keeps Growing
Facebook page builder ShortStack is becoming more popular. The company announced Wednesday that it grew by more than 100,000 customers in 2012 ...

Super Texas Holdem Poker, Temple Ruin, Tab Builder, Via.Me, more on this week’s emerging Facebook apps ...
... Ruin 659,404 +299,404 + 83% 3. 我的傳奇 780,000 +270,000 + 53% 4. Oroscopo del Giorno v2.0 580,000 +180,000 + 45% 5. Tab Builder: ...

Maxine Builder (@maxine_builder) on Twitter
Log in Sign up You are on Twitter Mobile because you are using an old version of Internet Explorer. Learn more here Maxine Builder @ maxine_builder ...

Business Builders Community
Business Builders is a group for professionals who are business and entrepreneur minded who understand the power and value of networking to grow ...

Pocket Yoga - Practice Builder for iPhone, iPod touch, and iPad on the iTunes App Store
Get Pocket Yoga - Practice Builder on the App Store. See screenshots and ratings, and read customer reviews.

Big farewell for Canberra biker, builder and friend
The roar of engines escorted Gregory McFawn to his final resting place on Monday, a fitting farewell to a man with two great loves: his family ...

Perth engineer’s robot bricklayer: See the Fastbrick Robotics builder in action
THIS is the robot bricklayer that is putting WA on the building map around the world with inquiries from 39 countries already.

Builders of Sydney's new metro line need to straighten out curved platforms
How to straighten curved platforms is one of many challenges confronting builders of Australia's largest public transport project.

Builder of Keystone pipeline slaps administration with lawsuit
TransCanada, the company that was stiffed by the Obama administration when they rejected the Keystone pipeline, is suing the federal government, ...

Resources last updated: 1/22/2016 2:31:42 PM