Ejemplo n.º 1
0
 public override void GetVariableValue(MHUnion value, MHEngine engine)
 {
     value.Type = MHUnion.U_ObjRef;
     value.ObjRef.Copy(m_Value);
 }
Ejemplo n.º 2
0
        public virtual void WhoAmI(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
        {
            // Return a concatenation of the strings we respond to in
            // GetEngineSupport(UKEngineProfile(X))

            if (args.Size == 1)
            {
                MHOctetString result = new MHOctetString();
                result.Copy(MHEngine.MHEGEngineProviderIdString);
                result.Append(" ");
                result.Append(engine.GetContext().GetReceiverId());
                result.Append(" ");
                result.Append(engine.GetContext().GetDSMCCId());
                engine.FindObject((args.GetAt(0).GetReference())).SetVariableValue(new MHUnion(result));
                SetSuccessFlag(success, true, engine);
            }
            else
            {
                SetSuccessFlag(success, false, engine);
            }
        }
Ejemplo n.º 3
0
 public override void CallAction(MHEngine engine, MHRoot pTarget, MHRoot pArg)
 {
     pTarget.GetLineColour(pArg);
 }
Ejemplo n.º 4
0
 public virtual void SetWidescreenAlignment(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
 {
     // Sets either LetterBox or Centre-cut-out mode.
     // Seems to be concerned with aligning a 4:3 scene with an underlying 16:9 video
     Logging.Assert(false);
 }
Ejemplo n.º 5
0
 public virtual void CI_SendMessage(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
 {
     // Sends a message to a DVB CI application
     Logging.Assert(false);
 }
Ejemplo n.º 6
0
 public virtual void GetBootInfo(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
 {
     // Gets the NB_info field.
     Logging.Assert(false);
 }
Ejemplo n.º 7
0
 public virtual void CheckGroupIDRef(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
 {
     // Sees if an application or scene with a particular group id
     // is available in the carousel.
     Logging.Assert(false);
 }
Ejemplo n.º 8
0
 public virtual void CastToContentRef(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
 {
     // Converts a string to a ContentRef.
     if (args.Size == 2)
     {
         MHOctetString str = new MHOctetString();
         GetString(args.GetAt(0), str, engine);
         MHContentRef result = new MHContentRef();
         result.ContentRef.Copy(str);
         engine.FindObject(args.GetAt(1).GetReference()).SetVariableValue(new MHUnion(result));
         SetSuccessFlag(success, true, engine);
     }
     else
     {
         SetSuccessFlag(success, false, engine);
     }
 }
Ejemplo n.º 9
0
 public virtual void CastToObjectRef(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
 {
     // Converts a string and an integer to an ObjectRef.
     if (args.Size == 3)
     {
         MHObjectRef result = new MHObjectRef();
         GetString(args.GetAt(0), result.GroupId, engine);
         result.ObjectNo = GetInt(args.GetAt(1), engine);
         engine.FindObject(args.GetAt(2).GetReference()).SetVariableValue(new MHUnion(result));
         SetSuccessFlag(success, true, engine);
     }
     else
     {
         SetSuccessFlag(success, false, engine);
     }
 }
Ejemplo n.º 10
0
        public virtual void GetDayOfWeek(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
        {
            if (args.Size == 2)
            {
                int      date       = GetInt(args.GetAt(0), engine); // Date as produced in GCD
                DateTime dt         = new DateTime(1858, 11, 17);
                int      nDayOfWeek = (int)dt.AddDays(date).DayOfWeek;

                engine.FindObject(args.GetAt(1).GetReference()).SetVariableValue(new MHUnion(nDayOfWeek));
                SetSuccessFlag(success, true, engine);
            }
            else
            {
                SetSuccessFlag(success, false, engine);
            }
        }
Ejemplo n.º 11
0
 public virtual void Random(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
 {
     if (args.Size == 2)
     {
         int         nLimit          = GetInt(args.GetAt(0), engine);
         MHParameter pResInt         = args.GetAt(1);
         Random      randomGenerator = new Random();
         engine.FindObject((pResInt.GetReference())).SetVariableValue(new MHUnion(randomGenerator.Next(nLimit) + 1));
         SetSuccessFlag(success, true, engine);
     }
     else
     {
         SetSuccessFlag(success, false, engine);
     }
 }
Ejemplo n.º 12
0
        public virtual void FormatDate(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
        {
            if (args.Size == 4)
            {
                // This is a bit like strftime but not quite.
                MHOctetString format = new MHOctetString();
                GetString(args.GetAt(0), format, engine);
                int date = GetInt(args.GetAt(1), engine); // As produced in GCD
                int time = GetInt(args.GetAt(2), engine);

                string result = "";

                DateTime dt = new DateTime(1858, 11, 17);
                dt = dt.AddDays(date).AddSeconds(time);

                for (int i = 0; i < format.Size; i++)
                {
                    char   ch = format.GetAt(i);
                    string part; // Largest text is 4 chars for a year + null terminator
                    if (ch == '%')
                    {
                        i++;
                        if (i == format.Size)
                        {
                            break;
                        }
                        ch = format.GetAt(i);
                        switch (ch)
                        {
                        case 'Y': part = dt.ToString("yyyy"); break;

                        case 'y': part = dt.ToString("yy"); break;

                        case 'X': part = dt.ToString("MM"); break;

                        case 'x': part = dt.ToString("%M"); break;

                        case 'D': part = dt.ToString("dd"); break;

                        case 'd': part = dt.ToString("%d"); break;

                        case 'H': part = dt.ToString("HH"); break;

                        case 'h': part = dt.ToString("%H"); break;

                        case 'I': part = dt.ToString("hh"); break;

                        case 'i': part = dt.ToString("%h"); break;

                        case 'M': part = dt.ToString("mm"); break;

                        case 'm': part = dt.ToString("%m"); break;

                        case 'S': part = dt.ToString("ss"); break;

                        case 's': part = dt.ToString("%s"); break;

                        // TODO: These really should be localised.
                        case 'A': part = dt.ToString("tt"); break;

                        case 'a': part = dt.ToString("tt").ToLower(); break;

                        default: part = ""; break;
                        }
                        result += part;
                    }
                    else
                    {
                        result += ch;
                    }
                }
                MHOctetString theResult  = new MHOctetString(result);
                MHParameter   pResString = args.GetAt(3);
                engine.FindObject(pResString.GetReference()).SetVariableValue(new MHUnion(theResult));
                SetSuccessFlag(success, true, engine);
            }
            else
            {
                SetSuccessFlag(success, false, engine);
            }
        }
Ejemplo n.º 13
0
        public virtual void GetCurrentDate(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
        {
            if (args.Size == 2)
            {
                DateTime dt             = new DateTime(1858, 11, 17);
                DateTime now            = DateTime.Now;
                int      nModJulianDate = now.Subtract(dt).Days;

                int nTimeAsSecs = (int)now.TimeOfDay.TotalSeconds;

                engine.FindObject(args.GetAt(0).GetReference()).SetVariableValue(new MHUnion(nModJulianDate));
                engine.FindObject(args.GetAt(1).GetReference()).SetVariableValue(new MHUnion(nTimeAsSecs));
                SetSuccessFlag(success, true, engine);
            }
            else
            {
                SetSuccessFlag(success, false, engine);
            }
        }
Ejemplo n.º 14
0
 public override void Perform(MHEngine engine)
 {
     Target(engine).GetListItem(m_Index.GetValue(engine), m_Result, engine);
 }
Ejemplo n.º 15
0
 public virtual void SI_TuneIndexInfo(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
 {
     // Indicates whether to perform a subsequent TIn quietly or normally.
     Logging.Assert(false);
 }
Ejemplo n.º 16
0
 public virtual void GetStringLength(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
 {
     if (args.Size == 2)
     {
         // Find a substring within a string and return an index to the position.
         MHOctetString str = new MHOctetString();
         GetString(args.GetAt(0), str, engine);
         MHParameter pResInt = args.GetAt(1);
         SetSuccessFlag(success, true, engine);
         engine.FindObject(pResInt.GetReference()).SetVariableValue(new MHUnion(str.Size));
     }
     else
     {
         SetSuccessFlag(success, false, engine);
     }
 }
Ejemplo n.º 17
0
 public virtual void SI_GetBasicSI(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
 {
     // Returns basic SI information about the service indicated by an index
     // returned by GSI.
     // Returns networkID, origNetworkID, transportStreamID, serviceID
     Logging.Assert(false);
 }
Ejemplo n.º 18
0
 public virtual void GetSubString(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
 {
     if (args.Size == 4)
     {
         // Extract a sub-string from a string.
         MHOctetString str = new MHOctetString();
         GetString(args.GetAt(0), str, engine);
         int nBeginExtract = GetInt(args.GetAt(1), engine);
         int nEndExtract   = GetInt(args.GetAt(2), engine);
         if (nBeginExtract < 1)
         {
             nBeginExtract = 1;
         }
         if (nBeginExtract > str.Size)
         {
             nBeginExtract = str.Size;
         }
         if (nEndExtract < 1)
         {
             nEndExtract = 1;
         }
         if (nEndExtract > str.Size)
         {
             nEndExtract = str.Size;
         }
         MHParameter pResString = args.GetAt(3);
         // Returns beginExtract to endExtract inclusive.
         engine.FindObject(pResString.GetReference()).SetVariableValue(
             new MHUnion(new MHOctetString(str, nBeginExtract - 1, nEndExtract - nBeginExtract + 1)));
         SetSuccessFlag(success, true, engine);
     }
     else
     {
         SetSuccessFlag(success, false, engine);
     }
 }
Ejemplo n.º 19
0
 public virtual void CheckContentRef(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
 {
     // Sees if an item with a particular content reference is available
     // in the carousel.
     Logging.Assert(false);
 }
Ejemplo n.º 20
0
 public virtual void SearchSubString(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
 {
     if (args.Size == 4)
     {
         // Find a substring within a string and return an index to the position.
         MHOctetString str          = new MHOctetString();
         MHOctetString searchString = new MHOctetString();
         GetString(args.GetAt(0), str, engine);
         int nStart = GetInt(args.GetAt(1), engine);
         if (nStart < 1)
         {
             nStart = 1;
         }
         GetString(args.GetAt(2), searchString, engine);
         // Strings are indexed from one.
         int nPos;
         for (nPos = nStart - 1; nPos <= str.Size - searchString.Size; nPos++)
         {
             int i;
             for (i = 0; i < searchString.Size; i++)
             {
                 if (searchString.GetAt(i) != str.GetAt(i + nPos))
                 {
                     break;
                 }
             }
             if (i == searchString.Size)
             {
                 break;                         // Found a match.
             }
         }
         // Set the result.
         MHParameter pResInt = args.GetAt(3);
         SetSuccessFlag(success, true, engine); // Set this first.
         if (nPos <= str.Size - searchString.Size)
         {                                      // Found
             // Set the index to the position of the string, counting from 1.
             engine.FindObject(pResInt.GetReference()).SetVariableValue(new MHUnion(nPos + 1));
         }
         else
         { // Not found.  Set the result index to -1
             engine.FindObject(pResInt.GetReference()).SetVariableValue(new MHUnion(-1));
         }
     }
     else
     {
         SetSuccessFlag(success, false, engine);
     }
 }
Ejemplo n.º 21
0
 public virtual void VideoToGraphics(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
 {
     // Video to graphics transformation.
     Logging.Assert(false);
 }
Ejemplo n.º 22
0
        public override void CallProgram(bool fIsFork, MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
        {
            if (!m_fAvailable)
            {
                Preparation(engine);
            }
            if (m_fRunning)
            {
                return;             // Strictly speaking there should be only one instance of a program running at a time.
            }
            Activation(engine);
            Logging.Log(Logging.MHLogDetail, "Calling program " + m_Name.Printable());
            try
            {
                // Run the code.
                if (m_Name.ToString().Equals("GCD"))
                {
                    // GetCurrentDate - returns local time.
                    GetCurrentDate(success, args, engine);
                }
                else if (m_Name.ToString().Equals("FDa"))
                {
                    // FormatDate
                    FormatDate(success, args, engine);
                }
                else if (m_Name.ToString().Equals("GDW"))
                {
                    // GetDayOfWeek - returns the day of week that the date occurred on.
                    GetDayOfWeek(success, args, engine);
                }

                else if (m_Name.ToString().Equals("Rnd"))
                {
                    // Random
                    Random(success, args, engine);
                }

                else if (m_Name.ToString().Equals("CTC"))
                {
                    // CastToContentRef
                    CastToContentRef(success, args, engine);
                }

                else if (m_Name.ToString().Equals("CTO"))
                {
                    // CastToObjectRef
                    CastToObjectRef(success, args, engine);
                }

                else if (m_Name.ToString().Equals("GSL"))
                {
                    // GetStringLength
                    GetStringLength(success, args, engine);
                }

                else if (m_Name.ToString().Equals("GSS"))
                {
                    // GetSubString
                    GetSubString(success, args, engine);
                }

                else if (m_Name.ToString().Equals("SSS"))
                {
                    // SearchSubString
                    SearchSubString(success, args, engine);
                }

                else if (m_Name.ToString().Equals("SES"))
                {
                    // SearchAndExtractSubString
                    SearchAndExtractSubString(success, args, engine);
                }

                else if (m_Name.ToString().Equals("GSI"))
                {
                    // SI_GetServiceIndex
                    SI_GetServiceIndex(success, args, engine);
                }

                else if (m_Name.ToString().Equals("TIn"))
                {
                    // SI_TuneIndex - Fork not allowed
                    SI_TuneIndex(success, args, engine);
                }
                else if (m_Name.ToString().Equals("TII"))
                {
                    // SI_TuneIndexInfo
                    SI_TuneIndexInfo(success, args, engine);
                }
                else if (m_Name.ToString().Equals("BSI"))
                {
                    // SI_GetBasicSI
                    SI_GetBasicSI(success, args, engine);
                }
                else if (m_Name.ToString().Equals("GBI"))
                {
                    // GetBootInfo
                    GetBootInfo(success, args, engine);
                }
                else if (m_Name.ToString().Equals("CCR"))
                {
                    // CheckContentRef
                    CheckContentRef(success, args, engine);
                }
                else if (m_Name.ToString().Equals("CGR"))
                {
                    // CheckGroupIDRef
                    CheckGroupIDRef(success, args, engine);
                }
                else if (m_Name.ToString().Equals("VTG"))
                {
                    // VideoToGraphics
                    VideoToGraphics(success, args, engine);
                }
                else if (m_Name.ToString().Equals("SWA"))
                {
                    // SetWidescreenAlignment
                    SetWidescreenAlignment(success, args, engine);
                }
                else if (m_Name.ToString().Equals("GDA"))
                {
                    // GetDisplayAspectRatio
                    GetDisplayAspectRatio(success, args, engine);
                }
                else if (m_Name.ToString().Equals("CIS"))
                {
                    // CI_SendMessage
                    CI_SendMessage(success, args, engine);
                }
                else if (m_Name.ToString().Equals("SSM"))
                {
                    // SetSubtitleMode
                    SetSubtitleMode(success, args, engine);
                }

                else if (m_Name.ToString().Equals("WAI"))
                {
                    // WhoAmI
                    WhoAmI(success, args, engine);
                }

                else if (m_Name.ToString().Equals("DBG"))
                {
                    // Debug - optional
                    Debug(success, args, engine);
                }
                else
                {
                    Logging.Assert(false);
                }
            }
            catch (MHEGException)
            {
                // If something went wrong set the succeeded flag to false
                SetSuccessFlag(success, false, engine);
                // And continue on.  In particular we need to deactivate.
            }
            Deactivation(engine);
            // At the moment we always treat Fork as Call.  If we do get a Fork we should signal that we're done.
            if (fIsFork)
            {
                engine.EventTriggered(this, EventAsyncStopped);
            }
        }
Ejemplo n.º 23
0
 public virtual void GetDisplayAspectRatio(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
 {
     // Returns the aspcet ratio.  4:3 => 1, 16:9 => 2
     Logging.Assert(false);
 }
Ejemplo n.º 24
0
 public virtual void SearchAndExtractSubString(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
 {
     if (args.Size == 5)
     {
         // Find a substring within a string and return an index to the position
         // and the prefix to the substring.
         MHOctetString str          = new MHOctetString();
         MHOctetString searchString = new MHOctetString();
         GetString(args.GetAt(0), str, engine);
         int nStart = GetInt(args.GetAt(1), engine);
         if (nStart < 1)
         {
             nStart = 1;
         }
         GetString(args.GetAt(2), searchString, engine);
         // Strings are indexed from one.
         int nPos;
         for (nPos = nStart - 1; nPos <= str.Size - searchString.Size; nPos++)
         {
             int i;
             for (i = 0; i < searchString.Size; i++)
             {
                 if (searchString.GetAt(i) != str.GetAt(i + nPos))
                 {
                     break;                                               // Doesn't match
                 }
             }
             if (i == searchString.Size)
             {
                 break;                         // Found a match.
             }
         }
         // Set the results.
         MHParameter pResString = args.GetAt(3);
         MHParameter pResInt    = args.GetAt(4);
         SetSuccessFlag(success, true, engine); // Set this first.
         if (nPos <= str.Size - searchString.Size)
         {
             // Found
             // Set the index to the position AFTER the string, counting from 1.
             engine.FindObject(pResInt.GetReference()).SetVariableValue(new MHUnion(nPos + 1 + searchString.Size));
             // Return the sequence from nStart - 1 of length nPos - nStart + 1
             MHOctetString resultString = new MHOctetString(str, nStart - 1, nPos - nStart + 1);
             engine.FindObject(pResString.GetReference()).SetVariableValue(new MHUnion(resultString));
         }
         else
         {
             // Not found.  Set the result string to empty and the result index to -1
             engine.FindObject(pResInt.GetReference()).SetVariableValue(new MHUnion(-1));
             engine.FindObject(pResString.GetReference()).SetVariableValue(new MHUnion(new MHOctetString("")));
         }
     }
     else
     {
         SetSuccessFlag(success, false, engine);
     }
 }
Ejemplo n.º 25
0
 public virtual void SetSubtitleMode(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
 {
     // Enable or disable subtitles in addition to MHEG.
     Logging.Assert(false);
 }
Ejemplo n.º 26
0
 public virtual void SI_GetServiceIndex(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
 {
     // Returns an index indicating the service
     if (args.Size == 2)
     {
         MHOctetString str = new MHOctetString();
         GetString(args.GetAt(0), str, engine);
         MHParameter pResInt = args.GetAt(1);
         // The format of the service is dvb://netID.[transPortID].serviceID
         // where the IDs are in hex.
         // or rec://svc/lcn/N where N is the "logical channel number" i.e. the Freeview channel.
         int nResult = engine.GetContext().GetChannelIndex(str.ToString());
         engine.FindObject(pResInt.GetReference()).SetVariableValue(new MHUnion(nResult));
         Logging.Log(Logging.MHLogDetail, "Get service index for " + str.Printable() + " - result " + nResult);
         SetSuccessFlag(success, true, engine);
     }
     else
     {
         SetSuccessFlag(success, false, engine);
     }
 }
Ejemplo n.º 27
0
 public virtual void Debug(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
 {
     Logging.Assert(false);
 }
Ejemplo n.º 28
0
 public virtual void SI_TuneIndex(MHObjectRef success, MHSequence <MHParameter> args, MHEngine engine)
 {
     // Tunes to an index returned by GSI
     if (args.Size == 1)
     {
         int  nChannel = GetInt(args.GetAt(0), engine);
         bool res      = engine.GetContext().TuneTo(nChannel);
         SetSuccessFlag(success, res, engine);
     }
     else
     {
         SetSuccessFlag(success, false, engine);
     }
 }
Ejemplo n.º 29
0
 public override void Initialise(MHParseNode p, MHEngine engine)
 {
     base.Initialise(p, engine);
 }
Ejemplo n.º 30
0
 public override void Perform(MHEngine engine)
 {
     Target(engine).Preload(engine);
 }