/+---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Freeright (C) Microsoft Corporation, 1992 - 1995.
//
//  File:       ndsufree.cxx
//
//  Contents:
//
//  Functions:
//
//                FreeABC1ToNDSSynId1
//                FreeABC2ToNDSSynId2
//                FreeABC3ToNDSSynId3
//                FreeABC4ToNDSSynId4
//                FreeABC5ToNDSSynId5
//                FreeABC6ToNDSSynId6
//                FreeABC7ToNDSSynId7
//                FreeABC8ToNDSSynId8
//                FreeABC9ToNDSSynId9
//                FreeABC10ToNDSSynId10
//                FreeABC11ToNDSSynId11
//                FreeABC12ToNDSSynId12
//                FreeABC13ToNDSSynId13
//                FreeABC14ToNDSSynId14
//                FreeABC15ToNDSSynId15
//                FreeABC16ToNDSSynId16
//                FreeABC17ToNDSSynId17
//                FreeABC18ToNDSSynId18
//                FreeABC19ToNDSSynId19
//                FreeABC20ToNDSSynId20
//                FreeABC21ToNDSSynId21
//                FreeABC22ToNDSSynId22
//                FreeABC23ToNDSSynId23
//                FreeABC24ToNDSSynId24
//                FreeABC25ToNDSSynId25
//                FreeABC26ToNDSSynId26
//                FreeABC27ToNDSSynId27
//
//  History:      15-Jul-97   FelixW   Created.
//
//----------------------------------------------------------------------------
#include "nds.hxx"


LPBYTE
FreeNDSSynId1ToNDS1(
    LPBYTE lpByte
    )
{
    LPASN1_TYPE_1 lpASN1_1 = (LPASN1_TYPE_1) lpByte;

    if (lpASN1_1->DNString) {
        FreeADsStr(lpASN1_1->DNString);
    }

    lpByte = (LPBYTE ) lpASN1_1 + sizeof(ASN1_TYPE_1);

    return(lpByte);

}

LPBYTE
FreeNDSSynId2ToNDS2(
    LPBYTE lpByte
    )
{
    LPASN1_TYPE_2 lpASN1_2 = (LPASN1_TYPE_2) lpByte;

    if (lpASN1_2->CaseExactString) {
        FreeADsStr(lpASN1_2->CaseExactString);
    }

    lpByte = (LPBYTE ) lpASN1_2 + sizeof(ASN1_TYPE_2);

    return(lpByte);
}



LPBYTE
FreeNDSSynId3ToNDS3(
    LPBYTE lpByte
    )
{
    LPASN1_TYPE_3 lpASN1_3 = (LPASN1_TYPE_3) lpByte;

    if (lpASN1_3->CaseIgnoreString) {
        FreeADsStr(lpASN1_3->CaseIgnoreString);
    }

    lpByte = (LPBYTE ) lpASN1_3 + sizeof(ASN1_TYPE_3);

    return(lpByte);
}

LPBYTE
FreeNDSSynId4ToNDS4(
    LPBYTE lpByte
    )
{
    LPASN1_TYPE_4 lpASN1_4 = (LPASN1_TYPE_4) lpByte;

    if (lpASN1_4->PrintableString) {
        FreeADsStr(lpASN1_4->PrintableString);
    }

    lpByte = (LPBYTE ) lpASN1_4 + sizeof(ASN1_TYPE_4);

    return(lpByte);

}


LPBYTE
FreeNDSSynId5ToNDS5(
    LPBYTE lpByte
    )
{
    LPASN1_TYPE_5 lpASN1_5 = (LPASN1_TYPE_5) lpByte;

    if (lpASN1_5->NumericString) {
        FreeADsStr(lpASN1_5->NumericString);
    }

    lpByte = (LPBYTE ) lpASN1_5 + sizeof(ASN1_TYPE_5);

    return(lpByte);
}

LPBYTE
FreeNDSSynId6ToNDS6(
    LPBYTE lpByte
    )
{
    LPASN1_TYPE_6 lpASN1_6 = (LPASN1_TYPE_6) lpByte;

    if (lpASN1_6->String) {
        FreeADsStr(lpASN1_6->String);
    }


    while (lpASN1_6->Next)
    {

        if (lpASN1_6->String) {
            FreeADsStr(lpASN1_6->String);
        }
        lpASN1_6 = (LPASN1_TYPE_6)lpASN1_6->Next;

    }

    lpByte = (LPBYTE ) lpASN1_6 + sizeof(ASN1_TYPE_6);

    return(lpByte);
}


