Пример #1
0
        public byte[] DecodeArray64(string sInput)
        {
            if (m_bytReverseIndex[47] != 63)
            {
                Initialize64();
            }
            byte[] bytInput          = null;
            byte[] bytWorkspace      = null;
            byte[] bytResult         = null;
            long   lInputCounter     = 0;
            long   lWorkspaceCounter = 0;

            string innerString = Strings.Replace(sInput, Constants.vbCrLf, "");
            string outerString = Strings.Replace(innerString, "=", "");

            bytInput          = UTF8Encoding.UTF8.GetBytes(outerString);
            bytWorkspace      = new byte[(Information.UBound(bytInput) * 2) + 1];
            lWorkspaceCounter = Information.LBound(bytWorkspace);
            for (lInputCounter = Information.LBound(bytInput); lInputCounter <= Information.UBound(bytInput); lInputCounter++)
            {
                bytInput[lInputCounter] = m_bytReverseIndex[bytInput[lInputCounter]];
            }

            for (lInputCounter = Information.LBound(bytInput); lInputCounter <= (Information.UBound(bytInput) - ((Information.UBound(bytInput) % 8) + 8)); lInputCounter += 8)
            {
                bytWorkspace[lWorkspaceCounter]     = (bytInput[lInputCounter] * k_bytShift2) + (bytInput[lInputCounter + 2] / k_bytShift4);
                bytWorkspace[lWorkspaceCounter + 1] = ((bytInput[lInputCounter + 2] & k_bytMask2) * k_bytShift4) + (bytInput[lInputCounter + 4] / k_bytShift2);
                bytWorkspace[lWorkspaceCounter + 2] = ((bytInput[lInputCounter + 4] & k_bytMask1) * k_bytShift6) + bytInput[lInputCounter + 6];
                lWorkspaceCounter = lWorkspaceCounter + 3;
            }

            switch ((Information.UBound(bytInput) % 8))
            {
            case 3:
                bytWorkspace[lWorkspaceCounter] = (bytInput[lInputCounter] * k_bytShift2) + (bytInput[lInputCounter + 2] / k_bytShift4);
                break;

            case 5:
                bytWorkspace[lWorkspaceCounter]     = (bytInput[lInputCounter] * k_bytShift2) + (bytInput[lInputCounter + 2] / k_bytShift4);
                bytWorkspace[lWorkspaceCounter + 1] = ((bytInput[lInputCounter + 2] & k_bytMask2) * k_bytShift4) + (bytInput[lInputCounter + 4] / k_bytShift2);
                lWorkspaceCounter = lWorkspaceCounter + 1;
                break;

            case 7:
                bytWorkspace[lWorkspaceCounter]     = (bytInput[lInputCounter] * k_bytShift2) + (bytInput[lInputCounter + 2] / k_bytShift4);
                bytWorkspace[lWorkspaceCounter + 1] = ((bytInput[lInputCounter + 2] & k_bytMask2) * k_bytShift4) + (bytInput[lInputCounter + 4] / k_bytShift2);
                bytWorkspace[lWorkspaceCounter + 2] = ((bytInput[lInputCounter + 4] & k_bytMask1) * k_bytShift6) + bytInput[lInputCounter + 6];
                lWorkspaceCounter = lWorkspaceCounter + 2;
                break;
            }

            bytResult = new byte[lWorkspaceCounter + 1];
            if (Information.LBound(bytWorkspace) == 0)
            {
                lWorkspaceCounter = lWorkspaceCounter + 1;
            }
            CopyMemory(VarPtr.VarPtr(bytResult[Information.LBound(bytResult)]), VarPtr.VarPtr(bytWorkspace[Information.LBound(bytWorkspace)]), lWorkspaceCounter);
            return(bytResult);
        }
Пример #2
0
//Return the address of the low bound of the passed table array
        private static int Subclass_AddrMsgTbl(ref int[] aMsgTbl)
        {
            int functionReturnValue = 0;

            // ERROR: Not supported in C#: OnErrorStatement

            //The table may not be dimensioned yet so we need protection
            //UPGRADE_ISSUE: VarPtr function is not supported. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="367764E5-F3F8-4E43-AC3E-7FE0B5E074E2"'
            functionReturnValue = VarPtr.VarPtr(aMsgTbl[1]);
            //Get the address of the first element of the passed message table
            // ERROR: Not supported in C#: OnErrorStatement

            return(functionReturnValue);
            //Switch off error protection
        }
Пример #3
0
 private static string TrimNull(ref string startstr)
 {
     //UPGRADE_ISSUE: VarPtr.VarPtr function is not supported. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="367764E5-F3F8-4E43-AC3E-7FE0B5E074E2"'
     return(Strings.Left(startstr, lstrlen(VarPtr.VarPtr(startstr))));
 }
Пример #4
0
 private static bool MatchSpec(ref string sFile, ref string sSpec)
 {
     //UPGRADE_ISSUE: VarPtr.VarPtr function is not supported. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="367764E5-F3F8-4E43-AC3E-7FE0B5E074E2"'
     return(PathMatchSpec(VarPtr.VarPtr(sFile), VarPtr.VarPtr(sSpec)));
 }
