#!/usr/bin/perl
#     (c)2003-2011 Broadcom Corporation
#
#  This program is the proprietary software of Broadcom Corporation and/or its licensors,
#  and may only be used, duplicated, modified or distributed pursuant to the terms and
#  conditions of a separate, written license agreement executed between you and Broadcom
#  (an "Authorized License").  Except as set forth in an Authorized License, Broadcom grants
#  no license (express or implied), right to use, or waiver of any kind with respect to the
#  Software, and Broadcom expressly reserves all rights in and to the Software and all
#  intellectual property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU
#  HAVE NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY
#  NOTIFY BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
#
#  Except as expressly set forth in the Authorized License,
#
#  1.     This program, including its structure, sequence and organization, constitutes the valuable trade
#  secrets of Broadcom, and you shall use all reasonable efforts to protect the confidentiality thereof,
#  and to use this information only in connection with your use of Broadcom integrated circuit products.
#
#  2.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
#  AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
#  WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO
#  THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND ALL IMPLIED WARRANTIES
#  OF TITLE, MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE,
#  LACK OF VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION
#  OR CORRESPONDENCE TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF
#  USE OR PERFORMANCE OF THE SOFTWARE.
#
#  3.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR ITS
#  LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL, INDIRECT, OR
#  EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY WAY RELATING TO YOUR
#  USE OF OR INABILITY TO USE THE SOFTWARE EVEN IF BROADCOM HAS BEEN ADVISED OF
#  THE POSSIBILITY OF SUCH DAMAGES; OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT
#  ACTUALLY PAID FOR THE SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE
#  LIMITATIONS SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF
#  ANY LIMITED REMEDY.
#
# $brcm_Workfile: bapi_util.pm $
# $brcm_Revision: 1 $
# $brcm_Date: 12/7/11 10:41a $
#
# File Description:
#
# Revision History:
#
# $brcm_Log: /nexus/build/tools/common/bapi_util.pm $
# 
# 1   12/7/11 10:41a erickson
# SW7420-2141: merge as much duplicated kernelmode proxy/usermode ipc
#  perl code as possible
# 
#############################################################################
use strict;

package bapi_util;

sub print_code
{
    my $file = shift;
    my $code = shift;
    my $ident = shift;

    if(defined $code) {
        for(@$code) {
            print $file "$ident$_\n";
        }
    }
}

sub header
{
    my $module = shift;
    return <<ENDHEADER;
/**************************************************************
 *                                                            *
 * This file is autogenerated by the Nexus Platform makefile. *
 *                                                            *
 **************************************************************/


ENDHEADER
}

# return structure Id, e.g. structure number
sub struct_id {
    my $structs = shift;
    my $struct = shift;
    my $id = 0;
    my $key;

    foreach $key (keys %$structs) {
        $id++;
        if($key eq $struct) {
            return $id;
        }
    }
    return 0;
}

sub func_id {
    my $funcs = shift;
    my $func = shift;
    my $id = 0;
    foreach (@$funcs) {
        $id++;
        if($_ == $func) {
           return $id;
        }
    }
    return 0;
}

sub append_code {
    my $dest = shift;
    my $code = shift;
    my $ident = shift;

    for(@$code) {
        push @$dest, "$ident$_";
    }
}

sub append_if {
    my $dest = shift;
    my $test = shift;
    my $code = shift;

    if(scalar @$code) {
        push @$dest, "if($test) {";
        append_code $dest,$code,"    ";
        push @$dest, "}";
    }
}

sub call
{
    my $function = shift;
    return $function . ' ( ' . (join( ' , ', @_ )) . ' ) ';
}

1;
