Sample application

The sample application, p4api.cc, is located in the sample directory. You can build the sample application with either Make or Jam.

/*
* p4api.cc - a p4 client API example
*
* This file is part of the p4api distribution package.
*
* This barebones example simply mimics the regular p4 command line
* program.
*
* Generally, compiling with the C++ compiler and linking with the
* three provided libraries is sufficient to build this sample program.
*
* See the Perforce C/C++ API User's Guide for further information.
* https://www.perforce.com/manuals/p4api/Content/P4API/Home-p4api.html
*
* $Id: //depot/r21.2/p4/api/p4api.cc#1 $
*/

# include "clientapi.h"
# include "p4libs.h"

int main( int argc, char **argv )
{
    ClientUser ui;
    ClientApi client;
    StrBuf msg;
    Error e;
    
    P4Libraries::Initialize( P4LIBRARIES_INIT_ALL, &e );
    
    if( e.Test() )
    { 
        e.Fmt( &msg );
        fprintf( stderr, "%s\n", msg.Text() );
        return 1;
    }

    // Any special protocol mods

    // client.SetProtocol( "tag" );
    
    // Enable client-side Extensions
    // client.EnableExtensions();

    // Connect to server
    
    client.Init( &e );
    
    if( e.Test() )
    {
        e.Fmt( &msg );
        fprintf( stderr, "%s\n", msg.Text() );
        return 1;
    }

    // Run the command "argv[1] argv[2...]"
    client.SetArgv( argc - 2, argv + 2 );  
    client.Run( argv[1], &ui );

    // Close connection

    client.Final( &e );
    if( e.Test() )  
    {
        e.Fmt( &msg );
        fprintf( stderr, "%s\n", msg.Text() );
        return 1;
    }

    P4Libraries::Shutdown( P4LIBRARIES_INIT_ALL, &e );

    if( e.Test() )
    {
        e.Fmt( &msg );
        fprintf( stderr, "%s\n", msg.Text() );
        return 1;
    }

    return 0;
}