home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / videotlk.zip / SAMPLES / EX5 / TUNE.C < prev    next >
Text File  |  1999-02-25  |  26KB  |  679 lines

  1.  
  2. /*------------------------------------------------------------------*
  3.  *                                                                  *
  4.  *  Video Toolkit For OS/2 Version 1.0                              *
  5.  *  Example PM Application No. 5.                                   *
  6.  *  Date : 22/02/95.                                                *
  7.  *  Copyright (c) Abbotsbury Software Ltd., United Kingdom. 1999.   *
  8.  *                                                                  *
  9.  *  Filename : tune.c                                               *
  10.  *                                                                  *
  11.  *------------------------------------------------------------------*/
  12.  
  13. #define     INCL_PM
  14. #define     INCL_DOS
  15. #define     INCL_OS2MM
  16. #define     INCL_SW
  17. #ifndef     DIM
  18. #define     DIM(a) (sizeof(a)/sizeof(a[0]))
  19. #endif
  20.  
  21. #include    <os2.h>
  22. #include    <os2me.h>
  23. #include    <stdio.h>
  24. #include    <stdlib.h>
  25. #include    <string.h>
  26. #include    <vcadd.h>
  27. #include    <vcai.h>
  28. #include    "ex5.h"
  29. #include    "region.h"
  30. #include    "tune.h"
  31.  
  32. extern  void    msg_box (UCHAR *txt, UCHAR *title, ULONG options);
  33. extern  LONG    get_colour (HPS hps);
  34.  
  35. extern  DRIVERHANDLE    DevHandle;
  36. extern  USHORT  DevInstance;
  37. extern  CHAR    DevType[20];
  38. extern  HAB     Hab;
  39. extern  HWND    HwndFrame;
  40. extern  LONG    ColourKey;
  41. extern  LONG    Colours[256];
  42. extern  LONG    NumColours;
  43.  
  44. static  CHAR    RegionFile[256];
  45. static  CHAR    RegionBase[256];
  46. static  CHAR    RegionNames[32][24];
  47. static  USHORT  NumRegions;
  48. static  CHAR    txt[256];
  49. static  CHAR    txt2[256];
  50. static  BOOL    SrcInit, RegionInit, VFInit;
  51.  
  52. MRESULT EXPENTRY TuneDlgProc (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
  53.  
  54. static  void    position_tv (HWND hwnd, USHORT tv);
  55. static  void    enable_tuner_options (HWND hwnd);
  56. static  void    disable_tuner_options (HWND hwnd);
  57. static  void    init_src_listbox (HWND hwnd);
  58. static  void    init_region_listbox (HWND hwnd);
  59. static  void    init_vf_listbox (HWND hwnd);
  60. static  USHORT  load_celeb_src_data (PSOURCE_DATA psrc);
  61. static  USHORT  load_celeb_vf_data (PVIDEO_FORMAT_DATA pvf);
  62. static  USHORT  load_highq_src_data (PSOURCE_DATA psrc);
  63. static  USHORT  load_highq_vf_data (PVIDEO_FORMAT_DATA pvf);
  64. static  USHORT  load_prism_src_data (PSOURCE_DATA psrc);
  65. static  USHORT  load_prism_vf_data (PVIDEO_FORMAT_DATA pvf);
  66. static  USHORT  load_encore_src_data (PSOURCE_DATA psrc);
  67. static  USHORT  load_encore_vf_data (PVIDEO_FORMAT_DATA pvf);
  68.  
  69. static  SOURCE_DATA     SrcData[MAX_SOURCES];
  70. static  USHORT          NumSrcs;
  71. static  VIDEO_FORMAT_DATA   VFData[MAX_VIDEO_FORMATS];
  72. static  USHORT              NumVFs;
  73.  
  74. static  UCHAR   *Copyright =
  75.   "Copyright (c) Abbotsbury Software Ltd., UK. 1994-1999. All Rights Reserved";
  76.  
  77.                         // functions.
  78. MRESULT EXPENTRY TuneDlgProc (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
  79. {
  80.     static  ULONG   freq, ch, no_freq, region, vi, ck;
  81.     static  LONG    fine;
  82.     ULONG   max_ch, id, ul;
  83.     APIRET  rc;
  84.     USHORT  notify_code, src, vf;
  85.     USHORT  lv, rv, lb, rb, lt, rt, mute;
  86.     HPS     hps;
  87.     RECTL   rcl, rcl_tv;
  88.     UINT    i, j;
  89.     USHORT  keytype;
  90.     SHORT   data;
  91.     HWND    hwnd_ef, hwnd_tv;
  92.     UCHAR   *s;
  93.     LONG    bx, by, dy, x, y;
  94.     POINTL  pts;
  95.     BOOL    valid;
  96.  
  97.         switch (msg)
  98.         {
  99.             case WM_INITDLG :
  100.                 if (stricmp (DevType, "celeb") == 0)
  101.                 {
  102.                     NumSrcs = load_celeb_src_data (&SrcData[0]);
  103.                     NumVFs  = load_celeb_vf_data (&VFData[0]);
  104.                 }
  105.                 if (stricmp (DevType, "highq") == 0)
  106.                 {
  107.                     NumSrcs = load_highq_src_data (&SrcData[0]);
  108.                     NumVFs  = load_highq_vf_data (&VFData[0]);
  109.                 }
  110.                 if (stricmp (DevType, "prism") == 0)
  111.                 {
  112.                     NumSrcs = load_prism_src_data (&SrcData[0]);
  113.                     NumVFs  = load_prism_vf_data (&VFData[0]);
  114.                 }
  115.                 if (stricmp (DevType, "encore") == 0)
  116.                 {
  117.                     NumSrcs = load_celeb_src_data (&SrcData[0]);
  118.                     NumVFs  = load_celeb_vf_data (&VFData[0]);
  119.                 }
  120.                 if (stricmp (DevType, "encor") == 0)
  121.                 {
  122.                     NumSrcs = load_celeb_src_data (&SrcData[0]);
  123.                     NumVFs  = load_celeb_vf_data (&VFData[0]);
  124.                 }
  125.                 vi = VcaiVideoInputQuery ();
  126.                 if (SrcData[vi].src_tuner_flag)
  127.                     enable_tuner_options (hwnd);
  128.                 else
  129.                     disable_tuner_options (hwnd);
  130.                 init_src_listbox (hwnd);
  131.                 init_region_listbox (hwnd);
  132.                 init_vf_listbox (hwnd);
  133.                 VcaiTunerGet (®ion, &ch, &freq, &fine);
  134.                 WinPostMsg (hwnd, MSG_CHANGE_TUNER, NULL, NULL);
  135.                 break;
  136.             case WM_PAINT :
  137.                 hps = WinBeginPaint (hwnd, NULLHANDLE, &rcl);
  138.                 WinQueryWindowRect (hwnd, &rcl);
  139.                 WinFillRect (hps, &rcl, CLR_PALEGRAY);
  140.                 WinDrawBorder (hps, &rcl, x, y, 0L, 0L,
  141.                                DB_AREAATTRS | DB_DLGBORDER);
  142.                 WinEndPaint (hps);
  143.                 hps = WinBeginPaint (WinWindowFromID (hwnd, IDD_TUNE_TV),
  144.                                      NULLHANDLE, &rcl);
  145.                 WinQueryWindowRect (WinWindowFromID (hwnd, IDD_TUNE_TV),
  146.                                     &rcl);
  147.                 ColourKey = get_colour (hps);
  148.                 if ((ULONG)NumColours <= 256)
  149.                     WinFillRect (hps, &rcl, Colours[ColourKey]);
  150.                 else
  151.                     WinFillRect (hps, &rcl, ColourKey);
  152.                 WinEndPaint (hps);
  153.                 position_tv (hwnd, IDD_TUNE_TV);
  154.                 break;
  155.             case WM_MOVE :
  156.                 position_tv (hwnd, IDD_TUNE_TV);
  157.                 break;
  158.             case WM_COMMAND :
  159.                 switch (SHORT1FROMMP (mp1))
  160.                 {
  161.                     case DID_OK :
  162.                         WinPostMsg (HwndFrame, MSG_UPDATE_WINDOW, NULL, NULL);
  163.                         WinDismissDlg (hwnd, TRUE);
  164.                         break;
  165.                     default :
  166.                         break;
  167.                 }
  168.                 break;
  169.             case WM_CONTROL :
  170.                 notify_code = (USHORT)SHORT2FROMMP (mp1);
  171.                 switch (SHORT1FROMMP (mp1))
  172.                 {
  173.                     case IDD_TUNE_SRC :
  174.                         if ((notify_code != CBN_LBSELECT) &&
  175.                             (notify_code != CBN_EFCHANGE))
  176.                             return 0;
  177.                         if (SrcInit)
  178.                             return 0;
  179.                         WinQueryDlgItemText (hwnd, IDD_TUNE_SRC, 80L, txt2);
  180.                         if (strcmp ("", txt2) == 0)
  181.                             return 0;
  182.                         valid = FALSE;
  183.                         for (i = 0; i < NumSrcs; i++)
  184.                         {
  185.                             if (strcmp (SrcData[i].src_string, txt2) == 0)
  186.                             {
  187.                                 src = i;
  188.                                 valid = TRUE;
  189.                                 break;
  190.                             }
  191.                         }
  192.                         if (!valid)
  193.                             return 0;
  194.                         VcaiVideoInputSet (src);
  195.                         if (SrcData[src].src_tuner_flag)
  196.                             enable_tuner_options (hwnd);
  197.                         else
  198.                             disable_tuner_options (hwnd);
  199.                         return 0;
  200.                     case IDD_TUNE_REGION :
  201.                         if ((notify_code != CBN_LBSELECT) &&
  202.                             (notify_code != CBN_EFCHANGE))
  203.                             return 0;
  204.                         if (RegionInit)
  205.                             return 0;
  206.                         WinQueryDlgItemText (hwnd, IDD_TUNE_REGION, 80L, txt2);
  207.                         if (strcmp ("", txt2) == 0)
  208.                             return 0;
  209.                         valid = FALSE;
  210.                         VcaiTunerGet (®ion, &ch, &freq, &fine);
  211.                         for (i = 0; i < NumRegions; i++)
  212.                         {
  213.                             if (strcmp (&RegionNames[i][0], txt2) == 0)
  214.                             {
  215.                                 region = i;
  216.                                 valid = TRUE;
  217.                                 break;
  218.                             }
  219.                         }
  220.                         if (!valid)
  221.                             return 0;
  222.                         WinSendDlgItemMsg (hwnd, IDD_TUNE_REGION,
  223.                                            LM_QUERYITEMTEXT,
  224.                                            MPFROM2SHORT (region,
  225.                                                          sizeof (RegionFile)),
  226.                                            MPFROMP (RegionFile));
  227.                         strcpy (txt2, RegionBase);
  228.                         strcat (txt2, RegionFile);
  229.                         ch = 0;
  230.                         max_ch = get_region_data (txt2);
  231.                         for (i = 0; i < max_ch; i++)
  232.                         {
  233.                             if (freq == Region_frequencies[i])
  234.                                 ch = i;
  235.                         }
  236.                         if (ch == 0)
  237.                             ch = Region_lowchannel;
  238.                         freq = Region_frequencies[ch];
  239.                         VcaiTunerSet (region, ch, freq, fine, 0, 0);
  240.                         sprintf (txt, "%lu", freq);
  241.                         WinSetDlgItemText (hwnd, IDD_TUNE_FREQ, txt);
  242.                         WinSendMsg (WinWindowFromID (hwnd, IDD_TUNE_FINE),
  243.                                     SLM_SETSLIDERINFO,
  244.                                     MPFROM2SHORT (SMA_SLIDERARMPOSITION,
  245.                                     SMA_INCREMENTVALUE),
  246.                                     MPFROMSHORT (fine));
  247.                         sprintf (txt, "%lu", ch);
  248.                         WinSetDlgItemText (hwnd, IDD_TUNE_CH, txt);
  249.                         return 0;
  250.                     case IDD_TUNE_VF :
  251.                         if ((notify_code != CBN_LBSELECT) &&
  252.                             (notify_code != CBN_EFCHANGE))
  253.                             return 0;
  254.                         if (VFInit)
  255.                             return 0;
  256.                         WinQueryDlgItemText (hwnd, IDD_TUNE_VF, 80L, txt2);
  257.                         if (strcmp ("", txt2) == 0)
  258.                             return 0;
  259.                         valid = FALSE;
  260.                         for (i = 0; i < NumVFs; i++)
  261.                         {
  262.                             if (strcmp (VFData[i].vf_string, txt2) == 0)
  263.                             {
  264.                                 vf = i;
  265.                                 valid = TRUE;
  266.                                 break;
  267.                             }
  268.                         }
  269.                         if (!valid)
  270.                             return 0;
  271.  
  272.                                         // In order to change the input format
  273.                                         // we must first set the variable
  274.                                         // called INPUTFORMAT. Once this has
  275.                                         // been set we must reset the digitizer
  276.                                         // chip. The way I have reset the chip
  277.                                         // is to close the device, then open
  278.                                         // the device (thus resetting the
  279.                                         // digitizer chip), then switch the
  280.                                         // overlay monitor on, and then
  281.                                         // call the VcaiRedraw function.
  282.                         VcaiVarWrite ("INPUTFORMAT", VCA_VARIABLE_GENERIC, vf);
  283.                         VcaiDeviceClose (DevHandle);
  284.                         DevHandle = VcaiDeviceOpen (DevType, DevInstance);
  285.                         if (DevHandle < 0)
  286.                         {
  287.                             sprintf (txt, "Cannot Open Device %u !",
  288.                                      DevInstance);
  289.                             msg_box (txt, "Error", MB_OK | MB_ERROR);
  290.                         }
  291.                         VcaiOverlay (TRUE);
  292.                         VcaiRedraw ();
  293.                         return 0;
  294.                     case IDD_TUNE_FINE :
  295.                         if ((notify_code == SLN_CHANGE) ||
  296.                             (notify_code == SLN_SLIDERTRACK))
  297.                         {
  298.                             VcaiTunerGet (®ion, &ch, &freq, &fine);
  299.                             fine = (LONG)WinSendDlgItemMsg(
  300.                                         hwnd, IDD_TUNE_FINE,
  301.                                         SLM_QUERYSLIDERINFO,
  302.                                         MPFROM2SHORT
  303.                                         (SMA_SLIDERARMPOSITION,
  304.                                          SMA_INCREMENTVALUE),
  305.                                         NULL);
  306.                             VcaiTunerSet (region, ch, freq, fine, 0, 0);
  307.                         }
  308.                         return 0;
  309.                     case IDD_TUNE_FREQ :
  310.                         switch (SHORT2FROMMP (mp1))
  311.                         {
  312.                             case EN_CHANGE :
  313.                                 VcaiTunerGet (®ion, &ch, &freq, &fine);
  314.                                 WinQueryDlgItemText (hwnd,
  315.                                                      IDD_TUNE_FREQ,
  316.                                                      12L, txt);
  317.                                 freq = (ULONG)atol (txt);
  318.                                 VcaiTunerSet (region, ch, freq, fine, 0, 0);
  319.                                 return 0;
  320.                             default:
  321.                                 break;
  322.                         }
  323.                         return 0;
  324.                     case IDD_TUNE_CH :
  325.                         switch (SHORT2FROMMP (mp1))
  326.                         {
  327.                             case EN_CHANGE :
  328.                                 VcaiTunerGet (®ion, &ch, &freq, &fine);
  329.                                 WinQueryDlgItemText (hwnd,
  330.                                                      IDD_TUNE_CH,
  331.                                                      12L, txt);
  332.                                 ch = (ULONG)atol (txt);
  333.                                 freq = Region_frequencies[ch];
  334.                                 VcaiTunerSet (region, ch, freq, fine, 0, 0);
  335.                                 sprintf (txt, "%lu", freq);
  336.                                 WinSetDlgItemText (hwnd, IDD_TUNE_FREQ,
  337.                                                    (PSZ)txt);
  338.                                 return 0;
  339.                             default:
  340.                                 break;
  341.                         }
  342.                         return 0;
  343.                     default :
  344.                         break;
  345.                 }
  346.                 break;
  347.             case MSG_CHANGE_TUNER :
  348.                 VcaiTunerGet (®ion, &ch, &freq, &fine);
  349.                 vi = VcaiVideoInputQuery ();
  350.                 WinSetDlgItemText (hwnd, IDD_TUNE_SRC,
  351.                                    SrcData[vi].src_string);
  352.                 WinSetDlgItemText (hwnd, IDD_TUNE_REGION, &RegionNames[region][0]);
  353.                 sprintf (txt, "%lu", freq);
  354.                 WinSetDlgItemText (hwnd, IDD_TUNE_FREQ, txt);
  355.                 WinSendMsg (WinWindowFromID (hwnd, IDD_TUNE_FINE),
  356.                             SLM_SETSLIDERINFO,
  357.                             MPFROM2SHORT (SMA_SLIDERARMPOSITION,
  358.                             SMA_INCREMENTVALUE),
  359.                             MPFROMSHORT (fine));
  360.                 sprintf (txt, "%lu", ch);
  361.                 WinSetDlgItemText (hwnd, IDD_TUNE_CH, txt);
  362.                 VcaiVarRead ("INPUTFORMAT", VCA_VARIABLE_GENERIC, &ul);
  363.                 i = (USHORT)ul;
  364.                 WinSetDlgItemText (hwnd, IDD_TUNE_VF, VFData[i].vf_string);
  365.                 VcaiTunerSet (region, ch, freq, fine, 0, 0);
  366.                 return 0;
  367.             default :
  368.                 break;
  369.         }
  370.         return WinDefDlgProc (hwnd, msg, mp1, mp2);
  371. }
  372.  
  373. static void position_tv (HWND hwnd, USHORT tv)
  374. {
  375.     HWND    hwnd_tv;
  376.     RECTL   rcl_tv, rcl;
  377.     POINTL  pts;
  378.     LONG    bx, by, dy, x, y;
  379.  
  380.         hwnd_tv = WinWindowFromID (hwnd, tv);
  381.         if (!WinQueryWindowRect (hwnd_tv, &rcl_tv))
  382.             return;
  383.         if (!WinMapWindowPoints (hwnd_tv, HWND_DESKTOP, (PPOINTL)
  384.                                  &rcl_tv, 2))
  385.             return;
  386.         WinQueryWindowRect (HWND_DESKTOP, &rcl);
  387.         pts.x = rcl_tv.xLeft;
  388.         pts.y = rcl_tv.yBottom;
  389.         if (!WinPtInRect (Hab, &rcl, &pts))
  390.             return;
  391.         pts.x = rcl_tv.xRight;
  392.         pts.y = rcl_tv.yTop;
  393.         if (!WinPtInRect (Hab, &rcl, &pts))
  394.             return;
  395.         bx = WinQuerySysValue (HWND_DESKTOP, SV_CXDLGFRAME);
  396.         by = WinQuerySysValue (HWND_DESKTOP, SV_CYDLGFRAME);
  397.         dy = WinQuerySysValue (HWND_DESKTOP, SV_CYSCREEN);
  398.         VcaiVideoRectValidate (0, 0, 0, 0,
  399.                                (USHORT)(rcl_tv.xLeft + bx),
  400.                                (USHORT)(dy - rcl_tv.yTop - by),
  401.                                (USHORT)(rcl_tv.xRight - rcl_tv.xLeft),
  402.                                (USHORT)(rcl_tv.yTop - rcl_tv.yBottom));
  403. }
  404.  
  405. static void enable_tuner_options (HWND hwnd)
  406. {
  407.         WinEnableWindow (WinWindowFromID (hwnd, IDD_TUNE_REGION), TRUE);
  408.         WinEnableWindow (WinWindowFromID (hwnd, IDD_TUNE_FREQ), TRUE);
  409.         WinEnableWindow (WinWindowFromID (hwnd, IDD_TUNE_CH), TRUE);
  410.         WinEnableWindow (WinWindowFromID (hwnd, IDD_TUNE_FINE), TRUE);
  411. }
  412.  
  413. static void disable_tuner_options (HWND hwnd)
  414. {
  415.         WinEnableWindow (WinWindowFromID (hwnd, IDD_TUNE_REGION), FALSE);
  416.         WinEnableWindow (WinWindowFromID (hwnd, IDD_TUNE_FREQ), FALSE);
  417.         WinEnableWindow (WinWindowFromID (hwnd, IDD_TUNE_CH), FALSE);
  418.         WinEnableWindow (WinWindowFromID (hwnd, IDD_TUNE_FINE), FALSE);
  419. }
  420.  
  421. static void init_src_listbox (HWND hwnd)
  422. {
  423.     USHORT  i, j;
  424.     ULONG   vi;
  425.  
  426.         SrcInit = TRUE;
  427.         for (i = 0; i < NumSrcs; i++)
  428.         {
  429.             WinSendDlgItemMsg (hwnd, IDD_TUNE_SRC, LM_INSERTITEM,
  430.                                MPFROMSHORT (SrcData[i].src_no),
  431.                                MPFROMP (SrcData[i].src_string));
  432.         }
  433.         j = VcaiVarRead ("VIDEOINPUT", VCA_VARIABLE_GENERIC, &vi);
  434.         if (j == 0)
  435.             i = VcaiVideoInputQuery ();
  436.         else
  437.             i = (USHORT)vi;
  438.         WinSendDlgItemMsg (hwnd, IDD_TUNE_SRC, LM_SELECTITEM,
  439.                            MPFROMSHORT (SrcData[i].src_no),
  440.                            MPFROMSHORT (TRUE));
  441.         SrcInit = FALSE;
  442. }
  443.  
  444. static void init_region_listbox (HWND hwnd)
  445. {
  446.     APIRET  rc;
  447.     PSZ     pmmbase, penv = "MMBASE";
  448.     CHAR    filename[256];
  449.     LONG    len;
  450.     ULONG   num_files;
  451.     HDIR    hdir;
  452.     FILEFINDBUF3    ffb;
  453.     USHORT  n, i;
  454.     ULONG   region, freq, max_ch, ch;
  455.     LONG    fine;
  456.  
  457.         RegionInit = TRUE;
  458.         rc = DosScanEnv (penv, &pmmbase);
  459.         if (rc != 0)
  460.         {
  461.             msg_box ("Unable to scan environment.",
  462.                          "Error", MB_OK | MB_ERROR);
  463.             return;
  464.         }
  465.         len = strlen (pmmbase);
  466.         if (pmmbase[len-1] == ';')
  467.             pmmbase[len-1] = '\0';
  468.         strcpy (filename, pmmbase);
  469.         strcat (filename, "\\REGION\\*.RGN");
  470.         strcpy (RegionBase, pmmbase);
  471.         strcat (RegionBase, "\\REGION\\");
  472.         num_files = 1L;
  473.         hdir = 0xffffffff;
  474.         n = 0;
  475.         rc = DosFindFirst (filename,
  476.                            &hdir,
  477.                            FILE_ARCHIVED | FILE_DIRECTORY | FILE_READONLY,
  478.                            (PVOID) &ffb,
  479.                            sizeof (FILEFINDBUF3),
  480.                            &num_files,
  481.                            1L);
  482.         if (rc)
  483.         {
  484.             strcpy (txt2, "DosFindFirst Error");
  485.             msg_box (txt2, "Error", MB_OK | MB_INFORMATION);
  486.             return;
  487.         }
  488.         else
  489.         {
  490.             WinSendDlgItemMsg (hwnd, IDD_TUNE_REGION, LM_INSERTITEM, MPFROM2SHORT
  491.                                (LIT_END, 0),
  492.                                MPFROMP (ffb.achName));
  493.             strcpy (&RegionNames[n][0], ffb.achName);
  494.             n++;
  495.         }
  496.         while (!rc)
  497.         {
  498.             num_files = 1L;
  499.             rc = DosFindNext (hdir, (PVOID)&ffb, sizeof (ffb), &num_files);
  500.             if (!rc)
  501.             {
  502.                 WinSendDlgItemMsg (hwnd, IDD_TUNE_REGION, LM_INSERTITEM,
  503.                                    MPFROM2SHORT (LIT_END, 0),
  504.                                    MPFROMP (ffb.achName));
  505.                 strcpy (&RegionNames[n][0], ffb.achName);
  506.                 n++;
  507.             }
  508.         }
  509.         DosFindClose (hdir);
  510.         NumRegions = n;
  511.  
  512.         VcaiTunerGet (®ion, &ch, &freq, &fine);
  513.         if (region >= n)
  514.             region = 0;
  515.         WinSendDlgItemMsg (hwnd, IDD_TUNE_REGION, LM_QUERYITEMTEXT,
  516.                            MPFROM2SHORT (region, sizeof (RegionFile)),
  517.                            MPFROMP (RegionFile));
  518.         strcpy (txt2, RegionBase);
  519.         strcat (txt2, RegionFile);
  520.         WinSetDlgItemText (hwnd, IDD_TUNE_REGION, RegionFile);
  521.         ch = 0;
  522.         max_ch = get_region_data (txt2);
  523.         for (i = 0; i < max_ch; i++)
  524.         {
  525.             if (freq == Region_frequencies[i])
  526.                 ch = i;
  527.         }
  528.         freq = Region_frequencies[ch];
  529.         RegionInit = FALSE;
  530. }
  531.  
  532. static void init_vf_listbox (HWND hwnd)
  533. {
  534.     USHORT  i, vf, j;
  535.     ULONG   ul;
  536.  
  537.         VFInit = TRUE;
  538.         for (i = 0; i < NumVFs; i++)
  539.         {
  540.             WinSendDlgItemMsg (hwnd, IDD_TUNE_VF, LM_INSERTITEM,
  541.                                MPFROMSHORT (VFData[i].vf_no),
  542.                                MPFROMP (VFData[i].vf_string));
  543.         }
  544.         j = VcaiVarRead ("INPUTFORMAT", VCA_VARIABLE_GENERIC, &ul);
  545.         if (j == 0)
  546.             vf = 0;
  547.         else
  548.             vf = (USHORT)ul;
  549.         WinSendDlgItemMsg (hwnd, IDD_TUNE_VF, LM_SELECTITEM,
  550.                            MPFROMSHORT (VFData[vf].vf_no),
  551.                            MPFROMSHORT (TRUE));
  552.         VFInit = FALSE;
  553. }
  554.  
  555. static USHORT load_celeb_src_data (PSOURCE_DATA psrc)
  556. {
  557.     USHORT  i;
  558.  
  559.         i = 0;
  560.         while (strcmp (celebnb_src[i].src_string, "") != 0)
  561.         {
  562.             psrc->src_no = celebnb_src[i].src_no;
  563.             psrc->src_tuner_flag = celebnb_src[i].src_tuner_flag;
  564.             strcpy (psrc->src_string, celebnb_src[i].src_string);
  565.             i++;
  566.             psrc++;
  567.         }
  568.         return i;
  569. }
  570.  
  571. static USHORT load_celeb_vf_data (PVIDEO_FORMAT_DATA pvf)
  572. {
  573.     USHORT  i;
  574.  
  575.         i = 0;
  576.         while (strcmp (celebnb_vf[i].vf_string, "") != 0)
  577.         {
  578.             pvf->vf_no = celebnb_vf[i].vf_no;
  579.             strcpy (pvf->vf_string, celebnb_vf[i].vf_string);
  580.             i++;
  581.             pvf++;
  582.         }
  583.         return i;
  584. }
  585.  
  586. static USHORT load_highq_src_data (PSOURCE_DATA psrc)
  587. {
  588.     USHORT  i;
  589.  
  590.         i = 0;
  591.         while (strcmp (highqnb_src[i].src_string, "") != 0)
  592.         {
  593.             psrc->src_no = highqnb_src[i].src_no;
  594.             psrc->src_tuner_flag = highqnb_src[i].src_tuner_flag;
  595.             strcpy (psrc->src_string, highqnb_src[i].src_string);
  596.             i++;
  597.             psrc++;
  598.         }
  599.         return i;
  600. }
  601.  
  602. static USHORT load_highq_vf_data (PVIDEO_FORMAT_DATA pvf)
  603. {
  604.     USHORT  i;
  605.  
  606.         i = 0;
  607.         while (strcmp (highqnb_vf[i].vf_string, "") != 0)
  608.         {
  609.             pvf->vf_no = highqnb_vf[i].vf_no;
  610.             strcpy (pvf->vf_string, highqnb_vf[i].vf_string);
  611.             i++;
  612.             pvf++;
  613.         }
  614.         return i;
  615. }
  616.  
  617. static USHORT load_prism_src_data (PSOURCE_DATA psrc)
  618. {
  619.     USHORT  i;
  620.  
  621.         i = 0;
  622.         while (strcmp (prismnb_src[i].src_string, "") != 0)
  623.         {
  624.             psrc->src_no = prismnb_src[i].src_no;
  625.             psrc->src_tuner_flag = prismnb_src[i].src_tuner_flag;
  626.             strcpy (psrc->src_string, prismnb_src[i].src_string);
  627.             i++;
  628.             psrc++;
  629.         }
  630.         return i;
  631. }
  632.  
  633. static USHORT load_prism_vf_data (PVIDEO_FORMAT_DATA pvf)
  634. {
  635.     USHORT  i;
  636.  
  637.         i = 0;
  638.         while (strcmp (prismnb_vf[i].vf_string, "") != 0)
  639.         {
  640.             pvf->vf_no = prismnb_vf[i].vf_no;
  641.             strcpy (pvf->vf_string, prismnb_vf[i].vf_string);
  642.             i++;
  643.             pvf++;
  644.         }
  645.         return i;
  646. }
  647.  
  648. static USHORT load_encore_src_data (PSOURCE_DATA psrc)
  649. {
  650.     USHORT  i;
  651.  
  652.         i = 0;
  653.         while (strcmp (encornb_src[i].src_string, "") != 0)
  654.         {
  655.             psrc->src_no = encornb_src[i].src_no;
  656.             psrc->src_tuner_flag = encornb_src[i].src_tuner_flag;
  657.             strcpy (psrc->src_string, encornb_src[i].src_string);
  658.             i++;
  659.             psrc++;
  660.         }
  661.         return i;
  662. }
  663.  
  664. static USHORT load_encore_vf_data (PVIDEO_FORMAT_DATA pvf)
  665. {
  666.     USHORT  i;
  667.  
  668.         i = 0;
  669.         while (strcmp (encornb_vf[i].vf_string, "") != 0)
  670.         {
  671.             pvf->vf_no = encornb_vf[i].vf_no;
  672.             strcpy (pvf->vf_string, encornb_vf[i].vf_string);
  673.             i++;
  674.             pvf++;
  675.         }
  676.         return i;
  677. }
  678.  
  679.