Пример #5
0
        public string EncodeArray64(ref byte[] bytInput)
        {
            string functionReturnValue = null;

            // ERROR: Not supported in C#: OnErrorStatement


            if (m_bytReverseIndex[47] != 63)
            {
                Initialize64();
            }
            byte[] bytWorkspace      = null;
            byte[] bytResult         = null;
            byte[] bytCrLf           = new byte[4];
            long   lCounter          = 0;
            long   lWorkspaceCounter = 0;
            long   lLineCounter      = 0;
            long   lCompleteLines    = 0;
            long   lBytesRemaining   = 0;
            long   lpWorkSpace       = 0;
            long   lpResult          = 0;
            long   lpCrLf            = 0;

            if (Information.UBound(bytInput) < 1024)
            {
                bytWorkspace = new byte[(Information.LBound(bytInput) + 4096) + 1];
            }
            else
            {
                bytWorkspace = new byte[(Information.UBound(bytInput) * 4) + 1];
            }

            lWorkspaceCounter = Information.LBound(bytWorkspace);

            for (lCounter = Information.LBound(bytInput); lCounter <= (Information.UBound(bytInput) - ((Information.UBound(bytInput) % 3) + 3)); lCounter += 3)
            {
                bytWorkspace[lWorkspaceCounter]     = m_bytIndex[(bytInput[lCounter] / k_bytShift2)];
                bytWorkspace[lWorkspaceCounter + 2] = m_bytIndex[((bytInput[lCounter] & k_bytMask1) * k_bytShift4) + ((bytInput[lCounter + 1]) / k_bytShift4)];
                bytWorkspace[lWorkspaceCounter + 4] = m_bytIndex[((bytInput[lCounter + 1] & k_bytMask2) * k_bytShift2) + (bytInput[lCounter + 2] / k_bytShift6)];
                bytWorkspace[lWorkspaceCounter + 6] = m_bytIndex[bytInput[lCounter + 2] & k_bytMask3];
                lWorkspaceCounter = lWorkspaceCounter + 8;
            }

            switch ((Information.UBound(bytInput) % 3))
            {
            case 0:
                bytWorkspace[lWorkspaceCounter]     = m_bytIndex[(bytInput[lCounter] / k_bytShift2)];
                bytWorkspace[lWorkspaceCounter + 2] = m_bytIndex[(bytInput[lCounter] & k_bytMask1) * k_bytShift4];
                bytWorkspace[lWorkspaceCounter + 4] = k_bytEqualSign;
                bytWorkspace[lWorkspaceCounter + 6] = k_bytEqualSign;
                break;

            case 1:
                bytWorkspace[lWorkspaceCounter]     = m_bytIndex[(bytInput[lCounter] / k_bytShift2)];
                bytWorkspace[lWorkspaceCounter + 2] = m_bytIndex[((bytInput[lCounter] & k_bytMask1) * k_bytShift4) + ((bytInput[lCounter + 1]) / k_bytShift4)];
                bytWorkspace[lWorkspaceCounter + 4] = m_bytIndex[(bytInput[lCounter + 1] & k_bytMask2) * k_bytShift2];
                bytWorkspace[lWorkspaceCounter + 6] = k_bytEqualSign;
                break;

            case 2:
                bytWorkspace[lWorkspaceCounter]     = m_bytIndex[(bytInput[lCounter] / k_bytShift2)];
                bytWorkspace[lWorkspaceCounter + 2] = m_bytIndex[((bytInput[lCounter] & k_bytMask1) * k_bytShift4) + ((bytInput[lCounter + 1]) / k_bytShift4)];
                bytWorkspace[lWorkspaceCounter + 4] = m_bytIndex[((bytInput[lCounter + 1] & k_bytMask2) * k_bytShift2) + ((bytInput[lCounter + 2]) / k_bytShift6)];
                bytWorkspace[lWorkspaceCounter + 6] = m_bytIndex[bytInput[lCounter + 2] & k_bytMask3];
                break;
            }

            lWorkspaceCounter = lWorkspaceCounter + 8;

            if (lWorkspaceCounter <= k_lMaxBytesPerLine)
            {
                functionReturnValue = Strings.Left(bytWorkspace.ToString(), Strings.InStr(1, bytWorkspace.ToString(), "") - 1);
            }
            else
            {
                bytCrLf[0]     = 13;
                bytCrLf[1]     = 0;
                bytCrLf[2]     = 10;
                bytCrLf[3]     = 0;
                bytResult      = new byte[Information.UBound(bytWorkspace) + 1];
                lpWorkSpace    = VarPtr.VarPtr(bytWorkspace[Information.LBound(bytWorkspace)]);
                lpResult       = VarPtr.VarPtr(bytResult[Information.LBound(bytResult)]);
                lpCrLf         = VarPtr.VarPtr(bytCrLf[Information.LBound(bytCrLf)]);
                lCompleteLines = Conversion.Fix(lWorkspaceCounter / k_lMaxBytesPerLine);

                for (lLineCounter = 0; lLineCounter <= lCompleteLines; lLineCounter++)
                {
                    CopyMemory(lpResult, lpWorkSpace, k_lMaxBytesPerLine);
                    lpWorkSpace = lpWorkSpace + k_lMaxBytesPerLine;
                    lpResult    = lpResult + k_lMaxBytesPerLine;
                    CopyMemory(lpResult, lpCrLf, 4L);
                    lpResult = lpResult + 4L;
                }

                lBytesRemaining = lWorkspaceCounter - (lCompleteLines * k_lMaxBytesPerLine);
                if (lBytesRemaining > 0)
                {
                    CopyMemory(lpResult, lpWorkSpace, lBytesRemaining);
                }
                functionReturnValue = Strings.Left(bytResult.ToString(), Strings.InStr(1, bytResult.ToString(), "") - 1);
            }
            return(functionReturnValue);

ErrorHandler:

            bytResult           = null;
            functionReturnValue = bytResult.ToString();
            return(functionReturnValue);
        }