LPBYTE
FreeNDSSynId7ToNDS7(
    LPBYTE lpByte
    )
{
    LPASN1_TYPE_8 lpASN1_8 = (LPASN1_TYPE_8) lpByte;
    lpByte = (LPBYTE ) lpASN1_8 + sizeof(ASN1_TYPE_8);

    return(lpByte);
}


LPBYTE
FreeNDSSynId8ToNDS8(
    LPBYTE lpByte
    )

{
    LPASN1_TYPE_8 lpASN1_8 = (LPASN1_TYPE_8) lpByte;
    lpByte = (LPBYTE ) lpASN1_8 + sizeof(ASN1_TYPE_8);

    return(lpByte);
}


LPBYTE
FreeNDSSynId9ToNDS9(
    LPBYTE lpByte
    )
{
    LPASN1_TYPE_9 lpASN1_9 = (LPASN1_TYPE_9) lpByte;

    if (lpASN1_9->OctetString) {
        FreeADsMem((LPBYTE)lpASN1_9->OctetString);
    }

    lpByte = (LPBYTE ) lpASN1_9 + sizeof(ASN1_TYPE_9);

    return(lpByte);
}

LPBYTE
FreeNDSSynId10ToNDS10(
    LPBYTE lpByte
    )
{
    LPASN1_TYPE_10 lpASN1_10 = (LPASN1_TYPE_10) lpByte;

    if (lpASN1_10->TelephoneNumber) {
        FreeADsStr(lpASN1_10->TelephoneNumber);
    }

    lpByte = (LPBYTE ) lpASN1_10 + sizeof(ASN1_TYPE_10);

    return(lpByte);
}

LPBYTE
FreeNDSSynId11ToNDS11(
    LPBYTE lpByte
    )
{
    LPASN1_TYPE_11 lpASN1_11 = (LPASN1_TYPE_11) lpByte;

    if (lpASN1_11->TelephoneNumber) {
        FreeADsStr(lpASN1_11->TelephoneNumber);
    }

    lpByte = (LPBYTE ) lpASN1_11 + sizeof(ASN1_TYPE_11);

    return(lpByte);
}

LPBYTE
FreeNDSSynId12ToNDS12(
    LPBYTE lpByte
    )
{
    LPASN1_TYPE_12 lpASN1_12 = (LPASN1_TYPE_12) lpByte;

    if (lpASN1_12->Address) {
        FreeADsMem((LPBYTE)lpASN1_12->Address);
    }

    lpByte = (LPBYTE ) lpASN1_12 + sizeof(ASN1_TYPE_12);

    return(lpByte);
}

LPBYTE
FreeNDSSynId13ToNDS13(
    LPBYTE lpByte
    )
{

    //
    // BugBug: KrishnaG not supported!
    //
    return(lpByte);
}


LPBYTE
FreeNDSSynId14ToNDS14(
    LPBYTE lpByte
    )
{
    LPASN1_TYPE_14 lpASN1_14 = (LPASN1_TYPE_14) lpByte;

    if (lpASN1_14->Address) {
        FreeADsStr(lpASN1_14->Address);
    }

    lpByte = (LPBYTE ) lpASN1_14 + sizeof(ASN1_TYPE_14);

    return(lpByte);
}


LPBYTE
FreeNDSSynId15ToNDS15(
    LPBYTE lpByte
    )
{
    LPASN1_TYPE_15 lpASN1_15 = (LPASN1_TYPE_15) lpByte;

    if (lpASN1_15->VolumeName) {
        FreeADsStr(lpASN1_15->VolumeName);
    }

    if (lpASN1_15->Path) {
        FreeADsStr(lpASN1_15->Path);
    }

    lpByte = (LPBYTE ) lpASN1_15 + sizeof(ASN1_TYPE_15);

    return(lpByte);
}

LPBYTE
FreeNDSSynId16ToNDS16(
    LPBYTE lpByte
    )
{

    //
    // BugBug: KrishnaG not supported!
    //

    return(lpByte);
}


LPBYTE
FreeNDSSynId17ToNDS17(
    LPBYTE lpByte
    )
{
    LPASN1_TYPE_17 lpASN1_17 = (LPASN1_TYPE_17) lpByte;


    if (lpASN1_17->ProtectedAttrName) {
        FreeADsStr(lpASN1_17->ProtectedAttrName);
    }

    if (lpASN1_17->SubjectName) {
        FreeADsStr(lpASN1_17->SubjectName);
    }

    lpByte = (LPBYTE ) lpASN1_17 + sizeof(ASN1_TYPE_17);

    return(lpByte);
}


LPBYTE
FreeNDSSynId18ToNDS18(
    LPBYTE lpByte
    )
{
    LPASN1_TYPE_18 lpASN1_18 = (LPASN1_TYPE_18) lpByte;


    if (lpASN1_18->PostalAddress[0]) {
        FreeADsStr(lpASN1_18->PostalAddress[0]);
    }
    if (lpASN1_18->PostalAddress[1]) {
        FreeADsStr(lpASN1_18->PostalAddress[1]);
    }
    if (lpASN1_18->PostalAddress[2]) {
        FreeADsStr(lpASN1_18->PostalAddress[2]);
    }
    if (lpASN1_18->PostalAddress[3]) {
        FreeADsStr(lpASN1_18->PostalAddress[3]);
    }
    if (lpASN1_18->PostalAddress[4]) {
        FreeADsStr(lpASN1_18->PostalAddress[4]);
    }
    if (lpASN1_18->PostalAddress[5]) {
        FreeADsStr(lpASN1_18->PostalAddress[5]);
    }


    lpByte = (LPBYTE ) lpASN1_18 + sizeof(ASN1_TYPE_18);


    return(lpByte);
}

LPBYTE
FreeNDSSynId19ToNDS19(
    LPBYTE lpByte
    )
{

    //
    // BugBug: KrishnaG not supported!
    //
    return(lpByte);

    LPASN1_TYPE_19 lpASN1_19 = (LPASN1_TYPE_19) lpByte;

    lpByte = (LPBYTE ) lpASN1_19 + sizeof(ASN1_TYPE_19);

    return(lpByte);
}

LPBYTE
FreeNDSSynId20ToNDS20(
    LPBYTE lpByte
    )
{
    LPASN1_TYPE_20 lpASN1_20 = (LPASN1_TYPE_20) lpByte;

    if (lpASN1_20->ClassName) {
        FreeADsStr(lpASN1_20->ClassName);
    }

    lpByte = (LPBYTE ) lpASN1_20 + sizeof(ASN1_TYPE_20);

    return(lpByte);
}


LPBYTE
FreeNDSSynId21ToNDS21(
    LPBYTE lpByte
    )
{
    LPASN1_TYPE_21 lpASN1_21 = (LPASN1_TYPE_21) lpByte;

    //
    // The Length value is supposedly always zero!!
    //

    lpByte = (LPBYTE ) lpASN1_21 + sizeof(ASN1_TYPE_21);

    return(lpByte);

}



LPBYTE
FreeNDSSynId22ToNDS22(
    LPBYTE lpByte
    )
{
    LPASN1_TYPE_22 lpASN1_22 = (LPASN1_TYPE_22) lpByte;

    lpByte = (LPBYTE ) lpASN1_22 + sizeof(ASN1_TYPE_22);

    return(lpByte);
}

LPBYTE
FreeNDSSynId23ToNDS23(
    LPBYTE lpByte
    )
{
    LPASN1_TYPE_23 lpASN1_23 = (LPASN1_TYPE_23) lpByte;

    if (lpASN1_23->ObjectName) {
        FreeADsStr(lpASN1_23->ObjectName);
    }

    lpByte = (LPBYTE ) lpASN1_23 + sizeof(ASN1_TYPE_23);

    return(lpByte);
}

LPBYTE
FreeNDSSynId24ToNDS24(
    LPBYTE lpByte

    )
{
    LPASN1_TYPE_24 lpASN1_24 = (LPASN1_TYPE_24) lpByte;

    lpByte = (LPBYTE ) lpASN1_24 + sizeof(ASN1_TYPE_24);

    return(lpByte);
}



LPBYTE
FreeNDSSynId25ToNDS25(
    LPBYTE lpByte
    )

{
    LPASN1_TYPE_25 lpASN1_25 = (LPASN1_TYPE_25) lpByte;

    if (lpASN1_25->ObjectName) {
        FreeADsStr(lpASN1_25->ObjectName);
    }

    lpByte = (LPBYTE ) lpASN1_25 + sizeof(ASN1_TYPE_25);

    return(lpByte);
}


LPBYTE
FreeNDSSynId26ToNDS26(
    LPBYTE lpByte
    )
{
    LPASN1_TYPE_26 lpASN1_26 = (LPASN1_TYPE_26) lpByte;


    if (lpASN1_26->ObjectName) {
        FreeADsStr(lpASN1_26->ObjectName);
    }

    lpByte = (LPBYTE ) lpASN1_26 + sizeof(ASN1_TYPE_26);

    return(lpByte);
}


LPBYTE
FreeNDSSynId27ToNDS27(
    LPBYTE lpByte
    )
{
    LPASN1_TYPE_27 lpASN1_27 = (LPASN1_TYPE_27) lpByte;

    lpByte = (LPBYTE ) lpASN1_27 + sizeof(ASN1_TYPE_27);

    return(lpByte);
}


LPBYTE
FreeNDSSynIdToNDS(
    DWORD dwSyntaxId,
    LPBYTE lpByte
    )
{
    switch (dwSyntaxId) {
    case 1:
        lpByte = FreeNDSSynId1ToNDS1(
                        lpByte
                         );
        break;

    case 2:
        lpByte = FreeNDSSynId2ToNDS2(
                        lpByte
                         );
        break;

    case 3:
        lpByte = FreeNDSSynId3ToNDS3(
                        lpByte
                         );
        break;

    case 4:
        lpByte = FreeNDSSynId4ToNDS4(
                        lpByte
                         );
        break;

    case 5:
        lpByte = FreeNDSSynId5ToNDS5(
                        lpByte
                         );
        break;

    case 6:
        lpByte = FreeNDSSynId6ToNDS6(
                        lpByte
                         );
        break;

    case 7:
        lpByte = FreeNDSSynId7ToNDS7(
                        lpByte
                         );
        break;

    case 8:
        lpByte = FreeNDSSynId8ToNDS8(
                        lpByte
                         );
        break;


    case 9:
        lpByte = FreeNDSSynId9ToNDS9(
                        lpByte
                         );
        break;

    case 10:
        lpByte = FreeNDSSynId10ToNDS10(
                        lpByte
                         );
        break;

    case 11:
        lpByte = FreeNDSSynId11ToNDS11(
                        lpByte
                         );
        break;

    case 12:
        lpByte = FreeNDSSynId12ToNDS12(
                        lpByte
                         );
        break;

    case 13:
        lpByte = FreeNDSSynId13ToNDS13(
                        lpByte
                         );
        break;

    case 14:
        lpByte = FreeNDSSynId14ToNDS14(
                        lpByte
                         );
        break;

    case 15:
        lpByte = FreeNDSSynId15ToNDS15(
                        lpByte
                         );
        break;

    case 16:
        lpByte = FreeNDSSynId16ToNDS16(
                        lpByte
                         );
        break;


    case 17:
        lpByte = FreeNDSSynId17ToNDS17(
                        lpByte
                         );
        break;

    case 18:
        lpByte = FreeNDSSynId18ToNDS18(
                        lpByte
                         );
        break;

    case 19:
        lpByte = FreeNDSSynId19ToNDS19(
                        lpByte
                         );
        break;

    case 20:
        lpByte = FreeNDSSynId20ToNDS20(
                        lpByte
                         );
        break;


    case 21:
        lpByte = FreeNDSSynId21ToNDS21(
                        lpByte
                         );
        break;

    case 22:
        lpByte = FreeNDSSynId22ToNDS22(
                        lpByte
                         );
        break;

    case 23:
        lpByte = FreeNDSSynId23ToNDS23(
                        lpByte
                         );
        break;

    case 24:
        lpByte = FreeNDSSynId24ToNDS24(
                        lpByte
                         );
        break;

    case 25:
        lpByte = FreeNDSSynId25ToNDS25(
                        lpByte
                         );
        break;

    case 26:
        lpByte = FreeNDSSynId26ToNDS26(
                        lpByte
                         );
        break;

    case 27:
        lpByte = FreeNDSSynId27ToNDS27(
                        lpByte
                         );
        break;


    default:
        break;

    }

    return(lpByte);
}


HRESULT
FreeMarshallMemory(
    DWORD dwSyntaxId,
    DWORD dwNumValues,
    LPBYTE lpValue
    )
{

    DWORD  i = 0;


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

        lpValue = FreeNDSSynIdToNDS(
                         dwSyntaxId,
                         lpValue
                         );

    }

    RRETURN(S_OK);
}
