CA2170429C - Method and apparatus for finding and selecting a desired data item from a large schedule of data items using a tv set and a controller similar to a tv-remote-control - Google Patents

Method and apparatus for finding and selecting a desired data item from a large schedule of data items using a tv set and a controller similar to a tv-remote-control Download PDF

Info

Publication number
CA2170429C
CA2170429C CA002170429A CA2170429A CA2170429C CA 2170429 C CA2170429 C CA 2170429C CA 002170429 A CA002170429 A CA 002170429A CA 2170429 A CA2170429 A CA 2170429A CA 2170429 C CA2170429 C CA 2170429C
Authority
CA
Canada
Prior art keywords
dim
display
subgroup
program
case
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CA002170429A
Other languages
French (fr)
Other versions
CA2170429A1 (en
Inventor
Stephen Gregory Eick
Peter Andrew Mataga
Rebecca Anne Walpole
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
AT&T Corp
Original Assignee
AT&T IPM Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by AT&T IPM Corp filed Critical AT&T IPM Corp
Publication of CA2170429A1 publication Critical patent/CA2170429A1/en
Application granted granted Critical
Publication of CA2170429C publication Critical patent/CA2170429C/en
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/47End-user applications
    • H04N21/472End-user interface for requesting content, additional data or services; End-user interface for interacting with content, e.g. for content reservation or setting reminders, for requesting event notification, for manipulating displayed content
    • H04N21/47214End-user interface for requesting content, additional data or services; End-user interface for interacting with content, e.g. for content reservation or setting reminders, for requesting event notification, for manipulating displayed content for content reservation or setting reminders; for requesting event notification, e.g. of sport results or stock market
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/431Generation of visual interfaces for content selection or interaction; Content or additional data rendering
    • H04N21/4312Generation of visual interfaces for content selection or interaction; Content or additional data rendering involving specific graphical features, e.g. screen layout, special fonts or colors, blinking icons, highlights or animations
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/433Content storage operation, e.g. storage operation in response to a pause request, caching operations
    • H04N21/4334Recording operations
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/45Management operations performed by the client for facilitating the reception of or the interaction with the content or administrating data related to the end-user or to the client device itself, e.g. learning user preferences for recommending movies, resolving scheduling conflicts
    • H04N21/454Content or additional data filtering, e.g. blocking advertisements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/47End-user applications
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/47End-user applications
    • H04N21/482End-user interface for program selection
    • H04N21/4828End-user interface for program selection for searching program descriptors
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99937Sorting
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99944Object-oriented database structure
    • Y10S707/99945Object-oriented database structure processing
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S715/00Data processing: presentation processing of document, operator interface processing, and screen saver display processing
    • Y10S715/961Operator interface with visual structure or function dictated by intended use
    • Y10S715/965Operator interface with visual structure or function dictated by intended use for process control and configuration
    • Y10S715/966Computer process, e.g. operation of computer
    • Y10S715/968Computer process, e.g. operation of computer interface for database querying and retrieval

Abstract

An apparatus and method for presenting a viewer with an overall representation of the present number of entertainment programs available for selection given one week of program schedule data for 300 or more channels and one or morefiltering criteria to limit the number of items represented in the overall representation.
Sequentially applied filters will filter the group of program schedule data items that has at least 100,000 half hour time slots offered by 300 channels each week into a smaller subgroup where individual consideration of each item of the subgroup can be made in a reasonable time. A set top box drives the display of overall representations or results of filtering criteria on a commercial TV set. Once a reasonable sizedsubgroup is obtained, other displays provide specific information of the programofferings of the subgroup. Selection of the filtering criteria and selection from within a subgroup is interactively made by a viewer through the use of a controller that looks and operates very much like a TV remote control. This makes the interaction familiar, easy and predictable.

Description

METHOD AND APPARATUS FOR FINDING AND SELECTING A DESIRED
DATA ITEM FROM A LARGE SCHEDULE OF DATA ITEMS USING A TV
SET AND A CONTROLLER SIMILAR TO A TV-REMOTE-CONTROL
Technical Field The invention concerns a method and apparatus for subjecting a large schedule of data items having multiple attributes to consecutive selection criteria in order to reduce the number of individual programs to a manageable group which can be visually searched for a desired data item having a selected subset of the attributes, and more particularly to an apparatus and method which use an interactive control having directional buttons and a select button that are used in conjunction with an interactive display viewed on a normal television set to select the desired data item.
Descriution of the Prior Art Presently there are known methods for reducing a large quantity of data into a manageable set of data which can be visually searched for a desired item by a decision 1 S maker. One example of such a large quantity of data is a directory of a fixed drive of a computer system. Methods implemented through interactive graphical user interfaces for personal computers and workstations display and reduce disk drive directories to root directory displays which typically show root level files and one or more branch subdirectories for the user's selection. Upon selection of a subdirectory, usually by a mouse, the display typically shifts showing files of the selected subdirectory and sub-subdirectories for further selection. The subdirectory display is often too big to fit on the screen, so interactive scroll bars are typically provided so the display may be controlled by a mouse. Using the mouse and the scroll bars, a user may work down the directory tree structure until the desired file is found.
Such graphical user interfaces are common for computers and monitors where visual definition is typically at least 640 x 480 pixels for each display. Such techniques might be used in homes to access databases of useful information, such as airline schedules, television programming schedules and movie-on-demand catalogues.
Unfortunately, each home does not have a computer or work station with 640x480 pixel definition which could take advantage of such existing databases.
Further, the NTSC television set which almost every home has in its living room has relatively low viewing definition compared to 640 x 480 pixels or more per screen definition of computer monitors. Moreover, the typical home television set is not connected to a mouse, which is not an appropriate pointing device for the living room, rather most television sets have controls on control panels and/or on a remote controls.
If just a fraction of these home television sets were used to find and select airline ticket reservations, programs to watch on 300 hundred or more channel cable television services, or pay-per-view movies from a vast collection, the profitability of the service providers and the satisfaction of the users would both be improved. The 300 plus channels mentioned, may use any type of transmission scheme that will deliver information via a cable or wireless path and includes but is not limited to time division multiplexed channels, frequency division multiplexed channels and packet data multiplexed channels.
One known approach for the TV programming schedule is to display the presently showing programs along with the next subsequent programs for the next hour or so, on what is referred to as a preview channel. Because this is more information than can be legibly displayed on one television screen at once, the preview channel display often scrolls through all the channel offering for the present time and the near future. For a sixty channel system, one complete scrolling takes about three minutes. At such a rate, a one hundred channel cable service would take five minutes and the future three hundred plus channel cable services would take 15 minutes. Needless to say, three minutes is a long time, but acceptable because breaks between programs are about that long. Five and fifteen minutes time periods though represent a substantial portion of a 30 minute program and are simply too long to expect a TV viewer to wait. The alternatives of speeding up the scrolling rate or using smaller size letters for descriptions are not practical either because either of these actions reduces the ability of the viewer to read and understand the schedule.
Thus, there is a need in the art for a method and apparatus that allows a viewer to quickly find and select a desired data item from a large schedule, in this case a TV
program for viewing from a TV programming schedule for 300 plus channels over the ensuing hours or even days. There is a similar need for a method and apparatus, very similar to the TV program selector, for finding and selecting a movie to order from movies-on-demand, or an airline flights) for a trip. It would further be desirable to use a method similar to the TV program selector to find and select a file in storage assets accessible by the apparatus to be executed, updated or deleted as part of file maintenance.
It is an object of the present invention to provide a view of a large schedule of data items and interactive selections of subgroups of the large schedule of data items in order to arrive at a screen display with sufficiently small number of items and sufficiently legible descriptions of each item to provide a viewer with an opportunity to make a reasoned selection therefrom.
It is another object of this invention to provide a method for interactively selecting a data item from a large schedule of data items by means of sequentially applying different filtering criteria using an interactive control having an operation appropriate for use with a television set.
Summary of the Invention In accordance with one aspect of the present invention there is provided apparatus for selecting an item from a group thereof in a system having display means and interactive movable pointing means for specifying a location in the display means and making a selection at a specified location, the apparatus comprising: filtration means including subgroup specifiers in the display means and responsive to selection of a subgroup specifier by the painting means for filtering the group to produce the subgroup specified by the selected subgroup specifier; means for displaying representations of group items belonging to at least a portion of the subgroup in the display means; group item selection means for selecting a group item by selecting the representation thereof in the display in response to the pointing means; means for displaying a reduced representation of the entire subgroup and an indication in the reduced representation of the portion of the group being presently displayed by the display means; wherein said reduced representation represents a three dimensional representation, the third dimension being location within a logical stack of items having at least one common property;
and wherein each item of a logical stack have viewing timeslot as one common property.
In accordance with another aspect of the present invention there is provided apparatus for selecting an item from a group thereof in a system having display means and interactive movable pointing means for specifying a location in the display means and making a selection at a specified location, the apparatus comprising: filtration means including subgroup specifiers in the display means and responsive to selection of a subgroup specifier by the pointing means for filtering the group to produce the subgroup specified by the selected subgroup specifier; means for displaying representations of group items belonging to the subgroup in the display means; group item selection means for selecting a group item by selecting the representation thereof in the display in response to the pointing means; and means for displaying a reduced representation of the entire subgroup and an indication in the reduced representation of the portion of the group being presently displayed by the display means; said reduced representation displaying means displaying a three dimensional representation, a third dimension being represented as a logical stack of items having at least one common property and; said interactive movable pointing means includes a remote control having:
a first pair of buttons to control changes in location in the display in a first direction;
and a second pair of buttons to control changes in location in the display in a second direction; and a third pair of buttons to control changes in location within the logical stack.
In accordance with yet another aspect of the present invention there is provided a method comprising the steps of: receiving program schedule data for at least 300 individual channels for a time period of at least a week, said program schedule data having at least 3600 individual program titles with each of said individual titles having a respective start and stop time; storing said program schedule data in local memory for rapid sorting and retrieval in a database format;
displaying a plurality of vertically cascaded cards with each card representing a respective individual title with its particular start time and channel;
filtering the program schedule data in response to interactive user inputs into a subgroup of the program schedule data; displaying the subgroup of the program schedule data for 4a review; and interactively selecting an individual title from the subgroup of program schedule data for viewing on a TV screen.
In accordance with still yet another aspect of the present invention there is provided a method comprising the steps of: receiving program schedule data for at least 300 individual channels for a time period of at least a week, said program schedule data having at least 3600 individual program titles with each of said individual titles having a respective start and stop time; storing said program schedule data in local memory for rapid sorting and retrieval in a database format;
displaying a plurality of vertically cascaded cards with each card representing a respective individual title with its particular start time and channel;
filtering the program schedule data in response to interactive user inputs into a subgroup of the program schedule data; displaying the subgroup of the program schedule data for review; and interactively selecting an individual title from the subgroup of program schedule data for recording by a video recording device.
In accordance with still yet another aspect of the present invention there is provided a method for choosing a desired program from a large schedule of programs whose data is stored in a local memory, comprising the steps of displaying a vertically cascaded group of cards with each card representing a program of a particular time and channel; displaying a selection window located around a subgroup of said group of cards; displaying a two-dimensional grid adjacent to said vertically cascaded group of cards in which said subgroup of the programs represented by said vertically cascaded group of cards are shown in greater detail; displaying a first active area within said selection window highlighting one of said subgroup of programs; displaying a second active area within said two-dimensional grid, said second active area being located around and highlighting greater details of the program highlighted in said first active area;
moving said first active area in a vertical direction in response to vertical direction arrows to a viewer's input of a remote control; and selecting a desired program by moving said active area to said desired program and actuating a select button for said set top box to make said selection.

4b Brief Description of the Drawings FIG. 1 is a pictorial of a television set connected through a set top box to a cable carrying the program to be selected and a controller for selecting that program.
FIG. 2 is a simplified block diagram of the set top box.
FIG. 3 is a pictorial of a controller as shown in FIG. 1.
FIG. 4 is a pictorial of a top most selection interactive display.
FIG. 5 is a pictorial of a second level selection interactive display.
FIG. 6 is a pictorial of a third level selection interactive display.
FIG. 7 is a pictorial of a first level selection query display.
FIG. 8 is a pictorial of a second level selection query display.
FIG. 9 is a pictorial of another third level selection query display.
. FIG. 10 is a pictorial of a display showing a subgroup of programs meeting the Sports, All and On Now sorting criteria.
1 S FIG. 11 is a pictorial of a display showing the subgroup of programs meeting the Sports, All and On Now sorting criteria along with a window having a preview of the highlighted program.

FIG. 12 is a pictorial of a display showing a second level selection interaction display, similar to FIG. 5.
FIG. 13 is a pictorial of a two-dimensional interactive grid display with very many program data items shown in reduced representations.
5 FIG. 14 is a pictorial of a third level selection query display, similar to FIG. 9.
FIG. 15 is a pictorial of a two-dimensional interactive grid display filtered down to a manageable number of data items.
FIG. 16 is a pictorial of a first alphanumeric interactive display.
FIG. 17 is the same display as FIG. 14 except that the highlighted interactive area is at a different location.
FIG. 18 is a pictorial of a second alphanumeric interactive display.
FIG. 19 is the same display as FIG. 16 except the highlighted interactive area is at a different location.
FIG. 20 is a pictorial of a third alphanumeric interactive display.
FIG. 21 is the same as FIG. 18 except that the highlighted interactive area is at a different location.
FIG. 22 is a pictorial of a fourth alphanumeric interactive display.
FIG. 23 is a pictorial of a two dimensional interactive display with logical third dimensional stacks for row and column intersections having multiple entries therein.
Detailed Descri tn ion Referring now to FIG. 1, a television set (TV) 10 is connected to set top box (STB) 12 via interconnecting cable 14. STB 12 is also connected to cable 16 which carries at least one cable program. The TV 10 is any standard TV such as an NTSC, a high definition, or some other standard commercial type for home use. A
controller 20 is linked to STB 12, preferably via a free space optical link 22 for controlling the operation of STB 12 in order to select a program for viewing.
Referring now to FIG. 2, STB 12 will be described in greater detail. The STB
12 has a cable interface 30 that selects and converts the incoming signals on cable 16, whether they are digital signals, analog signals, or packet signals, to signals that are compatible with the TV 10. The cable interface 30 is connected by bi-directional bus 32 to CPU 34. Bi-directional bus 32 carries digital information received over cable 16 for use by CPU 34 and digital information transmitted from CPU 34 to cable interface 30. If cable 16 is a bi-directional cable, some of the information from CPU 34 will be processed through cable interface 30 to cable 16.
In addition to bi-directional bus 32, CPU 34 is connected to ROM 38 and RAM 40 via a memory bus 36. ROM 38 contains an operating program that is executed by CPU 34 to provide most of the functionality of the STB 12. RAM 40, among other things, provides storage space for intermediate results of the operating program as executed by CPU 34. RAM 40 provides storage for data that is received from cable 16 and filtered in response to the operating program and viewer inputs from controller 20 (shown in FIG. 1 ). If further storage is needed for data, larger RAM devices and/or mass storage devices such as disk drives, may be also connected bi-directional bus 32 (not shown). To receive viewer input, CPU 34 is connected to controller interface 44 via bus 42, and to provide feedback to the viewer, CPU
34 is connected to and drives STB display 48 via bus 46 with channel related information.
FIG. 3 illustrates a preferred embodiment of the controller 20. Controller 20 is designed to look and operate like a standard remote control of a TV or a video cassette recorder (VCR). Controller 20 has a numeric keypad 50 having number keys 0-9. Controller 20 has an up arrow 52, a down arrow 54, a right pointing arrow 56, a left pointing arrow 58, a double up arrow 60 and a double down arrow 62.
Controller 20 also has a select (~) button 64, a cancel (X) button 66 and a query (?) button 68.
All interactions with the interface provided by the present invention are controlled by various sequences of these 19 buttons of the controller 20. Further, the result of actuating one of these buttons will be similar the results of a similar action of a standard TV or VCR remote control, so its use will be familiar, predictable and intuitive to the viewer using it.
There are two broad classes of graphical components used in the interface of the present invention: those used by the viewer to select a desired data view or to apply a filter to the information being displayed, such as FIG. 4; and those components used to actually display the information through which the viewer will progress in order to make a selection of a specific item, such as FIG. 6. For example, the viewer might view the schedule of TV programs for the next few hours (all channels), and filter the display to show only sports, basketball games in particular.
These choices fall into the first class. Once the display of all basketball shows for the next few hours has been selected, the viewer may progress through it reviewing a text or video digest of each program as selected by the controller 20. Selection of a specific program would typically lead to an action such as videotaping the show or setting an alarm to remind the viewer that the desired program is coming up.
The navigation and selection sequences to find and select the desired program are examples of the use of the second class of graphical components.
Note, that in both cases the viewer is required to navigate through multiple graphic displays in order to ultimately select a desired program. The interfaces are kept conceptually and visually distinct in the interface according to the present invention because they serve different purposes and the viewer is reminded of this by their appearance. In addition, the information involved in the view selection components, i.e., the first class, falls naturally into the form of hierarchical menus:
short lists with complex substructure. In contrast, the data display, i.e., the second class, components must be able to handle large schedules and arrays of information, which are essentially flat data with simple substructure.
Additionally, there is a display component in most displays referred to as a ' frame', which functions as a status display. The frame is used to give the viewer some context (what view am I displaying?), as well as a brief summary of the presently selected item's characteristics (what item do I currently have selected?).
Typically the latter would be the item's full name and useful information such as program start and stop times. The frame will be described further, later.
Referring now to FIGs. 3 and 4, a top or beginning level display 400 of the viewer interface for use with controller 20 as it appears on the viewer's TV
10 (shown in FIG. 1 ) during normal operation. It is depicted as a file card menu 402 having a tab labeled "Begin". On file card menu 402 are interactive buttons labeled Movies (on Demand) 404, Last Movie 406, Options 408, TV 410, TV Now 412, Last TV 414, Shopping 416, and Last Shop 418 which when selected by means of the controller 20 cause the next relevant display to be shown along with some sorting and/or filtering to be performed on the data stored in RAM 40 (shown in FIG 2). When the file card menu 402 first appears, an active area, where a selection may be made, is highlighted. This active area may be moved by actuating the arrow buttons 52-56 and double arrow buttons 60, 62 of controller 20. The file card menu 402 is surrounded by a frame 420, the top of which indicates the designation of the active area currently highlighted. Once an active area has been highlighted, a selection is made by actuating the select (~~) button 64 in FIG. 4, the TV button 410 is shown to be active:
by actuating the select (~~) button 64, the next display 500 shown in FIG. 5 appears.
This appearance is a logical overlaying of the display 500 over the display 400.
Although display 400 is not visible while any logically overlaying display is appearing on the screen of the TV 10, display 400 will become visible again if all of the logically overlaying displays are canceled, i.e. by actuating the cancel (X) button 66. Thus, until a program is selected for real time viewing, it is possible for the viewer to work his or her way back to the display 400 by actuating the cancel (X) button the appropriate number of times.
FIG. 5 shows a second level display 500 which is depicted as a file card menu 502 labeled "TV", which appears to overlay and occlude all of file card menu except for the label "Begin". The label TV indicates that the items that can be accessed are TV shows, such as dramatic series, situation comedies, serials, regular variety shows, game shows, sports, and so forth. Since movies and shopping were topics of other interactive buttons, these types of programs may be filtered out in whole or in part. File card menu 502 has interactive buttons labeled On Now 504, Weekdays 506, Coming Up 508, Weekend 510, and Search 512. As with the file card menu 402, file card menu 502 has an active area that can be moved by the viewer by operation of the arrow buttons 52-56 and double arrow buttons 60, 62 of controller 20 (shown in FIG. 3). Each of the interactive button represents another filtering that will be performed if it is selected. In FIG. 5, the On Now button 504 is highlighted, and if selected by actuating the select (r) button 64, causes a third level display shown in FIG. 6 to appear and a further sorting an/or filtering of the data stored within RAM 40 (shown in FIG. 2).

Referring now to FIG. 6, display 600 shows what is on at the present time, which in this illustration is 6:30 p.m. A reduced representation 602 of all television shows that are on at the present time appears in FIG. 6. The reduced representation 602 presents each program that is presently on as a card in a tightly cascaded set of cards. The cards may be gray shade coded to distinguish between news shows, sport shows, dramatic shows, comedy shows, documentary shows and so forth. Those skilled in the art will recognize that color would be preferable for color television sets, and a method and apparatus according to the present invention using color to differentiated program types in the reduced representation 602 is contemplated. Thus, using visual coding within the reduced representation 602 would allow a sports program to visually stand out from the non-sports TV programming in the example shown. Up arrow 52 and Down arrow 54 respectively move a selection window 604, which is slightly wider than the items displayed in reduced representation, up and down the reduced representation 602 of the On Now subgroup in single steps.
Motion of the active area along the reduced representation 602 is one dimensional, either up or down. The up arrows 60 and the down arrows 62 move this selection window 604 respectively up and down the reduced representation 602 in increments of six. The individual items visible and located within the selection window represent a further subgroup of six programs out of the reduced representation 602 On Now subgroup. This six program subgroup of the selection window 604 is displayed in larger form in a grid display 606 located next to reduced representation 602. This larger form allows the viewer to read the titles of the programs presently in grid display 606. The visible coding, i.e. gray shade coding or color coding, of each item is retained in the larger form in grid display 606 to aid the viewer differentiate between the various types of programming offered.
Within selection window 604 and grid display 606 are active areas 605, 607 that highlight one item in their respective portions of display 600. The active areas 605, 607 move in coordination with each other in response to the Up arrow 52 and the Down arrow 54. When Up arrow 52 or Down arrow 54 require the active areas 605 and 607 to move above or below the selection window 604 and grid display 606, a paging occurs which moves the selection window up six or down six. When an item l0 2170429 is located within active areas 605, 607, further information, such as the TV
channel call sign, the cable channel number, and the exact start and stop times, is retrieved from the programming database stored in RAM 40 and displayed in the top of a frame 610 of display 600. If the select (~~) button 64 is actuated at this time, a preview of either a short text description or a brief still or motion video replaces the grid display 606. The data for these previews are stored in RAM 40. A second sequential actuation of the select (~i) button 64 actually selects the highlighted program in the active area 604 of reduced representation 602 and formerly highlighted in grid display 606. If the up arrow 52 or the down arrow 54 is actuated the respective preview for the next program item up or down from the previous previewed item is selected.
The information displayed in the top of the frame 610 will change to the next program item up or down also. Actuation of the cancel button 66 returns the viewer to the previous arrangement of display 600. The bottom of the frame 610 lists the characteristics of the display 600, which are also retrieved from RAM 40. If the 1 S query (?) button 68 is actuated, the grid display 606 will be replaced by a generalized help menu. This generalized help menu has many buttons, as explained below, one of which is a view button. If the view button is actuated, the generalized help menu is replaced with the previous select (i.e. filter) view.
Referring now to FIGS. 3, and 7 a selection of a program by category will be described. Actuation of the query (?) button 6.8 of controller 20 causes display 700 to appear on the screen of TV 10 (shown in FIG. 1 ). On display 700 has a help button 702, a categories button 704, a view button 706, a begin button 708, a favorites button 710, and a user button 712. An active area, shown on categories button 704 is moved by the arrow buttons 52-58. The function of the view button 706 has been discussed in regard to FIG. 6 and will not be repeated here. Actuation of the help button 702 causes a menu of specific help functions to be displayed. Actuation of the begin button 708 causes the beginning menu to be displayed, i.e. it takes the viewer back to the beginning of the selection sequence. Actuation of the favorites button 710 brings up a list of favorite programs for the present timeslot, which may either be accumulated by the CPU 32 from viewing data or may be entered by the viewer or viewers. Actuation of the viewer button 712, which causes a display to appear where a viewer may interactively enter his or her status as the principal viewer.
This information is used to determine, display a slate of favorite programs customized for each viewer. Actuation of the categories button 704 causes a further display 800, which is shown in FIG. 8, to replace display 700 on the screen of TV 10.
Refernng now to FIGS. 3, 8 and 9, display 800 has numerous buttons 801, 802, 803, 804, 805, 806, 807, 808, and 809 corresponding to Favorite, Information, Entertainment, Movies, Sports, News, Children, Series and More categories of programming. The buttons 801-809 may be have an active area moved among them using arrows 52-58, or the numeric keypad may be used as a set of hot keys to move the active area to the desired category immediately. The buttons 801-809 are laid out in a 3x3 row and column arrangement just the same as the 1-9 keys of keypad 50 are arranged. Thus, without numbering, intuitive hot key navigation is possible.
For example to move the active area to the button in the third column and third row, i.e.
button 809, the key in the third column and the third row , i.e. the numeral 9, of keypad 50 is actuated. The button 809 unlike the other buttons which subsequently provide narrower choices, gives another display of buttons for further category choices (not shown). If the active area is around Sports button 805 as shown in FIG.
8, and the select (~~) button 64 is actuated, the display shown in FIG. 9 would appear.
FIG. 9 is arranged with selection buttons 901-909 in a 3x3 arrangement, similar to that of FIG. 8. Movement of the active area by arrows 52-58 or by hot key is available in FIG. 9, as in FIG. 8. Buttons 901-909 correspond to Baseball, Football, Basketball, Soccer, All, Hockey, Golf, Racing and Other respectively. Except for All button 905, each of the buttons in FIG. 9 represents a narrower subgroup of the overall category of sports. Actuating All button 905 causes display 1000, shown in FIG. 10, to replace, i.e. logically overlay, display 900.
Referring now to FIG. 10, a filtered display for TV programs, that are On Now, for 6:30 p.m. local time as shown in FIG. 10, that are Sports programs showing All categories in reduced representation 1002 is shown. Reduced representation has so few entries that characteristics of the individual cards that were hidden previously by the sheer number of programs represented can now be discerned.
For example, menu card 1003 representing the program This Week in the NBA is shorter on the left side than menu card 1004 representing the program Senior PGA Golf.
The reason for that difference is that the program This Week in the NBA starts at 6:30 p.m., while the program Senior PGA Golf started at an earlier time as designated by the double left pointing arrows before the title of Senior PGA Golf in selection window 1006. Since This Week in the NBA and Senior PGA Golf both end at the same time, the right sides of their reduced representations 1003 and 1004 end at the same location. Movement or navigation of the active area 1005 along the reduced representation 1002 is by means of controller 20 the same as in FIG. 6. Each of the six titles shown in selection window 1006 has a respective rectangular region 1015 thereafter. The rectangular regions 1010-101 S are shaded differently according to the type of sports program with which they are associated. These different shades of gray, or different colors if the display is shown on a color TV, are a visual key to the type of sport that corresponds to each of the six titles. Actuating the select (r) button 64 of controller 20 causes display 1106, shown in FIG. 11, which is a text preview of the program highlighted by the active area, to overlay selection area 1006.
As mentioned above, actuating the select (~~) button 64 at this point will cause CPU
34 to instruct cable interface 30 (shown in FIG. 2) to select that TV program for viewing.
Refernng again to FIG. 10 if the status of the method and apparatus is the same as it was just after the selection that caused display 1000 to be shown was made, as described in the previous paragraph, and if the query (?) button 68 is actuated, then the display 700 shown in FIG. 7 with various selections will again be displayed.
Further, if view button 706 is actuated, display 1200 as shown in FIG. 12 and its filter selections will logically over lay display 700. Display 1200 has numerous interactive buttons: On Now 1202, Coming Up 1204, Search 1206, Weekdays 1208 and Weekend 1210. Since the All Sports category has been selected previously, if the active area of display 1200 is moved to highlight the Coming Up button 1204 and the button 1204 is actuated, display 1300, shown in FIG. 13 will appear and over lay display 1200.
In display 1300, two coordinate axes are shown which are respectively labeled with two attributes of the of the selected subgroup of data items. The two attributes shown in display 1300 are channels and timeslots for the next 24 timeslots, i.e. 12 hours, coming up. Since the all sports category has been selected, each sports program showing on one of the 300 plus channels within the next 12 hours will be represented in display 1300. Each sports program upcoming is represented by a rectangular 'card' located in the row corresponding to the channel carrying the program and in the columns) representing the timeslot(s) when it will be shown.
Each 'card' is a color coded, reduced representation of the data item for its respective program. The viewer may move the active area 1302 among the cards using the up and down arrows 52, 54 and right and left arrows 56, 58 for movement vertically and horizontally, respectively. As can be seen from display 1300, there are still too many data items in the subgroup to individually consider in a reasonable amount of time, so further filtering, either by a shorter time period, i.e. On Now, or a narrower category, i.e. basketball, is needed. To change to a narrower category, the viewer presses the query (?) button 68 which causes display 700 (shown in FIG. 7) to be displayed.
Next, categories button 704 is selected which causes display 900 (shown in FIG. 9) to be displayed. Next, basketball button 903 is selected which causes display 1500 of FIG. 15 to be displayed. The Coming Up time filter of FIGS. 12 and 13 has not been changed, so display 1500 shows the basketball programs coming up in the next hours. As can be seen, the two-dimensional grid display 1500 contains approximately sixteen programs, which is sufficiently small to review each item individually in a reasonable time period. Moving active area 1502 around two-dimensional grid display 1500 with the up and down arrows 52, 54 and/or the right and left arrows 56, 58, causes the title and channel of each program to be displayed in the top of the frame of display 1500 to assist the reviewing and selection process. For example, the program highlighted by active area 1502 is "This Week In the NBA" and it is showing on CNN. Thus, by selective filtering the unwieldly display 1300 of programs shown in FIG. 13 is reduced to a manageable handful of display 1500, which the viewer can navigate through individually in a reasonable time.
Referring now to FIGS. 16-23, another aspect of the present invention will be described. In FIG. 16 and the remaining figures, a longer period of time is selected other than the one and a half hours or so retrieved by the On Now selection.
For example, if the viewer wishes to look at the programming available for the rest of the week in order to select something to record on a VCR (not shown). Actuating the button having the number zero (0) of the keypad 50 while watching a program causes the data view menu selection card, such as 900 of FIG. 9, to appear at the point in the menu-display hierarchy where the last selection was made. Actuating the zero (0) button again moves the viewer towards the broadest data view menu 400 of FIG.
4, and the viewer may stop at any display in order to change time or subject matter categories.
Thus if a viewer were watching This Week in the NBA, and wanted to find a program of interest that is on later, the viewer would first actuate the zero (0) button of keypad 50 which would bring up the display of FIG. 10. Actuating the zero (0) button four more times takes the viewer through displays 900, 800, 700 and 500 of FIGs. 9, 8, 7 and 5 respectively. To get a specific program title, the search button 509 is actuated, which causes FIG. 16 to logically overlay the display 500. FIG.
16 shows a first display 1600 of an interactive alphanumeric selection sequence. First, all alphabetic titles are sorted into groups of five or less. If, for example, Nova was the title of the desired program, the active area would be moved from its initial position (either at the top of the display or at the last group selected) to the group of letters containing the letter N using the up arrow 52 or the down arrow 54 as shown in FIG.
17 followed by actuation of the select (~i) button 64. This sequence would cause FIG.
18 to logically overlay FIG. 17. In FIG. 18, the active area is moved from its initial location at M to the location of N as shown in FIG. 17 followed again by actuation of the select (r) button 64 causes the display 2000 of FIG. 20 to overlay FIG.
19. In display 2000 are single instances of the first two letters, such as NYPD Blue is the only instance of N followed by Y, and multiple instances of the two letter string as denoted by the double right pointing arrows by NO. To continue the search for Nova, the active area is moved to the line containing NO of display 2000 as shown in FIG.
21 using the down arrow 56 and actuating the select (~~) button 64, which causes display 2200 of FIG. 22 to overlay display 2000. Now, Nova is the only instance of a program beginning with NOV, so the entire title Nova appears in FIG. 22. By moving the active area to the line labeled NOVA in display 2200 and actuating the select (~), button 64 causes the display 2300 shown in FIG. 23 to overlay display 2200 with a schedule of times and channels for the program series Nova.
FIG. 23 is a one week schedule that is laid out as a logical three dimensional grid. The days of the week are displayed along one side, in this case vertically along 5 the left side, of the display 2300. Time of day is displayed along a perpendicular side, in this case horizontally across the top, for a twenty-four hour period. Thus, if an episode of Nova is scheduled at 8:00 p.m. on Sunday, a box of contrasting shade will be located in the intersection of the Sunday row and in the 8:00 p.m. column.
The active area 2302 can be moved horizontally by arrows 56, 58 and vertically by arrows 10 52, 54 of keypad 50. If there are multiple occurrences of Nova on a particular night at a particular time, that fact is shown by a box, located at the intersection of the row of that day and the column of that time, having an asterisk (*) located in the box. The asterisk (*) indicates the presence of a logical stack of multiple programs of Nova appearing on competing channels, such as occurs on Wednesday night at 8:00 p.m.
15 To move or navigate through a stack of programs (or stack of episodes of programs with the same name, for example) on a particular day at a particular time slot, the viewer uses the double up arrows button 60 and the double down arrows button 62 for this third degree of freedom. Because the display 2300 may require greater visual discrimination than program title as a matter of course, the frame information window 1904 is larger than usual for display 2300. Further, frame 2304 is annotated with arrows indicating the existence of program episodes above or below the active areas' position in the stack. If the cable 16 has access to 300 plus 'channels' of programming, it is conceivable that some programs, such as Nova will be offered by more than one channel at the same time. As described previously, once the viewer has moved the active area to a particular entry in two or three dimensions and actuates the select (~~) button 64, a selection is made. In this case, the selection sets an alarm to record a specific channel at a specific time at some day in the near future.
Referring back to FIGs. l and 2, overall operation of the apparatus of the invention is described. Program schedule data is supplied via the cable 16.
The program schedule data is either transmitted periodically and the STB 12 receives this program schedule data and stores it in RAM 40. Alternatively, all or part of the program schedule data could be dynamically requested and received by STB 12, which stores it in RAM 40. Program data such as this is commercially available from TVData, Inc. and other similar concerns. The data or records of the program schedule data are in a pre-arranged format, such as Microsoft Access or some other similar database format, to facilitate rapid storage, sorting and retrieval by CPU 34.
Each record of a TV program has its date of appearance, its time of appearance, its title, its channel and/or network, its categorizations, and a textual or visual preview (if any). A
listing of a prototype program that sorts, displays and interactively responds to a viewer's input is shown in the CPU program listing given below. This listing is in Visual Basic programming language of Microsoft Corporation.
The Visual Basic prototype program consists of a collection of forms, each form having its own set of event handlers. In this case, the only significant external events are button actuations because of the remote control interface. A frame form provides the background and information and status bars used by most of the 1 S individual displays. A rolodex form provides the menus. The other forms are mostly schedule or list displays of various kinds, including specialized varieties such as the alphanumeric selection list form.
The control part of the program begins with a procedure which loads all forms and activates the frame and rolodex, i.e. the top display, to begin. Forms hand off control by setting a return code and hiding themselves, thereby activating the form directly beneath (usually the frame). Both the frame form and the rolodex form perform different actions depending on the value of the return code. The frame form's most common action is to activate another form, and much of the control flow of the application is handled by the frame form code. The rolodex form is used to display several different menu hierarchies, most importantly view selection and filter choice.

-----= COMING form code =-__ 'This form displays a TV schedule for several hours of one day.
'This version uses drawing methods for the program shapes ' (as opposed to creating a control shape for each program) ' and "point & shoot' or "visually closest" navigation.
Option Explicit Dim allData(8) As snapshot 'all data within time period Dim filterData(8) As snapshot 'a snapshot for each day in the view Dim NDays As Integer 'number of days in display Dim NSlots As Integer 'number of time slots in display Dim NStation As Integer 'number of stations in display Dim MaxStation As Integer 'total number of stations in database Dim colorField As String 'the database field that determines item color '(the field should contain an integer) Dim inPreview As Integer 'boolean 'should the preview message show?
Const sideGap = .05 'space at beginning and end of program Const topGAP = 4 'space btwn time label and first program shape Dim refDate 'reference date for data time slots Const lblHeight = 40 'height of day and time labels (in 500 scale) Const MINProgWidth = .2 'minimum width of a program shape as fraction of slot Dim slotsPerDay As Integer 'number of slots allowed per day Dim currDay 'number of current day Dim startTime 'start day and time of display Dim TSBegin As Long 'first time slot Dim TSEnd As Long 'last time slot Dim TScurrent As Long 'current time slot Dim rowOffset 'distance between (tops of) rows in the schedule Sub ApplyFilter () 'filter program data, keeping only the programs that match the query in filters(TV) 'also makes sure the number of stations is correct 'and the DB field determining the color is set Dim i As Integer 'counter If InStr(filters(currDomain), 'Station') Then NStation = 10 'note: this probably should be a variable or const, not 10 colorField = "Type' Else NStation = MaxStation colorFi~ld = 'Category' End If For i = 1 To NDays allData(i).Filter = filters(currDomain) ' Set filterData(i) = allData(i).CreateSnapshot() Next i End Sub Sub ChangeSel (d As String) 'Performs the navigation according to the direction parameter Dim current, firstMatch 'database markers Dim success As Integer 'boolean Dim s As Integer 'station ,8 Dim a 'FinishTS (end) Dim TS As Long 'time-slot Dim F As snapshot Dim aDay As Integer Dim dist 'distance Dim best As Long, bestMark 'as database marker 'set info about current place in database current = filterData(currDay).Bookmark Set F = filterData(currDay) s = F("Station") a = F("FinishTS") TS = TScurrent aDay = currDay success = False best = 9999 If d = "Right" Then 'check immediate right F.MoveNext If Not F.EOF Then TS = F("StartTS") 'success = same station and starts right after current program success = (F("Station") = s) And (TS <= a + 1) End If If Not success Then 'check all to right for "closest"
F.MoveFirst While Not F.EOF
If F("FinishTS") > a Then diet = VDistHoriz(s, e, F("Station"), F("StartTS")) If diet <= best Then 'save best so far best = dist success = True bestMark = F.Hookmark End If End If F.MoveNext Wend If success They 'nave to the best one F . Hookcoark = bea tMark TS = F('StartTS") End If End If ElseIf d = "Left" Then 'check immediate left F.MovePrevious If Not F.BOF Then 'success = same station and finishes right before current program success = (F("Station') = s) And (F("FinishTS") >= TS - 1) TS = F("StartTS") End If If Not success Then 'check all to left for "closest"
F.MoveFirst While Not F.EOF
If F("StartTS") < TScurrent Then dist = VDistHoriz(F("Station"), F("FinishTS"), s, TScurrent) If dist < best Then 'keep best so far best = dist success = True bestMark = F.Bookmark End If End If F.MOVeNext Wend If success Then 'move to best one F.Bookmark = bestMark TS = F("StartTS") End If End If ElseIf d = "Down" Then 'check all programs below current one, keeping "closest"
While Not F.EOF
If F("Station") > s Then dist = VDistVert(s, TScurrent, e, F("Station"), F("StartTS"), F("FinishTS")) If dist < best Then best = dist success = True bestMark = F.Bookmark End If End I f F.MoveNext wend If success Then F.Bookmark = bestMark TS = F("StartTS") End If ElseIf d = "Up" Then 'check all psograms above current one, keeping "closest"
While Not F.HOF
If F('Statioa') < s Then diet = VDistVert(s, TScurrent, e, F("Station'), F("StartTS"), F("FinishTS")) ' If dist < best Then best = diet success = True bestMark = F.Bookmark End If End If F.MovePrevious Wend If success Then F.Hookmark = bestMark TS = F(~StartTS") End If End If If success Then 'update variables and display TScurrent = TS
currDay = aDay DisplayProg Else 'restore old position in databasse filterData(currDay).Bookmark = current End If End Sub Sub Displayprog () 'set current program info in info box 'highlight the appropriate program shape in the display Dim F As snapshot Dim msg As String Set F = filterData(currDay) 'set highlight shpProg(0).Visible = False selector. Visible = False Position shpProq(0), F("Start"), F("Finish"), F("Station") CPlace 0, selector, shpProg(0) shpProg(0).Visible = True selector. Visible = True 'message for info box msg = StationString(F("Station")) & " - ~ & F("Title") & ~ "
msg = msg & Format(F("Start"), ~h:mm AM/pM~) msg = msg & ' to " & Format(F("Finish"), "h:mm AM/PM") SetInfo msg, Color(F(colorField) Mod 9) End Sub Sub DoPreview () 'Construct an appropriate preview message and display it Dim msg As String msg ~ "Station: " ~ StationString(filterData(currDay)("Station")) msg = msQ & Chr(13) & "Title: " & filterData(currDay)(~Title") & Ch~(13) msg = msg & CategoryString((filterData(currDay)("Type")), "
(filterData(currDay)("Category~))1 msg = msg & Chr113) & ~Time: ~ & Format(filterData(currDay)("Start"), "mmm d,yy h:mm AM/PM") msg = msg & Chr(13) & " to ~ & Format(filterData(currDay)("Finish"), "h:.~.un AM/ PM" ) 'show popup with preview message popup.Caption = msg popup.Top = lblTime(1).Top + 2 * lblTime(1).Height popup.Left = 2 popup.Width = slotsPerDay - 3 popup.Visible = True inPreview = True End Sub Sub DoSelect () 'set selection info and go to TV
userStation = filterData(currDay)(~Station~) userStart = filterData(currDay)(~Start") returnCode = TOTV
Me. Hide End ss"ub Sub DrawProg (colorIndex, start, finish, station) 'use drawing methods to draw a program shape 'note: form.AutoRedraw should be set to true so the drawings are persistant Dim L, R, t, H 'left, right, top, bottom Dim dayStart Dim edge 'convert a daytime to position in NSlot scale dayStart = startTime + currDay - 1 L = (start - dayStart) ~ 48 R = (finish - dayStart) ~ 48 'clip shapes off at day boundaries I f L < 0 Then L = 0 If R > slotsPerDay Then R = slotsPerDay 'place in correct day, with small gap between programs edge = (currDay - 1) ~ slotsPerDay L = L + edge + sideGap R = R + edge - sideGap 'correct for min width to make sure program will show up If R - L < MINProgWidth Then R = L + MINProgWidth 'set top according to station 'note: this trick will not work if ~favorite stations' are not numbered l..n rowOffset = ((500 - 2 ~ lblHeight - shpProglO).Height) / NStation) t = shpSlot(0).Top + topGAP + (station - 1) * rowOffset H = t + shpProg(0).Haight 'draw the box with the correct color drawwidth = 1 Me.FillStyle = 0 'solid Me.FiIlCoIor = Color(colorIndex Mod 9) Line (L, t)-Step(R - L, H - t), ; H 'the line command'with argument H draws a box End Sub Sub Form_Activate () 'make necessary changes to display, reset info and status bars Dim i As Integer 'counter Static saveFilter As String If saveFilter = filters(currDomain) Then sameFilter = True saveFilter = filters(currDomain) SetStatus 'TV Coming Up: ° & currFilterITV), greyCOLOR
If newUser Then popup.Caption = "Press 'category' to change the kind of programs dipiayed.~
popup.Visible = True newUser = False End I°
if not same filter, redo display If Not sameFilter Then SetInfo "Loading program information... , GREY
shpProg(0).Visible = False selector. Visible = False ApplyFilter MakeDisplay End If 'in every case DisplayProg If inPreview Then DoPreview End Sub Sub Form KeyDown (KeyCode As Integer, Shift As Integer) Select Case KeyCode Case Asc("Q") End Case B_BACK
returnCode = BACK
Me. Hide Case B_HELP
InvokeHelp Case H_PREVZEW
If inPreview Then popup.Visible = False inPreview = False Else inPreview = True End If Case BRIGHT
If Not filterData(currDay).EOF Then ChangeSel ("Right") Case B_LEFT
If Not filt~rData(currDay).EOF Then ChangeSel ("Left") Case B_UP
If Not filtarData(currDay).EOF Then ChanqeSel ("Up') Case B_DOWN ' If Not filterData(currDay).EOF Then ChangeSel ("Down") Case B SELECT
If Not filterData(currDay).EOF Then DoSelect Case B_PAGEDOWN
Case H_PAGEUP
Case H FILTER
returnCode = Filter Me. Hide Case B_0 returnCode = SHORTCUT
Me. Hide End Select wn any case T_f inPreview Then DoPreview Else popup.Visible = False End If End Sub Sub Form_Load () Dim i As Integer Dim t 'as time 'set form colors and fonts Me.BackColor = formCOLOR
shpProg(0).BackColor = BorderColor lblDay(0).BackColor = backgroundCOLOR
IbIAM.BackColor = backgroundCOLOR
lblPM.HackColor = backgroundCOLOR
selector.BorderColor = BorderColor dayLine(0).HorderColor = divideColor lblTime(0).ForeColor = slotCOLOR
shpSlot(0).BorderColor = slotCOLOR
If displayMode = ~TV~ Then lblDay(0).FontSize = smallFONT
lblTime(0).FontSize = smallFONT
lblAM.FontSize = smallFONT
lblPM.FontSize = smallFONT
popup.FontSize = mediumFONT
Else lblDay(0).FontSize = largeFONT
lblTime(0).FontSize = largeFONT
lblAM.FontSize = largeFONT
lblPM.FontSize = largeFONT
popup.FontSize = largeFONT
End If 'set scale and size objects SizeAForm Me, DispTop, DispHeight, DispLeft, DispWidth Me. Scale (0, 0)-(500, 500) SizeAControl lblDay(0), 0, lblHeight, 0, 500 'note: the 1NI/PM labels would be placed when time is filtered SizeAControl lblPM, 0, lblHeight; 0, 30 SizeAControl lblAM, 0, lblHeight, 500 - 30, 30 SizeAControl lblTimelO), lblHeight, lblHeight, 0, 50 SizeAControl shpSlot(0), 2 ~ lblHeight f .5 ~ topGAP, 500 - 2 ~ lblHeight, 0, SizeAControl popup, 250, 200, 250, 200 selector.BorderWidth = 1 dayLine(0).Y1 = 0 dayLine(0).Y2 = 500 'initialize variables startTime = fakeToday + fakeTime 'this would be set at activate to current ::a':~
hour NDays = 1 slotsPerDay = 24 NSlots = NDays ' slotsPerDay sameFilter = False sameView = False inPreview = False 'set form scale and place permantent stuff (day and time labels) Me.ScaleWidth = NSlots Load lblDay(11 SizeAControl lblDay(1), 0, lblHeight, 0, slotsPerDay lblDay(ll.Caption = DayString(startTime, "long") lblDay(ll.Visible = True lblTimelO).Width = 1 For i = 1 To slotsPerDay Load lblTime(i) lblTime(i).Move i - 1 t = DateAdd("n~, 30 ' (i - 1), startTime) 'add 30 minute increments lblTime(i).Caption = TimeLabel(t) lblTime(i).Visible = True lblTime(i).ZOrder Next i InputData Form_Activate sameView = True End Sub Sub InputData () 'part of form_load 'opens the database and creates allData snapshots Dim DB As database Dim RefSnap As snapshot Set DB = OpenDatabaselTVDB) 'get reference date and number of stations Set RefSnap = DB.CreateSnapshot("Reference~) RefSnap.PindFirst 'Name = 'Date'"
refDate = DtteValue(RefSnap("Data~)) RefSnap.Fizsd>lirst 'Name = 'NStations'~
MnxStatioa r Val(RefSnapl'Data~)) ' .
Set allData(0) = DB.CreateSnapshot("Programs~) 'assumes data already sorted 'filter for particular time period, would happen at each half-hour change TSBegin = Abs(DateDiff(~n~, startTime, refDate) \ 30) TSEnd = TSBegin + slotsPerDay - 1 'check that slotsPerDay is set allData(0).Filter = Overlap(TSBegin, TSEnd) Set allData(11 = allDatalO).CreateSnapshot() Set allData(0) = Nothing 'won't be needing everything End Sub Sub :~akeDisplay () 'create the display of programs from the data Dim i As Integer 'counter Dim d As Integer 'day Dim F As snapshot 'convenience If Not sameView Then 'would need to reset captions for times and day End If 'place program shapes Cls 'clear the form of previous drawings DoEvents 'make it so For d = 1 To NDays currDay = d 'draw lines to separate time slots For i = 0 To slotsPerDay drawwidth = 4 Line (i, shpSlot(0).Top)-(i, 500), slotCOLOR
Next i 'draw program shape for each program in data Set F = filterData(d) If Not F.EOF Then F.MoveFirst Do While Not F.EOF
DrawProg F(colorField), F("Start"), F("Finish'), F("Station") F.MoveNext Loop F.MoveFirst End If Next d 'initialize stuff TScurrent = TSHegin currDay = 1 shpProg(0).2Order selector.ZOrder Set F = filterData(currDay) 'find a program to start on Do While TScurrent <= TSEnd F.Find~rst Overlap(TScurrent, TScurrent) If Not P.No~latch Thin DiiplayProg Exit Do End If TScurrent = TScurrent + 1 Loop 'make sure TScurrent is in range If TScurrent > TSEnd Then TScurrent = TSHegin End Sub Sub Position (shape As Control, start, finish, station) 'position a program shape control Dim relativeL, relativeW, dayStart Dim edge 'convert a daytime to position in NSlot scale dayStart = startTime + currDay - 1 relativeL = (start - dayStart) * 48 relativeW = (finish - dayStart) * 48 - relativeL
'clip shapes off at day boundaries If relativeL < 0 Then relativeW = relativeW + relativeL
relativeL = 0 End If If relativeW + relativeL > slotsPerDay Then relativeW = slotsPerDay -relativeL
'set left and width of shape. leaving small gap between programs edge = (currDay - 1) * slotsPerDay shape. Left = relativeL + edge + sideGap shape. Width = relativeW - 2 * sideGap 'set minimum width so program is visible If shape. Width < MINProgWidth Then shape. Width = MINProgWidth 'set top according to station 'note: this will not work if "favorite" stations are not numbered l..n rowOffset = ((500 - 2 * lblHeight - shpProg(0).Height) / NStation) shape. Top = shpSlot(0).Top + topGAP + (station - 1) * rowOffset End Sub Function VDistHoriz (stationl, finish, station2, start) 'computes a value for the "visual" left-right distance between two programs 'requires that the earlier program come first 'note: needs refinement, does not work satisfactorily, especially with crowded displays Dim deltaR, deltaT 'change in row and time Dim rowl, row2 yowl = stationl row2 = station2 'note: row calculations could be more complicated if stations not numbered l..n deltaR = Abs(rowl - row2) * (100 / NStation) deltaT = (start - finish) * (100 / slotsPerDay) 'penalize programs that are more up&down than to side If deltaT <= 1 Then deltaT = (finish + 3 - start) * (100 / slotsPerDay>
If deltaT < 1 Then deltsT = 100 / slotsPerDay'don't allow zero vDistxoriz = deltaR + deltaT
End Function Function VDistVert (stationl, startl, finishl, station2-, start2, finish2) .
'computes a value for the 'visual" up-down distance between two programs 'note: needs refinement Dim deltaR, deltaT 'change in row and time Dim rowl, row2 yowl = stationl row2 = station2 'note: row calculations could be more complicated if stations not numbered deltaR = Abs(rowl - row2) / NStation If startl > finish2 Then deltaT = Abs(startl - finish2) ElseIf start2 > finishl Then deltaT = Abs(start2 - finishl) Else deltaT = 0 End If VDistVert = deltaR ~ 2 * deltaT
End Function -----= FRAME form code =-----'This form owns the standard info and status bars and allows ' transfer of control from form to form.
Option Explicit Sub Form_Activate () 'decides Which other form should show in its display area Select Case returnCode Case SHOWVIEW
views(currDomain).Show Case PICK
frmSelect.Show Case TOTV
frmTV.Show Case LASTVIEW
sameFilter = True views(currDomain).Show Case STARTUP
'do nothing--don't want rolodex to show yet Case Else frmDex.Show End Select End Sub Sub Form_KeyDown (KeyCode As Integer, Shift As Integer) If KeyCode = Asc("Q") Then End End If End Sub Sub Foxia_Load ( ) 'set colors and fonts Me.HackColor = formCOLOR
sspInfo.FontSiz~ = mediumFONT
sspStatus.PontSize = mediumFONT
'use builtin object to size background ScrWidth = Screen. Width ScrHeight = Screen. Height If displayMode = "mini" Then 'for taking screen prints ScrHeight = ScrHeight * .54 ScrWidth = ScrWidth ' .712 displayMode = "TV"
Else 'resize to fit TV
ScrHeight = ScrHeight ' .83 End I f 'set form to fill screen frmFrame.Top = 0 fzmFrame.Height = ScrHeight frmFrame.Left = 0 frmFrame.Width = Scrwidth 'info line at top of screen sspInfo.Visible = True 'status line at bottom of screen sspStatus.Visible = True 'define available display area DispTop = sspInfo.Height + 1.5 DispHeight = frmFrame.Height - (sspStatus.Height + 1.5) - DispTop DispLeft = 0 DispWidth = frmFrame.Width End Sub Sub SetupStatus () End Sub -----= LIST form code =-----'This code is used for all three list forms (TV, Movies, Shopping) Option Explicit Dim DB As database 'full database with indexes Dim BlinkControl As Control 'set to blinking object (currently none) Dim itemSelected As Integer 'from 1 to MAXDISPLAY
Dim locSelected As Integer 'from 1 to MAXLOC
Dim inPreview As Integer 'boolean Dim captionField As String 'the database field that is used for display Dim startTime 'the start time for the TV list Dim TS As Long 'the time slot for the TV list Dim rowOffset 'difference between tops of two consecutive reduced items Dim browsing As String 'type of current shopping list Dim colorField As String 'field which determines color (should be of type integer) 'display parameters Const MAXDISPLAY ~ 6 'Number of items in close up Dim MAXITFX As Integer 'Number of items in whole list Dim MRXLOC As Integer 'Number of locator positions Dim whichrItem(I~ISPLAY) As Integer 'which rltems are in the current display 'define sizes of locator and selector Const GAP = 10 'space around lists Const EXTRA = 70 'room for longer programs Const reducedEXTRA = 20 'room for longer programs in reduced rep Const T = 50 'reduced list Const H = 1000 - 2 ' T
Const locL = 30 'display area 'onst local = 100 ~onst dispL = local + 2 ' locL
Const dispW = 1000 - dispL - locL

'database snapshots Dim aliData As snapshot Dim itemData As snapshot Dim storeData As snapshot Dim deptData As snapshot Dim stuffData As snapshot Dim filterData As snapshot Dim marker(1000) As String 'bookmarks of each MAXDISPLAY items Dim locStart(1000) ~rltem index for start of locator Sub ApplyFilter () 'filter the data according to user choice Dim sortString As String If Me Is TVlist Then captionField = "Title"
sortString = ""
colorField = "Type"
ElseIf Me Zs MOVlist Then If sameView Then 'keep allData as it is Else 'reset allData to all movies LoadData allData.Filter = ViewFilter Set allData = allData.CreateSnapshot() End If captionField = "Title"
sortString = "Title"
colorField = ~Type"
ElseIf Me Is SHOplist Then 'note: This would all be done totally differently. Don't bother ' understanding it, just rewrite it.
Select Case filters(currDomain>
Case ~store~
browsing = "store~
Set allData = storeData captionField = "name"
filters(currDomain) _ ~~
sortStrin9 ~ ~name~
colorField = ~~
Case ~dept~
browinQ = ~dept~
deptData..FindPir~t "name-= '" & userString & "'~
userStrinQ = ~~ 'fix--this is cheating, I shouldn't use userString If deptData.NoMatch Then Set allData = deptData filters(currDomain) _ ""
Else browsing = "stuff"
filters(currDomain) _ "(dept code] _ " & deptData("code") Set allData = stuffData End If captionField = "name"
sortString = "name"
colorField = "~
Case "item' browsing = "item"
Set allData = itemData captionField = "name"
colorField = ~"
filters(currDomain) _ ~name like "' & userString & "~'~
sortString = ~name"
Case Else browsing = "stuff"
captionField = ~name"
sortString = "name"
colorField = "(item code]"
Set allData = stuffData End Select End If allData.Filter = filters(currDomain) If filters(currDomain) _ "" Then allData.FindFirst "Not ~ & captionField & " _ " "
Else allData.FindFirst allData.Filter End If If allData.NoMatch Then MAXITEM = 0 Else MAXITEM = 1 'temporary setting just to make sure it isn't 0 Set filterData = allData.CreateSnapshot() filterData.Sort = sortString Set filterData = filterData.CreateSnapshot() End If End Sub Sub HlinkStart (C As Control, vis) Set HlinkControl = C
BlinkControl.Visible = vis tmrHlink.Enabled = True End Sub Sub BlinkStop (vis) tmrBlink.Enabl~d = Falser If HlinkControl Zs Nothing Then 'do nothing Else HlinkControl.Visible = True End If Set BlinkControl = Nothing End Sub Sub ChangeLoc (direct As String) 'page up or down with the locator Select Case direct Case "Up"
If locSelected > 1 Then locSelected = locselected - 1 RedoDisplay End Zf Case "Down"
If locSelected < MAXLOC Then locSelected = locSelected + 1 RedoDisplay End If End Select End Sub Sub ChangeSel (direct As String) 'navigate up or down one selection Select Case direct Case "Up' If itemSelected > 1 Then 'move up within current display itemselected = itemSelected - 1 selector.Top = itemBox(itemSelected).Top - GAP
rItem(0).Top = rItem(whichrItem(itemSelected)).Top rItem(0).Left = locL - GAP
rItem(0).Width = local + 2 * GAP
SetItemInfo ElseIf locSelected > 1 Then 'display previous section of list itemSelected = MAXDISPLAY
locSelected = locSelected - 1 RedoDisplay End If Case "Down' If itemSelected < MAXDISPLAY Then 'move down within current display 'do not move to select an empty item If (locSelected - 1) * MAXDISPLAY + itemSelected < MAXITEM Then itemSelected = itemSelected + 1 selector.Top = item8ox(itemSelected).Top - GAP
rItem(0).Top = rItem(whichrItem(itemSelected)).Top rIt~a(0).Left = locL - GAP
rIt~(0).Width = local + 2 * GAP
SetIt~Info End. i t EIseIf locSelected < MAXLOC Then 'dfsplay next section of-list ' .
itemSelected = 1 locSelected = locSelected + 1 RedoDisplay End If End Select rItemlO).Visible = True End Sub Sub DoPreview () 'show preview window and preview locator Dim i As Integer 'counter inPreview = True 'hide other stuff locator. Visible = False selector. Visible = False For i = 1 To :HAxDISPLAY
itemHox(i).Visible = False leftArrow(i).Visible = False rightArrow(i).Visible = False Next i previewWin.Caption = "Getting preview...
previewWin.ZOrder previewWin.Visible = True ShowPreview End Sub Sub DoSelect () 'act on the current selected item If Me Is TVlist Then 'set selection data and go to TV

userStation = filterData("Station") userStart = filterData("Start") returnCode = TOTV

Me. Hide ElseIf Me Is MOVlist Then 'display 'order movie" message sameFilter = True TellUser "You would be asked to confirm order of " &
your filterData("Title") ElseIf Me Is SHOPlist Then Select Case browsing Case "stuff' sameFilter = True TellUser 'You would be asked to confirm your order of " &

filterData("name') Case 'store' filt~rs(currDomain) _ '(store code] _ & filterData('code") "

For~lctivate Case 'item' filterslcurrDomain) _ "(item code] _ filterData("code") " &

Fozm Activate Case 'dept"

filters(currDomain) _ "(dept codel = filterData("code") " &

Form_Activate End Select End If cnd Sub Sub EndPreview () 'go back to regular list operation Dim i As integer 'counter previewWin.Visible = False inPreview = False locator.Visible = True selector. Visible = True previewWin.Top = displayList.Top RedoDisplay End Sub Sub Form_Activate () Dim i As Integer 'counter Dim section As Integer 'count the number of locator locations Dim NVisible As Integer 'tally the visible shapes in a section Dim msg As String Static saveFilter As String Static saveView As String 'check new filters against current filters If Not sameView Then sameView = (saveView = viewFilter) saveView = viewFilter If Not sameFilter Then sameFilter = (saveFilter = filters(currDomain)) saveFilter = filters(currDomain) SetStatus currView(currDomain) & currFilter(currDomain), greyCOLOR
If sameFilter And sameView Then 'keep everything the same as last time If newUser And Not Me Is SHOPlist Then popup.Caption = "To change the category shown, press the 'Category' button.' popup.Visible = True newUser = False End If RedoDisplay Else 'clean up display SetInfo 'Selecting data, please wait...~, GREY
I f MP1XITE!! = 0 Then pr~rlearWin.Caption = ~ ~
prev'l~wWin.Visible = False En8 If DoEvents If inPreview Then EndPreview For i = 1 To MAXDISPLAY
itemBox(i).Caption = ~"
Next i For i = 1 To MAXITEM
Unload rItem(i) Next i 'filter new data ApplyFilter If MAXITEM = 0 Then 'give "no matches" msg locator. Visible = False rItem(0).Visible = False For i = 1 To MAXDISPLAY
MAXITEM = 0 itemBox(i).Visible = False leftArrow(i).Visible = False rightArrow(i).Visible = False Next i previewWin.Caption = "No matches were found" & Chr(13) previewWin.Caption = previewWin.Caption & "Press 'Category' to change the selection."
previewwin.ZOrder previewWin.Visible = True ' itemSelected = 0 locselected = 0 Else 'redo list display filterData.MoveLast MAXITEM = filterData.RecordCount 'set distance between items rowOffset = (H - rItem(0).Height) / MAXITEM
If rowOffset > rItem(0).Height + GAP Then rowOffset = rItem(0).Height GAP 'max distance rItem(0).Visible = False rltem(0).Top = T
rItem(0).Left = locL + reducedEXTRA
rItem(0).Width = local - 2 * reducedEXTRA
rItem(0).HackColor = itemCOLOR
filterData.MoveFirst 'size and place the item shapes 'and set section bookmarks section = 0 'number of locator locations NVisible = MAXDISPLAY 'so first section will be marked correctly For i = 1 To MAXITEM
Load rItem(i) If colorPield <> ~~ Then rItam(i).BackColor = Color(Val(filterData(colorField)) Mod 9) End It NVisible ~ NVisible + 1 rttem(i).Top = T + (i - 1> * rowOffset ' If NVisibls > MAXDISPLAY Then 'begin a new locator location section = section + 1 locStart(section) = i marker(section) = filterData.Bookmark NVisible = 1 End If If Me Is TVli~t Then 'set length of reduced item If filterData("StartTS") < TS Then rItem(i).Left = rItem(i).Left - reducedEXTRA
rItem(i).Width = rItem(i).Width + reducedEXTRA
End If If filterData("FinishTS") > TS Then rItem(i).Width = rItem(i).Width + reducedEXTF,a End If End If rItem(i).ZOrder rItem(i).Visible = True filterData.MoveNext Next i MAXLOC = section locStart(section + 1) = MAXITEM + 1 'set length of minselector (use rItem(0>) rItem(0).Left = locL - GAP
rItem(0).Width = local + 2 " GAP
'initialize selector and locator itemSelected = 1 locSelected = 1 locator. Visible = True rItem(0).BackColor = highlightCOLOR
'set the captions in the itemBoxes RedoDisplay End If End If End Sub Sub Fob KeyDown (KeyCode As Integer, Shift As Integer) popup.Visible = False Select Case KeyCode Case Asc(~Q") End Case B_BACK
If Me Is SHOPlist And browsing 3 "item~ Then 'not exactly what we want returnCode = ALPHA
Me. Hide Else returnCode ~ HACK
Me.Eide End If Case B_HELp Invoke8elp Case B_PREVIEW
If inPreview Then EndPreview Else DoPreview End I f Case B_SELECT
If MAXITEM > 0 Then DoSelect Case B_UP
If 'KAXZTEM > 0 Then ChangeSel ("Up") Case H_DOwf1 If MAXITEM > 0 Then ChangeSel ("Down") Case H_RIGHT
If Me Is TVlist Then returnCode = COMING
Me. Hide End If Case B_LEFT
Case B_PAGEUP
if inPreview Then 'scroll preview If previewWin.Top < displayList.Top Then 'move preview window down a screen previewWin.Top = previewWin.Top + displayList.Height End If Else If MAXITEM > 0 Then ChangeLoc ("Up") End If Case 8_PAGEDOWN
If inPreview Then 'scroll preview If previewWin.Top + previewWin.Height > displayList.Top +
displayList.Height Then 'move preview window up a screen previewWin.Top = previewWin.Top - displayList.Height End If Else If MAXIT~M > 0 Then ChangeLoc ("Down") End If Case H_FILTER
If Not Me Is SHOPlist Then returnCode = Filter Me. Hide End If Case B_0 returnCode = SHORTCUT
Me. Hide End Select End Sub Sub Fob Load () Dim i As Integer 'counter Dim itemRoom 'set colors and fonts itemBox(0).FontSize = largeFONT
leftArrow(0).FontSize = largeFONT
rightArrow(0).FontSize = largeFONT
If displayMode = "PC" Then popup.FontSize = largeFONT
previewWin.FontSize = largeFONT
Else previewWin.FontSize = mediumFONT
popup.FontSize = smallFONT
End If rItem(0).BackColor = itemCOLOR
selector.FillColor = highlightCOLOR
displayList.FillColor = backgroundCOLOR
previewWin.BackColor = backgroundCOLOR
locator.FillColor = backgroundCOLOR
itemHox(0).BackColor = itemCOLOR
leftArrow(0).HackColor = itemCOLOR
rightArrow(0).HackColor = itemCOLOR
shpSlot.HorderColor = slotCOLOR
'size the objects to the screen SizeAForm Me, DispTop, DispHeight, DispLeft, DispWidth Me. Scale (0, 0)-(1000, 1000) SizeAControl locator, T - GAP, H + GAP, locL - GAP, local + 2 * GAP
SizeAControl shpSlot, T, H, locL + reducedEXTRA, local - 2 * reducedEXTRA
SizeAControl displayList, T - GAP, H + GAP, dispL, dispW
SizeAControl popup, dispW / 2, 4 * local, dispW / 2, 4 * local CPlace 1, previewWin, displayList locator.ZOrder shpSlot.ZOrder rItem(0).ZOrder itemRoom = H / MAXDISPLAY
SizeAControl itemHox(0), T + (.5 * GAP), itemRoom - GAP, dispL + EXTRA, dispW -2 * EXTRA
SizeAControl patch(0), 50, (6.8 * itemHox(0).Height), (12.3' *
itemBox(0).Width), (~ ' item8ox(0).Height) If displayMode = ~TV~ Then patch(0).Left = 8.08 * itemBox(0).Width patch(0).Height = 3.7 * itemHox(0).Height End If SizeAControl leftArrow(0), T + (.5 * GAP), itemRoom - GAP, dispL, EXTRA
SizeAControl rightArrow(0), T + (.5 * GAP), itemRoom - GAP, dispL + dispW -SizeAControl selector, T, itemRoom + GAP, dispL, dispW
selector.ZOrder For i = 1 To MAXDISPLAY
'Load item8ox(i) 'Now created at design time--fixed number (6) item8ox(i).Visible = Palse CCopy itemBox(0), item8ox(i) patch(i).Visible = False CPlace 0, patchli), patch(0) it~8ox(1).Top = it~8ox(0).Top + (i - 1) * itemRoom Load lettllrrow ( i ) . ' leftArrow(i).Top = itemeox(i).Top Load rightArrow(i) rightArrowli).Top = item8ox(i).Top Next i 'load the list data and set up the display sameFilter = False sameView = False LoadData Form_Activate sameFilter = True End Sub F~.inction ItemString () As String 'set msg to be used in info bar Dim msg As String If Me Is TVlist Then msg = Format(filterData("Title")) & " on "
msg = msg & StationString(filterData("Station")) & ", "
msg = msg & TimeString(filterData("Start")) & " to "
msg = msg & TimeString(filterData("Finish")) ElseIf Me Is MOVlist Then msg = Format(filterData("Title")) msg = msg & ", " & Format(filterData("Year"1) ElseIf Me Is SHOPlist Then Select Case browsing Case "stuff"
msg = Format(filterData("name")) & " - $" & Forrnat(filterData("price")) End Select End If ItemString = msg End Function Sub LoadData () Dim refSnap As snapshot Dim refDate 'load in the database as a snapshot If Me Is TVlist Then startTime = fakeToday + fakeTime Set DB = OpenDatabase(TVDB) Set refSnap = DB.CreateSnapshot("Reference") refSnap.FindFirst "Name = 'Date'"
refDate = DateValuelrefSnap("Data')) Set allData = DB.CreateSnapshot("Programs') 'filter for time would really happen at activate TS = (startTime - refDate) ' 48 allData.Filter = Overlap(TS, TS) Set allBata = allData.CreateSnapshot() ElseIf Me I!. 1lWlist Thea Set DB ~ OplsDatabase(MVDB) Set allData = DH.CreateSnapshot("Movies') , ElseIf M! I~= SliOPlist Then Set DH = OpenDatabaselSPDB) Set itemData = DH.CreateSnapshot("Items") Set storeData = DB.CreateSnapshot("Stores") Set deptData = DH.CreateSnapshot("Departments") Set stuffData = DH.CreateSnapshot("Stuff") End If end Sub Sub RedoDisplay () 'set the captions in the itemHoxes to correspond to items in locator ' reposition locator and selector, update info box Dim last As Integer Dim i As Integer Dim Index As Integer 'index of rItem If MAXITEM = 0 Then Exit Sub 'figure first item location filterData.Bookmark = marker(locSelected) Index = locStart(locSelected) For i = 1 To MAXDISpLAy If filterData.EOF Then 'hide empty itemHox item8ox(i).Caption = ""
item8ox(i).Visible = False leftArrow(i).Visible = False rightArrow(i).Visible = False Else whichrItem(i) = Index 'so we can highlight the correct rItem (reduced item) If colorField <> ~" Then item8ox(i).BackColor =
Color(filterDatalcolorField) Mod 9) itemHox(i).Caption = filterData(captionField) If Not inPreview Then itemHoxli).Visible = True If Me Is TVlist And Not inPreview Then 'show arrows to reflect program length If filterData("StartTS") < TS Then leftArrow(i).BackColor = item8ox(i).BackColor leftArrow(i).Visible = True Else leftArrow(i).Visible = False End If If filterData("FinishTS") > TS Then rightArrow(i).BackColor = itemBox(i).BackColor ' rightArrow(i).Visible = True Else rightArrow(i).Visible = False End If 'show color patch for subcategory patch(il.PfllColor = Color(filterData("Category") Mod 9) patch(i).Visibla = True End t! ' last = i Index = Index ~ 1 filterData.MoveNext End If Next i 'Do not allow blank to be selected If itemSelected > last Then itemSelected = last End If 'fix the rest of the display displayList.Height = H + 2 * GAP - (H / MAXDISPLAY * (MAXDISPLAY - ~as~l~
'display list shrinks when fewer than MAXDISPLAY items displayed selector. Top = itemHox(itemSelected).Top - GAP 'behind current itemBox locator.Top = T + rowOffset * (locStart(locSelected) - 1) locator. Height = last * rowOffset + rItem(0).Height - rowOffset 'height shrinks when displayList shrinks rItem(0).T.op = rItem(whichrItem(itemSelected)I.Top SetItemInfo End Sub Sub SetItemlnfo () 'display current item's info in info bar Dim i As Integer '= of records away from bookmark we need to go Dim msg As String 'find selected record filterData.Bookmark = marker(locSelected) i = itemSelected While (i > 1) filterData.MoveNext i = i - 1 Wend 'Put info in the info bar SetInfo ItemString(), (itemBox(itemSelected).HackColor) 'update preview window if needed If inPreview Then ShowPreview End Sub Sub ShowPreview () 'Display the video, still, or text preview ' of the item selected Dim msg As String If Me Is MOVlist Then msg = filterData("Plot") ElseIf Me Is TVlist Then msg = filterData(captionField) & Chr(13) msg = msg & StationString(filterData("Station')) & Chr(13) msg = msg ~ Cat~goryString((filterData("Type~)), (filterData("Category"))) Else msg = 'This would b~ a video, still, or textual preview of '~
msg = msg 4 filterData(captionField) ~g = ~~ ~ .,.
End If previewWin.Viaible = Fala~ ~ _ previewWin.Caption = msg CPlace 0, previewWin, displayList previewWin.Visible = True End Sub Sub tmrBlink_Timer () BlinkControl.Visible = Not BlinkControl.Visible End Sub -----= MESSAGE form code =-----':his form is used by Help and some lists to display information, ' temporarily covering up the current form.
Option Explicit Const GAP = 500 Sub Forn Activate 1 ) textArea.Caption = userMsg End Sub Sub Form_KeyDown (KeyCode As Integer, Shift As Integer) Select Case KeyCode Case Else returnCode = KeyCode Me. Hide End Select End Sub Sub Form_Load () 'set colors and fonts Me.HackColor = itemCOLOR
textArea.BackColor = itemCOLOR
textArea.FontSize = largeFONT
'set sizes SizeAForm Me, DispTop, DispHeight, DispLeft, DispWidth SizeAControl textArea, GAP, DispHeight - 2 * GAP, GAP, DispWidth - 2 * GAP
'initialize textArea.Caption =
End Sub -----= ROLODEX form code =-----'This form shows the main menu and filter menus.
'Unimplemented: Have filter button color correspond to type/category color Option Explicit Dim BlinkControl As Control 'pointer to blinking highlight Dim parent As Integer 'number of parent card Dim current As Integer 'number of current card 'special cards 'note: these must be updated each time the number of filter cards in the card datafile changes Const filterCARD ~ 1 'TV filter menu Const mfilterCARD = 68 'movie filter menu ~ - .
Const homeCARD = 96 'main menu Dim lastCard As Integer 'holds number of regular card while in filter Const MAXTITLE = 3 'WARNING: A change in MAXTITLE requires a change in code for LoadGraphics Const CARDSHIFT = 2.5 'for card display--amount change in card placement Const MAXROWS = 3 'for card display--number of rows of buttons Const MAXCOLS = 3 'for card display--number of columns of buttons on a card Const MAXCARD = 9 'max number of cards that can be displayed on screen Const MAXITEM = 9 'max number of buttons on a card 'action codes: tell what action to take for a button choice 'actions greater than actNEXT need additional input Const actCOMING = 2 Const actNOW = 3 Const actNEXT = 5 Const actALPHASHOP = 6 Const actFILTER = 7 Const actALPHATV = 8 Const actALPHAMOV = 9 Const actDOMAIN = 10 Const actLATER = 11 Const actWEEK = 12 Const actWKEND = 13 Const actSCHED = 14 Const shortTWIEW = 30 Const shortMWIEW = 31 Const shortSPVIEW = 32 Const shortTVNOW = 35 Const shortTVFAV = 36 Const shortMVFAV = 37 Const shortSPFAV = 38 Const actMOVIE = 40 Const actSTORE = 50 Const actDEPT = 52 Const actMORE = 60 Const actNONE = 65 'for development only Const actKEYS = 71 Const actTABS = 72 Sub Animate (direct As String, cardNo As Integer) 'Animate opening another card, backing up, or selecting a button Dim index As Integer Dim depth As Integer DoEvents 'do not interrupt another animation depth = Cards(currentl.level Select Case direct Case "Back' It Cardstcurrent).parent > 0 Then .
CCop~ sspCard(depth), sspCont sspCoat.Visible = True Zoom 10, sapCont, sspItem(Cards(current).self) DisplayCard (Cards(current).parent) sspCont.Visible = False End If Case "Next"
index = Cardslcurrent).selected If index > 0 Then CCopy sspItemlindexl, sspCont sspCont.Visible = True sspCont.BackColor = sspCard(0).BackCoior Zoom 10, sspCont, sspCardldepth) DisplayCard cardNo sspCont.Visible = False End If Case "Select' index = Cards(current).selected If index > 0 Then CCopy sspItem(index), sspCont sspCont.Visible = True sspCont.HackColor = sspCard(0).BackColor SizeAControl sspCard(0), 0, 500, 0, 500 'size of whole form Zoom 10, sspCont, sspCard(0) End If End Select End Sub Sub BlinkStart (C As Control, vis) 'enable blinking object Set BlinkControl = C
BlinkControl.Visible = vis tmrHlink.~nabled = True End Sub Sub BlinkStop (vis) 'stop blinking object, leaving visiblility as vis tmrBlink.Enabled = False If BlinkControl Is Nothing Then 'do nothing Else BlinkControl.Visible = vis End If Set HlinkControl = Nothing End Sub Sub HuttonAction () 'perform action associated with selected button Dim button As Integer Dim cardNo As Integer Dim msg As String button = Cards(current).selected 'item number of selected button on parent card cardNo = Card~(current).item(button) 'card number of selected button If button < I Then Exit Sub Select Case CardslcardNO).actionCode Case actNONE
'an inactive button SetInfo "This option is not yet available.", greyCOLOR
Case actNEXT
'display the next card Animate 'Next', Cards(current).item(button) Case actDOMAIN
'change current domain before going to the next card currDomain = Val(Cards(cardNo).actionData) SetStatus Cards(cardNo).name, greyCOLOR
Animate 'Next", Cards(current).item(button) Case actMORE
'show more choices on same topic (currently same as actNEXT) Animate "Next", Cards(current).item(button) Case actCOMING
'show schedule of what's coming up on TV
Animate "Select~, 0 sameFilter = False Set views(currDomain) = frmComing returnCode = SHOWVIEW
Me. Hide Case actNOW
'show what's on TV now currView(currDomain) _ ~TV 6:30pm : ~ 'obviously, this would be the current time Animate "Select", 0 sameFilter = False sameView = True Set views(currDomain) = listFrm(currDomain) returnCode = SHOWVIEW
Me. Hide Case actLATER
'show what's on TV for a later day 'curzently non-functional 'Animate 'Select", 0 'sameFilter = False 'Set views(currDomain) = frmFriday returnCode = SHOWVIEW
Me. Hide Case actWEER
'show TV schedule for weekdays Animate "Select", 0 sameFilter = False Set views(currDomain) = frmWkday returnCode = SHOWVIEW
Me. Hide Case actWREND
'show TV schedule for weekend 'currently non-functional 'Animate 'Select', 0 'sameFilt~r = False 'Set viewsjcurrDomain) = frmWkend returnCoda = SHOWMEN
Me.Hide Case actSCHED
'show TV schedule 'currently non-functional 'Animate 'Select", 0 'sameFilter = False 'Set views(currDomain) = frmSched returnCode = SHOWVIEW
Me. Hide Case actALPHASHOP
'get a string from user, search for items beginning with user string 'note: this would probably be very different Animate ~Select~, 0 SetStatus 'Shopping, ~ & Cards(cardNo).name, greyCOLOR
msg = Cards(cardNo).actionData SetInfo msg, YELLOW
Wait frmAlpha If returnCode <> BACK And userString <> "" Then sameFilter = False filters(currDomain) _ "item"
Set views(currDomain) = listFrm(currDomain) returnCode = SHOWVIEW
Me. Hide End If Case actALPHATV
'allow user to select a show title Animate "Select~, 0 SetStatus ~TV, " & Cards(cardNo).name, greyCOLOR
returnCode = PICK
Me. Hide Case actALPHAMOV
'This is not hooked up to work, but would probably be ' a lot like actALPHTV
'Animate 'Select', 0 Case actFILTER
'send a new filter to a TV view filters(currDomain) = Cards(cardNo).actionData currFilter(currDomain) = Cards(cardNo).infotext sameFilter = False sameView = True returnCode = SHOWVIEW
Me. Hide Case actMOVIE
'show a movie list Animate 'Select~. 0 If current > homeCARD Then 'the view (a filter) is changing currView(currDomain) = Cards(cardNo).infotext viewFilter = Cards(cardNo).actionData sameVie~r = False sameFilter = False Else -'the category is changing currF~ter(currDomain) _ ~~. ~ ~ Cards(cardNol-.infotext - .
filtera(currDomain) = Cards(cardNo).actionData sameView = True sameFilter = False End If Set views(currDomain) = listFrm(currDomain) returnCode = SHOWVIEW
Me. Hide Case actSTORE
'show a list of stores Animate "Select", 0 SetInfo "Choose a store:", TURQUOISE
SetStatus 'Shopping", greyCOLOR
sameFilter = False filters(currDomain) _ "store"
Set views(currDomain) = listFrm(currDomain) returnCode = SHOWVIEW
Me. Hide Case actDEPT
'show products from a department Animate "Select", 0 SetStatus "Shopping, " & Cards(cardNo).infotext, greyCOLOR
sameFilter = False filters(currDomain) _ "dept"
userString = Cards(cardNol.name Set views(currDomain) = listFrm(currDomain) returnCode = SHOWVIEW
Me. Hide Case shortTWIEW
'Show last TV schedule or list Animate 'Select', 0 currDomain = TV
If views(currDomain) Is Nothing Then Set views(currDomain) = frmComing End I f sameFilter = True returnCode = SHOWVIEW
Me. Hide Case shortMWIEW
'Show lat movie list Animate "Select', 0 currDomain = MOVIE
If views(currDomain) Is Nothing Then Set views(currDomain) = listFrm(currDomain) End If sameFilter = True returnCode = SHOWVIEW
Me. Hide Case shortSPVIEW
'Show last shopping view Animate 'Select'. 0 currDomain = SHOP
If views(currDomain) Is Nothing Then Set views(currDomsin) = listFrm(currDomainl End If ~ .
sameFilter = True returnCode = SHOWVIEW
Me. Hide Case shortTVNOW
'show all TV shows on now currFilter(currDomain) _ "All Categories' currView(currDomain) _ "TV 6:30pm : " 'obviously, this would be the current time Animate "Select', 0 currDomain = TV
filters(currDomain) - °"
sameFilter = False sameView = True Set views(currDomain) = listFrm(currDomain) returnCode = SHOWVIEW
Me. Hide Case actKEYS
'Only for development, wouldn't stay SetKeys Cards(cardNo).actionData SetStatus Cards(cardNo).infotext, itemCOLOR
current = homeCARD
DisplayCard current Case actTABS
'only for development ToggleTabs Case Else MsgBox "Bad action code for card " & Cards(cardNo).name Stop End End Select End Sub Sub ChangeSel (direct As String) 'do button navigation Dim n As Integer Dim last As Integer, Sel As Integer n = Cards(current).NItems last = Cards(current).selected If last = 0 Then Exit Sub If direct = "Right" Then 'move right with wrap around If last = n Then Sel = 1 Else Sel = last + 1 End I f ElseIf direct = "Left" Then 'move left with wrap around If last = 1 Then Sel = n Else ' Sel = last - 1 End If ElseIf direct = "Up" Then 'move up, no wrap around If last > MAXCOLS Then Sel = last - MAXCOLS
Else Sel = last End If ElseIf direct = "Down" Then 'move down, no wrap around If last <= n - MAXCOLS Then Sel = last + MAXCOLS
Else Sel = last End If Else MsgBox "Bad Direction"
End End If Cards(current).selected = Sel UpdateSel End Sub Sub DisplayCard (index) 'takes care of displaying menu on screen Dim depth As Integer 'number of visible cards Dim i As Integer 'counter Dim ancestor As Integer 'card numbers current = index parent = Cards(current).parent depth = Cards(current).level 'hide cards after (in front of) current For i = MAXCARD To depth + 1 Step -1 sspTitle(i).Visible = False sspCard(i).Visible = False Next i 'make sure previous tab names are correct and visible ancestor = current For i = depth - 1 To 1 Step -1 ancestor = Cards(ancestor).parent sspTitle(i).Caption = Cards(ancestor).name sspCard(i).Visible = True sspTitle(i).Visible = True Next i 'show current card sspTitle(depth).Caption = Cards(current).name sspCard(depth).Visible = True sspTitle(depth).Visible = True 'show buttons on current card DisplayItems End Sub Sub DisplayItems () 'displays buttons on a card Dim Area As SSPanel Dim i As Integer Dim Dx, Dy, x, Y, w, h Dim NItems As Integer NItems = Cards(current).NItems Set Area = sspCard(Cards(current).level)'this is a pointer, not a copy 'calculate size of button Dx = Area. Width * .9 / MAXCOLS
Dy = Area. Height * .9 / MAXROWS
w = Dx * .9 If w > 30 Then w = 30 h = Dy * .9 I f h > 2 0 Then h = 2 0 sspBlinkBG.Visible = False sspBlinkBG.ZOrder 0 'bring to front 'place and show each button For i = 1 To NItems sspItem(i).Width = w sspItem(i).Height = h sspItem(i).Caption = Cards(Cards(current).item(i)).name If Cards(Cards(current).item(i)).actionCode = actNONE Then 'turn inactive buttons grey sspItem(i).BackColor = greyCOLOR
Else sspItem(i).BackColor = itemCOLOR
End If x = Area.Left + .05 * Area.Width + (((i - 1) Mod MAXCOLS) + .5) * Dx Y = Area.Top + .05 * Area.Height + (Int((i - 1) / MAXCOLS) + .5) * ~, CenterItem sspItem(i), x, Y
sspItem(i).ZOrder 0 sspItem(i).Visible = True Next i 'make blinker bigger than buttons CPlace 2, sspBlinkBG, sspItem(1) 'hide unused buttons For i = NItems + 1 To MAXITEM
sspItem(i).Visible = False Next i UpdateSel End Sub Sub Form_Activate () 'check for a return code from another form sspCont.Visible = False Select Case returnCode Case BACK
If current c homeCARD Then current = lastCard SetStatus "Use arrows and select or use keypad.", greyCOLOR
DisplayCard current UpdateSel Case SHORTCUT
current = homeCARD
SetStatus "Use arrows and select or use keypad.~, greyCOLOR
DisplayCard current UpdateSel Case FILTER
SetStatus "Use arrows and select or use keypad." greyCOLOR
If current c homeCARD Then DisplayCard current Else lastCard = current Select Case currDomain Case TV
DisplayCard filterCARD
Case MOVIE
DisplayCard mfilterCARD
Case SHOP
DisplayCard current End Select End If UpdateSel Case COMING
'to get from TV list view to schedule view Cards(current).selected = 2 sameFilter = False Set views(currDomain) = frmComing returnCode = SHOWVIEW
Me. Hide End Select End Sub Sub Form_KeyDown (KeyCode As Integer, Shift As Integer) Dim index As Integer Dim n As Integer Select Case KeyCode Case B_HACK
'Go up in menu hierarchy Animate "Back", 0 Case H_HELP
InvokeHelp Case 8_PREVIEW
userStation = 1 userStart = fakeTime returnCode = TOTV
Me. Hide Case B_SELECT
'Do button action ButtonAction Case BRIGHT
ChangeSel ("Right") Case B_LEFT
ChangeSel ("Left") Case B_UP
ChangeSel ("Up") Case B_DOWN
ChangeSel ("Down") Case B_PAGEUP

Case B_PAGEDOWN
'use numeric key pad to choose a button directly, without navigation Case B_1 If Cards(current).NItems > 0 Then Cards(current).selected = 1 UpdateSel ButtonAction End If Case B_2 If Cards(current).Nltems > 1 Then Cards(current).selected = 2 UpdateSel ButtonAction End If Case H_3 If Cards(current).NItems > 2 Then Cards(current).selected = 3 UpdateSel ButtonAction End I f Case B_4 If Cards(current).NItems > 3 Then Cards(current).selected = 4 UpdateSel ButtonAction End If Case B_5 If Cards(current).NItems > 4 Then Cards(current).selected = 5 UpdateSel ButtonAction End I f Case B_6 If Cards(current).NItems > 5 Then Cards(current).selected = 6 UpdateSel ButtonAction End If Case B_7 If Cards(current).NItems > 6 Then Cards(current).selected = 7 UpdateSel ' - , ButtonAction End I f Case B_8 -If Cards(current).NItems > 7 Then Cards(current).selected = 8 UpdateSel ButtonAction End If Case B_9 If Cards(current).NItems > 8 Then Cards(current).selected = 9 UpdateSel ButtonAction End If Case B_0 current = homeCARD
DisplayCard current Case Asc("Q") End End Select End Sub Sub Form_Load () 'set fonts and colors sspCard(0).BackColor = backgroundCOLOR
sspTitle(0).BackColor = backgroundCOLOR
sspItem(0).BackColor = itemCOLOR
sspBlinkBG.BackColor = highlightCOLOR
sspItem(0).FontSize = mediumFONT
sspCard(0).FontSize = mediumFONT
sspTitle(0).FontSize = mediumFONT
Me.BackColor = formCOLOR
'fit into display area SizeAForm Me, dispTop, dispHeight, dispLeft, dispWidth Me. Scale (0, 0)-(100, 100) 'set global return code to default returnCode = BACK
'read in menu hierarchy for rolodex PopulateCards 'load graphical objects LoadGraphics 'set current card on screen DisplayCard homeCARD
End Sub Sub LoadGraphics () Dim i As Integer 'counter Dim tabHeight 'load buttons For i = 1 To MAXITEM
Load sspItem(i) Next i 'shape prototype card ' sspCard(0).Top = sspItem(0).Height sspCard(0).Height = 100 - CARDSHiFT - sspCard(0).Top sspCard(0).Left = 2 * CARDSHIFT
sspCard(0).Width = 100 - 4 * CARDSHIFT
'shape prototype tab sspTitle(0).AutoSize = False sspTitle(0).Width = sspCard(0).Width / MAXTITLE + CARDSHIFT
'load and shape cards and tabs For i = 1 To MAXCARD
Load sspCard(i) sspCard(i).Height = sspCard(i - 1). Height - CARDSHIFT

sspCard(i).Top = sspCard(i - 1). Top + CARDSHIFT
sspCard(i).ZOrder Load sspTitle(i) sspTitle(i).Top = sspCard(i).Top - sspTitle(0).Height + 2 Select Case (i Mod MAXTITLE) 'note: these cases are not flexible for different MAXTITLE
Case 1 ~ .
sspTitle(i).Left = sspCard(i).Left Case 2 sspTitle(i).Left = sspCard(i).Left + sspCard(i).Width / 2 -sspTitle(i).Width / 2 Case 0 sspTitle(i).Left = sspCard(i).Left + sspCard(i).Width - sspTitle(i).Width End Select sspTitle(i).ZOrder Next i End Sub Sub PopulateCards () 'This subroutine reads in the card data from the 'CARDFILE file defined as a constant. The cards 'will be numbered 1 to the number of lines (cards) 'in the file. All special cards should come before 'the home card (by convention), and are named as 'constants in the declarations. Each card record 'should have a level (integer), item selected (integer), 'a name (string), an info string (string), and 'an action code (integer). If the action code is greater 'than actNEXT, one additional input (variant type) is read 'for the card.
Dim last As Integer, parent As Integer Dim selected As Integer Dim index As Integer, itemNo As Integer Dim level, title, text, action Open CARDFILE For Input As ~kl 'make dummy parent for top level index = 0 Cards(indexl.name = 'root' Cards(index).level = 0 Cards(index).NItems = 0 While Not EOF(1) last = index index = index + 1 Input 111, level, selected, title, text, action Cards(index).level = level Cards(index).selected = selected Cards(index).name = title Cards(index).infotext = text Cards(index).actionCOde = action If action > actNEXT Then Znput xl, action Cards(index).actionData = action End _'f Cards(index).NItems = 0 'initialize number of items If Cards(index).level = Cards(last).level + 1 Then 'Child of last parent = last ElseIf Cards(index).level <= Cards(last).level Then 'Sibling or cousin, back up to find parent Do While (Cards(index).level < Cards(last).level) 'Find last sibling last = Cards(last).parent Loop parent = Cards(last).parent Else 'Skipped a level, text file is incorrect MsgBox "Bad level in text file."
Stop End End If Cards(index).parent = parent 'Add self to parent's list of items itemNo = Cards(parent).NItems + 1 Cards(parent).NItems = itemNo Cards(parent).item(itemNo) - index Cards(index).self = itemNo Wend Cards(0).NItems = 1 Close #1 End Sub Sub tmrBlink_Timer () BlinkControl.Visible = Not BlinkControl.Visible End Sub Sub ToggleTabs () 'toggles offset of tab placement; development only Dim i As Integer Static offset If offset = 3.5 Then offset = 2 Else offset = 3.5 End I f For i = 1 To 9 sspTitle(i).Top = sspCard(i).Top - sspTitle(0).Height + offset Next i ' End Sub Sub UpdateSel () 'put blinking highlight in correct location, update info bar Dim i As Integer Dim x, Y
Dim S As SSPanel Dim text As String Dim color BlinkStop False 'turn blinking off i = Cards(current).selected If i > 0 Then 'something is selected Set S = sspItem(i) 'S is pointer to button 'find center of button x = S.Left + S.Width / 2 Y = S.Top + S.Height / 2 'put blinker behind button Centerltem sspHlinkBG, x, Y
'resume blinking BlinkStart sspBlinkBG, True End If text = Cards(Cards(current).item(Cards(current).selected)).infotext color = sspItem(Cards(current).selected).BackColor SetInfo text, color End Sub Sub Zoom (n As Integer, C As Control, Dest As Control) 'animates control C changing size to control Dest Dim i As Integer, j As Integer Dim dl, dw, dt, dh dl = (Dest.Left - C.Left) / n dw = (Dest.Width - C.Width) / n dt = (Dest.Top - C.Top) / n dh = (Dest.Height - C.Height) / n C.ZOrder C.AutoSize = False For i = 1 To n C.Move C.Left + dl, C.Top + dt, C.Width + dw, C.Height + dh C.Refresh Next i End Sub ---__= SELECT form code =_____ 'This form is another attempt at alphabetic input that allows only valid input.
' It relies on the TV titles database which has two tables. The reference table is used first ' and contains a count of all items starting with each letter of the alphabet or with a ' symbol oz number. The user is first presented with a list of possible starting letters ' (each item in the first on-screen list may have several letters in it). Once a starting ' letter is chosen, a snapshot is made of matching entries from the table of titles.
' Each list the user sees has only valid choices for the next letter, or .full titles if ' a particular title is distinguished from all others by the letters chosen so far.
' The best way to understand is to see the form in action before reading the code.
'The code could easily be modified to work with other data such as lists of movies, etc.
'note: the non-proportional font used in the itemBoxes is Courier New Option Explicit Dim DB As database 'the full database Dim list(1000) As String 'the list of selection strings 2~7042~

Dim ieaf(1000) As Integer 'true if n~h item is a leaf, false otherwise Dim listEnd As Integer 'number of last element in list Dim currPrefix As String 'the letters chosen so far Dim initialList As Integer 'boolean 'true if this list has multiple letters per :=em Dim BlinkControl As Control 'not used, currently no blinking object Dim itemSeiected As Integer 'from 1 to MAXDIS2LAY
Dim iocSelected As Integer 'from 1 to MAXLOC
Dim rowOffset 'difference between tops of two consecutive reduced items 'database Dim allData As snapshot Dim filterData As snapshot Dim marker(100) As String 'bookmarks of each MAXDISPLAY items Dim locStart1100) As Integer'rItem index for start of locator 'display parameters Const MAXDISPLAY = 6 'Number of items in close up Dim MAXITEM As Integer 'Number of items in whole list Dim MAXLOC As Integer 'Number of locator positions Dim whichrItem(MAXDISPLAYI As Integer 'which rItems are in the current display Const GAP = 10 'space around lists Const EXTRA = 70 'room for longer programs Const reducedEXTRA = 20 'room for longer programs in reduced rep Const T = 50 Const H = 1000 - 2 * T
. Const locL = 30 'for reduced list Const local = 100 Const dispL = local + 2 * locL 'for display list Const dispW = 1000 - dispL - locL
Sub HlinkStart (C As Control, vis) Set BlinkControl = C
BlinkControl.Visible = vis tmrHlink.Enabled = True End Sub Sub BlinkStop (vis) tmrBlink.Enabled = False If BlinkControl Is Nothing Then 'do nothing Else BlinkControl.Visible = True End If Set BlinkCoatrol s Nothing End Sub Sub ChangeLoc (direct As String) 'page up or down with the locator Select Case direct Case "Up"
If locSelected > 1 Then locSelected = locSelected - 1 RedoDisplay End I f Case "Down"

If locSelected < MAXLOC Then locSelected = locSelected + 1 RedoDisplay End If End Select End Sub Sub ChangeSel (direct As String) 'Perform list navigation Select Case direct Case "Up"
If itemSelected > 1 Then 'move up within items currently displayed itemSelected = itemSelected - 1 selector.Top = itemHox(itemSelected).Top - GAP
rItemlO).Top = locator.Top + rowOffset * (itemSelected - 1) SetItemInfo ElseIf locSelected > 1 Then 'display previous section of the list itemSelected = MAXDISPLAY
locSelected = locSelected - 1 RedoDisplay End If Case "Down"
If itemSelected < MAXDISPLAY Then 'move down within items_currently displayed 'do not move to select an empty item If (locSelected - 1) * MAXDISPLAY + itemSelected < MAXITEM Then itemSelected = itemSelected + 1 selector.Top = itemHox(itemSelected).Top - GAP
rItem(0).Top = Iocator.Top + rowOffset * (itemSelected - 1) SetItemInfo End If Elself locSelected < MAXLOC Then 'display next section of list itemSelected = 1 locSelected = locSelected + 1 RedoDisplay End If End Select End Sub Sub DoSelect () 'finish with leaf valut or create a new list based on user',s choice of prefix Dim index As Integer Dim count As Integer Dim i As Integer Dim nextChar As String Dim looking As Integer 'boolean Dim title As String index = locStart(locSelected) + itemSelected - 1 'index in list of item selected If leaf(indexl Then database 'selection made; show next view title = removeAmpersand(list(index)) fiiterData.FindFirst "SelectTitle = """ & title & """"
If filterData.NoMatch Then Do 'prompt for different title until found 'note: this should never happen, it's only in the list if it's in .'.:e title = InputBox(title & " not found. Enter new title:", tit', e) fiiterData.FindFirst "SelectTitle = """ & title & """"
Loop Until Not filterData.NoMatch End If userString = filterData("FullTitle") Set views(TV) = frmWeek sameFilter = False returnCode = SHOWVIEW
Me. Hide Else 'indicate to user that something is happening itemBox(itemSelected).BackColor = greyCOLOR
SetInfo "Loading data, please wait...", greyCOLOR
DoEvents i = Len(list(index)) currPrefix = ""
If initialList Then currPrefix = list(index>
Else 'remove underline formatting (&) from prefix If i > 2 Then currPrefix = Left(list(index), i - 2) currPrefix = currPrefix ~ Right(list(index), 1) End If SetStatus "TV Titles starting with " & currPrefix, greyCOLOR
'construct new list If initialList Then 'list items are special, not prefixes If index = 1 Then 'Symbol or Number selected initialList = False filterData.Filter = "SelectTitle < 'A'"
currPrefix =
Else 'a list o! l.tters selected listEnd = 0 Por i = 1 To Len(currPrefix) 'stsiD out the letters (ignore commas) to make a new~list If Mid(currPrefix, i, 1) >_ "A" Then listEnd = listEnd + 1 list(listEnd) _ "&" & Mid(currPrefix, i, 1) leaf(i> = False End If Next i End If Else 'refilter data to match the new prefix filterData.Filter = "SelectTitle like '" & currPrefix & "" "

End If 'data assumed to be already sorted If Not initialList Then 'still need to create new list from data Set filterData = filterData.CreateSnapshot() filterData.MoveFirst listEnd = 0 For i = Asc(" ") To Asc("Z") 'space, punctuation, and letters 'note: should be fixed up by not trying every single one, go stright ~o next db item's char count = 0: looking = True while Not filterData.EOF And looking nextChar = MidlfilterData("SelectTitle~), Len(currPrefix> + 1, 1) If nextChar = Chr(i) Or nextChar = LCase(Chrti)) Then count = count + 1 filterData.MoveNext Else looking = False End If Wend Select Case count Case 0 'do not add to list Case 1 'make a leaf entry filterData.MovePrevious listEnd = listEnd + 1 list(listEnd) = fixAmpersand((filterData("SelectTitle"1)) leaf(listEnd) = True filterData.MoveNext Case Else 'make a non-leaf entry filterData.MovePrevious listEnd = listEnd + 1 list(listEnd) = currPrefix & "&" & Chr(i) 'underline new char 'note: underlining is just one mechanism for emphasizing what is different display leaf(listEnd) = False filterData.MoveNext End Select Next i If filterData.RecordCount <= MAXDISPLAY Then 'redo the list to have just leaves in it, if they all fit in one listEnd = 0 filterData.MoveFirst~
While Not filterData.EOF
listEnd = listEnd y I
list(listEnd) = fixAmpersand((filterData("SelectTitle"1)) leaf(listEnd) = True filterData.MoveNext wend End If End If 'display the newly created list itemHox(itemSelected).BackColor = itemCOLOR 'restore itemHox color initialList = False if listEnd > 1 Then NewList Else 'automatically select item if only one in list locSelected = 1 itemselected = 1 DoSelect End If End If End Sub Sub Form_Activate () 'always begin with initial list LoadData NewList End Sub Sub Form_KeyDown (KeyCode As Integer, Shift As Integer) Select Case KeyCode Case Asc("Q") End Case B_BACR
'note: do we want ability to back up one level from a particular choice in the list?
' Could have B_BACR go back one list then back to menu after another press.
returnCode = BACK
Me. Hide Case B HELP
InvokeHelp Case B_PREVIEW
Case H SELECT
DoSelect Case H UP
ChangeSel ("Up") Case B_DOWN
ChangeSel ("Down") Case 8_RIGHT
Case B_LEFT
Case H_PAGB~JP
Chan~eLoc ("Up') Case B_PAiG8D0~1 ChangeLOC ("Down") .
Case B_FILTER
Case H 0 returnCode = SHORTCUT
Me. Hide End Select End Sub Sub Form_Load () Dim i As Integer 'counter Dim itemRoom 'set colors and fonts item8ox(O).FontSize = largeFONT

rightArrow(0).FOntSize = largeFONT

rItem(0).BackColor = itemCOLOR

selector.FillColor = highlightCOLOR

displayList.FillColor = backgroundCOLOR

locator.FillColor = backgroundCOLOR

itemHox(0).BackColor = itemCOLOR

rightArrow(0).HackColor = itemCOLOR

shpSlot.BorderColor = slotCOLOR

'size and place the objects to the screen SizeAForm Me, DispTop, DispHeight, DispLeft, DispWidth Me. Scale (0, 0)-(1000, 1000) SizeAControl locator, T - GAP, H + GAP, locL 2 ' GAP
- GAP, local +

SizeAControl shpSlot, T, H, locL + reducedEXTRA,reducedEXTRA
local - 2 t SizeAControl displayList, T - GAP, H + GAP, dispL, dispW

locator.ZOrder shpSlot.ZOrder rItem(0).ZOrder itemRoom = H / MAXDISPLAY

SizeAControl itemHox(0), T + (.S GAP), itemRoom - GAP, dispL + EXTRA, dispW -2 ' EXTRA

SizeAControl leftArrow(0), T + (.5 GAP), itemRoomdispL, EXTRA
- GAP, SizeAControl rightArrow(0), T + (.S ' GAP), itemRoomdispL + dispW
- GAP, -EXTRA. EXTRA

SizeAControl selector, T, itemRoom + GAP, dispL, dispW

selector.ZOrder For i = 1 To MAXDISPLAY

Load itemBox(i) itemBox(i).Visible = False itemHox(i).Top = itemBox(0).Top + (i - 1) * itemRoom Load rightArrow(i) rightArrow(i).Top = itemBox(i).Top Next i End Sub Sub LoadData () Dim refSnap As snapshot Const MAXTOGETFIER = MISPLAY 'number of letter allowed in one itemBox Dim together 'fill initial selection list listEnd = 0 .
Set DB = OpenDatabase(TVTitles) Set allData = DB.CreateSnapshot("Titles") 'create initial list Set refSnap = DB.CreateSnapshot("Reference") refSnap.MoveFirst together = MAXTOGETHER 'indicate need for new item While Not refSnap.EOF
Select Case refSnap("Number") case o 'do not add to list Case 1 ':hake a leaf entry listEnd = listEnd + 1 allData.FindFirst "SelectTitle like " & refSnap("Letter°) & °~~
list(listEnd) = allData("SelectTitle") ieaf(listEnd) = True together = MAXTOGETHER
Case Else If refSnap(~Letter") _ ~*" Then listEnd = listEnd + 1 iist(listEnd) _ "Symbol or Number"
together = MAXTOGETHER
'note: DoSelect relies on this entry being the first list item Else If together >= MAXTOGETHER Then listEnd = listEnd + 1 list(listEnd) = refSnap(~Lettez") together = 1 Else list(listEnd) = Iist(listEnd) & ~, " & refSnap("Letter") together = together + 1 End If End If leaf(listEnd) = False End Select refSnap.MoveNext Wend Set filterData = allData initialList = True End Sub Sub NewList () 'remakes the display for a new list 'note: should itemSelected be initialized to something other than 1?
Dim i As Integer 'counter Dim section As Integer 'count the number of locator locations Dim msg As String 'clear captions For i = I To M7~7~ISPIJ~Y
itamBox(i).Caption = ~~
Next i For i = 1 To MAXITF.M
Unload rItem(i) Next i MAXITEM = listEnd 'number of items in list 'load the reduced item shapes and size relative to MAXITEM
rowOffset = (H - rItemlO).Height) / MAXITEM
If rowOffset > rItem(0).Height + GAP Then rowOffset = rItem(0).Height + GAP

rItem(0).Visible = False rItem(0).Top = T
rItem(0).Left = locL + reducedEXTRA
rItem(OI.Width = local - 2 * reducedEXTRA
r:tem(0).HackColor = itemCOLOR
filterData.MoveFirst 'size and place the item shapes 'and set section bookmarks section = 0 'number of locator locations For i = 1 To MAXITEM
Load rItem(i) rItem(i).Top = T + (i - 1) * rowOffset If ((i - 1) Mod MAXDISPLAY) = 0 Then 'begin a new locator location section = section + 1 locStart(section) = i End If If Not leaf(i) Then rItem(i).Width = rItem(i).Width + reducedEXTRA
End If rItem(i).ZOrder rItem(i).Visible = True Next i MAXLOC = section IocStart(section + 1) = MAXITEM + 1 'set length of minselector 'use rItem(0) as mini selector rItem(0).Left = locL - GAp rItem(0).Width = local + 2 * GAP
'initialize selector and locator iCemSelected = 1 locSelected = 1 rItem(0).BackColor = highlightCOLOR
'set the captions in the itemBoxes RedoDisplay End Sub Sub RedoDisplay () 'set the captions in the item8oxes to correspond to items in locator 'reposition locator, selector and set item info in info box Dim last As Integer 'number of last item in display Dim i As Integer 'counter Dim index As Integer 'index of item in list index = locStart(locSelected) For i = 1 To MAXDISPLAY
If index > MAXITEM Then 'hide empty itemBox itemHox(i).Caption = ""
itemHox(i).Visible = False righcArrow(i).Visible = False Else itemHox(i).Caption = list(index) If Not leaf(index) Then 'show right arrow and put in all caps rightArrow(i).Visible = True itemBox(i).Caption = UCase(list(index)) Else rightArrow(i).Visible = False End If itemHox(i).Visible = True last = i 'remember last valid selection index = index + 1 End If Next i 'DO not allow blank to be selected Zf itemSelected > last Then itemSelected = last End If 'fix the rest of the display displayList.Height = H + 2 * GAP - (H / MAXDISPLAY " (MAXDISPLAY - last)) selector.Top = item8ox(itemSelected).Top - GAP
locator.Top = T + rowOffset * (locStart(locSelected) - 1) locator. Height = last ' rowOffset + rItem(0).Height - rowOffset rItem(0).Top = locator.Top + rowOffset * (itemSelected - 1) rItem(0).Visible = True SetItemInfo End Sub Function removeAmpersand (oldText As String) As String 'for each double ampersand, remove one of them Dim text As String Dim newText As String Dim i As Integer text = oldText ne~Text = "~
While InStr(text, "&&') i = InStr(text, "~i") ne~,lfext = naa/rext & Left ( text, i ) text = RiQhtltext, Lanltext) - (i + 1)) Wend zemoveAa~persand = ne~Ifext ~ text End Function Sub SetItemInfo () 'put the relevant info for current item into info box Dim msg As String Dim index As Integer Dim F As snapshot If Me. Visible Then index = iocstart(locSelected) + itemSelected - 1 If leaf(index) Then 'get full title from data Set F = fiiterData F.FindFirst "SelectTitle = ~"° & list(index) & ~"""
msg = F("FullTitle") Else msg = "Titles beginning with '" & list(index> & " "' End Zf SetInfo msg, (itemBox(itemSelected).BackColor) End If End Sub Sub tmrBlink_Timer () BlinkControl.Visible = Not BlinkControl.Visible End Sub -----= START form code =-----'This startup form allows the developer to choose display mode ' (either for PC, TV, or mini PC for making screen prints) ' then starts the actual program by calling Main Option Explicit Sub Form_Load () returnCode = STARTUP
End Sub Sub miniHutton_Click () displayMode = "mini"
Unload Me Main End Sub Sub PCbutton Click () displayMode = "PC"
Unload Me Main End Sub Sub TVbutton Click () displayMode = "TV"
Unload Me Main End Sub ____-= TV fona code asaaaa 'This form pretends to show a TV program or record it, if it is not currently on Option Explicit Const GAP = 700 Sub Form_Activate (1 Dim msg As String 6b Dim DB As database Dim Programs As table Dim startTime Dim refSnap As snapshot Dim refDate Dim startTS, finishTS, nowTS
Set DH = OpenDatabase(TVDB) Set refSnap = DH.CreateSnapshot("Reference") refSnap.FindFirst "Name = 'Date'"
refDate = DateValue(refSnap("Data")) Set Programs = DH.OpenTable("Programs") Programs. Index = "ID"
Programs. Seek "- , userStation, userStart 'note: ought to check that userStation is valid If Programs.NoMatch Then 'simulate showing whatever is currently on userStation nowTS = DateDiff("n", refDate, fakeToday + fakeTime) \ 30 Set refSnap = Programs.CreateSnapshot() refSnap.FindFirst "Station = " & Str(userStation) refSnap.FindNext "FinishTS > " & Str(nowTS) msg = "You are watching "
msg = msg & Chr(13) & Format(refSnap("Title")) msg = msg & " on " & StationString(refSnap("Station")) msg = msg & Chr(13) & Format(refSnapl"Start"), "h:mm AM/PM">
msg = msg & " to " & Format(refSnap("Finish"), "h:mm AM/PM") Else 'decide if the program is on, record if it's not startTS = DateDiff("n", refDate, Programs("Start")) \ 30 finishTS = DateDiff("n", refDate, Programs("Finish")) \ 30 nowTS = DateDiff("n", refDate, fakeToday + fakeTime) \ 30 'nowTS would be calculated to work in real time If startTS <= nowTS And finishTS >= nowTS Then msg = "You are watching "
Else msg = "The VCR is set to record "
End If msg = msg & Chr(13) & Format(Programs("Title")) msg = msg & " on " & StationString(Programs("Station")) msg = msg & Chr113) & Format(Programs("Start"), "h:mm AM/PM") msg = msg & " to " & Format(Programs("Finish"), "h:mm AM/PM") End If textArea.CaDtion = msg End Sub Sub Fob KeyDown (KeyCoda As Integer, Shift As Integer) Select Case KeyCode Case B_BACK
returnCode = LASTVIEW
'note: this is not appropriate i~ we came from menu (rolodex) Me. Hide Case B_0 returnCode = SHORTCUT
Me. Hide Case Asc(~Q~) End Case Else returnCode = BACK
Me. Hide End Select End Sub Sub Form_Load () textArea.Caption = "~
textArea.FontSize = largeFONT
SizeAForm Me, 0, ScrHeight, 0, ScrWidth SizeAControl textArea, GAP, ScrHeight - 2 * GAP, GAP, ScrWidth - 2 * GAP
End Sub -----= TV_GUIDE form code =-----'General remarks:
' The Main procedure starts the ball rolling by showing the Frame, loading 'all the forms, and then showing the rolodex menu. Control is tranferred from form 'to form through the use of the returnCode variable (see list of return codes in 'global declarations). The frmDex, for example, sets the returnCode to SHOWVIEW, and 'hides itself. This causes frmFrame to become active. frmFrame looks at the returnCode 'and shows the current domain's view form. Communication between forms is done through 'a variety of variables, since a form's procedures are not accessible from outside.
Option Explicit *****************************
' Global Declarations *i****~******t**************~
'database constants Global Const CARDFILE = "c:\pctv\db\cards2.txt"
Global Const MVDH = "c:\pctv\db\plots.mdb"
Global Const SPDB = "c:\pctv\db\shopping.mdb"
Global Const TVDH = "c:\pctv\db\big.mdb"
Global Const TVTitles = ~c:\pctv\db\titles.mdb"
Const CATDH = "c:\pctv\db\cats.mdb' Dim typeTable As table 'TV type IDs Dim catTable As table 'TV category IDs Dim statTable As table 'station IDs Global fakeToday 'ks~p tha day constant Global fakeTim~ 'keep tha time constant , 31oba1 displayMod~ As String 'display set for "PC" or "TV" (affects size~of fonts and graphics) Global newUser As Integer 'boolean 'when true, give extra helps Global ScrWidth, ScrHeight Global DispTop, DispHeight, DispLeft, DispWidth 'display area available to forms inside the frame 'Colors ~lobal Const highlightCOLOR = &H8080FF 'redish Global Const backgroundCOLOR = &H80FFFF 'yellow GlobalConst itemCOLOR&HFFFFCO 'light = blue GlobalConst formCOLOR&HFF0000 'dark = blue GlobalConst whiteCOLOR&H80000005'white =

GlobalConst greyCOLOR&HCOCOCO 'grey =

GlobalConst blackCOLOR&HO& 'black =

GlobalConst slotCOLOR&H80000005'white =

GlobalConst borderCOLOR= &HFF& 'red GlobalConst divideCOLOR= &HFFFF&'white GlobalColor(101 'arrayfilled in in Ma 'fontsizes GlobalConst smallFONT13.8 =

GlobalConst mediumFONT18 =

GlobalConst largeFONT24 =

'domain constants GlobalConst MOVIE
= 0 GlobalConst TV =

GlobalConst SHOP
= 2 'arrayof list forms GloballistFrm(3) As Form GlobalTVlist As New ist frmL

GlobalMOVlist As New frmList GlobalSHOPlist As New frmList .****r*************************
' Inter-Form Communication **********t**r***********rr***
Global currDomain As Integer 'the current domain Global filters(3) As String 'array of query strings for current domain filter Global currFilter(3) As String 'text name of filter Global currView(3) As String 'text name of current view (use mainly for lists which change view title) Global views(3) As Form 'array of current domain views (TV coming or TV
schedule, for instance) Global viewFilter As String 'the database filter needed to obtain the appropriate view 'note: used only for movies at this time, would probably be expanded to array Global userString As String 'string chosen by user Global userMsg 'measag~ string to display to user Global userStation 'a station selected by user Global userStart 'a time chosen by user Global sameFilt~s As Integer 'boolean 'true if need to refilter data Global sameView As Integer 'boolean 'true if need to redo display 'return codes determine which action to take on re-activate of frmFrame or frmDex Global returnCode As Integer Global Const BACK = 0 Global Const TOTV = 1 Global Const LASTVIEW = 2 Global Const SHORTCUT = 3 Global Const DONE = 4 Global Const FILTER = 5 Global Const COMING = 6 Global Const SHOWVIEW = 9 Global Const ALPHA = 10 Global Const PICK = 11 Global Const STARTUP = 12 rrxrrrrrrrrrrrrrrrrrerrrwr ' Define Type Card ' for rolodex rra:*rrrrrrrrrrrrrrrrrrrrr Global Const MAXITEM = 9 'max number of buttons on a card 'Represents one index card as viewed on screen Type Card self As Integer 'item number of self on parent level As Integer 'number of cards away from root name As String 'text to appear on button/card infotext As String 'text for info bar actionCode As Integer 'code for action to take when chosen actionData As String 'extra info needed for action parent As Integer 'number of parent card NItems As Integer 'number of buttons visible on card Item(MAXITEM) As Integer 'array of card pointers (one for each button on card) selected As Integer 'the number of the selected button End Type 'Array of up to MAXCARDS index cards Global Const MAXCARDS = 1000 Global Cards(MAXCARDS) As Card m rrrrrrrrrrrrrrrrererw*rr ' Remote Buttons ~rw rt**rrererrf*rrrerrrt 'assigned values in sub SetReys Global H_BACK
Global B_HELP
Global B_PREVIEW
Global B_UP
Global B_DOWN
Global B LEFT
Global BRIGHT
Global B_SELECT
Global S_PAGEU?
Global H_PAG~DOWI~t Global B_1 Global H_2 Global H_3 Global H_4 Global B_5 Global B_6 Global H_7 Global H_8 Global H_9 Global B_0 Global H FILTER
rrrx*xxrrrxxr***x*tr ' COLORS
rxrxrxxrxrrrrrrrrrrr Global Const RED = &HFF&
Global Const ORANGE = &H80FF&
Global Const YELLOW = &HFFFF&
Global Const GREEN = &H80FF80 Global Const TURQUOISE = &HFFFF00 Global Const HLUE = &HFF0000 Global Const VIOLET = &HFFOOFF
Global Const WHITE = &HFFFFFF
Global Const BLACK = &HO&
Global Const GREY = &HCOCOCO
~*rx**xxx*******s***rrxrrr*rrrrrr*rrrxrr*xxs****rrrrx " CONSTANTS FROM VISUAL BASIC FILES
***r*xrrr*rxxrrrrrr*rrrrxx*xxxrxr*rr*rrrrrrxrx**r***
" From CONSTANT.TXT
' Key Codes Global Const KEY_LBUTTON = &H1 Global Const KEY_RHUTTON = &H2 Global Const KEY CANCEL = &H3 Global Const KEY_MBUTTON = &H4 ' NOT contiguous with L & RBUTTON
Global Const KEY_HACK = &H8 Global Const KEY_TAB = &H9 Global Const KEY_CLEAR = &HC
Global Const KEY_RETURN = &HD
Global Const KEY_SHIFT = &H10 Global Const KEY CONTROL = &H11 Global Const KEY_MENtJ = &H12 Global Const KEY_PAUSE = &H13 Global Const KEY_CAPITAL = &H14 Global Const KEY_ESCAPE = &H1B
Global Const KEY_SPACE = &HZO
Global Const KEY_PRIOR = ~H21 Global Const KEY_NEXT = &H22 Global Const KEY_END = &H23 Global Const tC87f_HOME = &H24 Global Const tCEY_LEFT = &H25 Global Const REY_UP = ~H26 Global Const KEY_RIGHT = &H27 Global Const KEY_DOWN = &H28 Global Const KEY_SELECT = &H29 Global Const KEY PRINT = &H2A
Global Const KEY_EXECUTE = &H2H
Global Const KEY_SNAPSHOT = &H2C
Global Const KEY_INSERT = &H2D
Global Const KEY_DELETE = &H2E
Global Const KEY_HELP = &H2F

KEY_A thru KEY_Z are the same as their ASCII equivalents: 'A' thru 'Z' ' KEY_0 thru KEY_9 are the same as their ASCII equivalents: '0' thru '9' Global Const KEY_NUMPADO = &H60 Global Const KEY_NUMPAD1 = &H61 Global Const KEY_NUMPAD2 = &H62 Global Const KEY_NUMPAD3 = &H63 Global Const KEY_NUMPAD4 = &H64 Global Const KEY_NUMPADS = &H65 Global Const KEY_NUMPAD6 = &H66 Global Const KEY_:~IUMPAD7 = &H67 Global Const KEY_NUMPADB = &H68 Global Const KEY_NUMPAD9 = &H69 Global Const KEY_MULTIPLY = &H6A
Global Const KEY_ADD = &H6B
Global Const KEY_SEPARATOR = &H6C
Global Const KEY_SUBTRACT = &H6D
Global Const KEY_DECIMAL = &H6E
Global Const KEY_DIVIDE = &H6F
Global Const KEY_F1 = &H70 Global Const KEY_F2 = &H71 Global Const KEY_F3 = &H72 Global Const KEY_F4 = &H73 Global Const KEY_F5 = &H74 Global Const KEY_F6 = &H75 Global Const KEY_F7 = &H76 Global Const KEY_F8 = &H77 Global Const KEY_F9 = &H78 Global Const KEY_F10 = ~H79 Global Const KEY_F11 = &H7A
Global Const KEY_F12 = &H7B
Global Const KEY_F13 = &H7C
Global Const KEY_F14 = &H7D
Global Const KEY_F15 = &H7E
Global Const KEY_F16 = &H7F
Global Const KEY_NUhB.OCK = &H90 Function CategoryString (typaCode As Integer, catCode As Integer) As String 'creates user-reabable string for a TV program's category Dim mag As String msg = "Cateøosy: " . , 'look up type code typeTable.Index = "ID"
typeTable.Seek "_", typeCode If typeTable.NoMatch Then msg = msg & typeCode Else msg = msg & typeTable("Name") End If msg = msg & ", " 'all on one line, replaced: Chr(13) & "Subcategory: "

'look up category code catTable.Index = "ID"
catTable.Seek "- , catCode If catTable.NoMatch Then msg = msg & catCode Else msg = msg & catTable("Name") End If CategoryString = msg End Function Sub CCopy (Cfrom As Control, Cto As Control) 'copies attributes of CFrom control to CTo Cto.Caption = Cfrom.Caption Cto.BackColor = Cfrom.HackColor Cto.Top = Cfrom.Top Cto.Height = Cfrom.Height Cto.Left = Cfrom.Left Cto.Width = Cfrom.Width Cto.FontSize = Cfrom.FontSize End Sub Sub CenterItem (Item As Control, x, y) 'centers a control around a point Item.Left = x - Item.Width / 2 Item.Top = y - Item.Height / 2 End Sub Sub CPlace (extra, Cfrom As Control, Cto As Control) 'place Cfrom in the same place as Cto, with difference extra Cfrom.Top = Cto.Top - extra Cfrom.Left = Cto.Left - extra Cfrom.Height = Cto.Height + 2 ' extra Cfrom.Width = Cto.Width + 2 ' extra End Sub Function DayString (d, length As String) As String 'returns string for appropriate day of week based on date given ' and length specified Select Case Weekday(d) Case 1 If length = 'lonQ~ Then DayString = 'Sunday' Else DayString = "Sun' End If Case 2 If length = "long' Then DayString = "Monday' Else DayString = "MOn"
End If Case 3 If length = "long" Then 2?70429 DayString = Tuesday"
Else DayString = "Tue"
End If Case 4 If length = "long" Then DayString = "Wednesday"
Else DayString = "Wed"
End I f Case 5 If length = "long" Then DayString = "Thursday"
Else DayString = "Thur"
End If Case 6 If length = "long" Then DayString = ~Friday"
Else DayString = "Fri"
End Zf Case 7 If length = "long" Then DayString = "Saturday"
Else DayString = "Sat"
End If End Select End Function Function fixAmpersand (text As String) 'put in a "&~" for every "&" so ampersand will print instead of format an underline Dim i As Integer Dim oldText As String Dim newText As String newText = ""
oldText = text While InStr(oldText, ~&") i = InStr(oldText, '~') newText = Laft(oldT~xt, i - 1) & ~&&~
oldText-= Right(oldText, Len(oldText) - i) Wend fixAmpersand = newText ~ oldText~
End Function Sub InvokeHelp () 'add parameter for current location or give each form a local InvokeHelp 'would be specialized for each view, probably not each button TellUser "Press Help (?) again for general help, or press any button on the remote for help with that button."
Select Case returnCode Case H HELP

TeliUser "General Help:"
Case B_pREVIEW
TellUser "Use the Preview button to see a video preview of the high?igi:=ec selection."
Case H_BACK
TellUser "Use the Back button to back up to the previous screen."
Case KEY_ESCAPE
TellUser "Use the Shortcut key to get to the shortcut buttons."
Case H_SELECT
TellUser "Use the select button to choose a highlighted option."
Case Else TellUser "This help screen is not written yet."
End Select End Sub Sub Main () Dim i As Integer Dim DH As database Set DB = OpenDatabase(CATDB) Set typeTable = DB.OpenTable("Type") Set catTable = DB.OpenTable("Category") Set DB = OpenDatabase(TVDBI
Set statTable = DH.OpenTable("Stations") SetKeys displayMode 'set different list forms Set listFrm(TV) = TVlist Set listFrm(MOVIE) = MOVlist Set listFrmISHOP) = SHOPlist 'set color array Color(0) _ &HHFBF00 'teal green Color(1) _ &HFFFF80 'light blue Color(2) _ &HFFCOFF 'light pink Color(3) _ &HFFSOFF 'dark pink Color(4) _ &H80COFF 'medium orange Color(5) _ &HCOFFCO 'lightest green Color(6) _ &HFF8080 'royal blue Color(8) _ &HFFCOCO 'lavendar Color(7) _ &HCOCO~ 'ochre 'set date and time fakeToday = CVDateI"6/12/94") fakeTime = CVDatel"6:30 PM") newUser = True 'start up tat forma frmFrame.Show DoEvents 'load all forms here Load frmDex Load frmAlpha Load frmTV
Load frmMsg 'Movie forms cuzrDomain = MOVIE

viewFilter = ~Year >= 1993~
currView(MOVIE) _ "Recent Movies"
currFilter(MOVIE) _ '. All Categories"
SetStatus "Movies", greyCOLOR
Load listFrm(MOVIE) 'Shopping forms currDomain = SHOP
fiiters(SHOP) _ ~~
SetStatus "Shopping, compact disks", greyCOLOR
Load listFrm(SHOP) 'TV forms currFilter(TV> _ "Basketball"
currDomain = TV
filters(TV) _ ~Category = 39~
userString = ~Nova"
'Load frmWeek 'Load listFzm(TV) 'Load frmComing 'Load frmWkday 'Load frmSelect 'show main menu SetStatus 'Use arrows and select or use keypad." greyCOLOR
frmDex.Show ' End Sub Function Overlap (beginTS, endTS) As String 'create query string to look for TV programs in the range between and including beginTS and endTS
Overlap = "(StartTS c= ~ & Str(endTS) & " And FinishTS >_ " & Str(beginTS) &
")°
End Function Sub SetInfo (text As String, Color) 'update the info box text and color Dim s As SSPanel Set s = frmFrame!sspInfo 'works as long as form is loaded s.HackColor = Color s.Caption = text End Sub Sub SetKeys (mode As String) 'Set the keymapDinQs for keyboard or "remote"
B_1 = KEY_NUMpAD7 B_2 = KEY~ADB
B_3 = KEY_NUMpAD9 .
B_4 = KEY_NUMPAD4 B_S = KEY_NUMPADS
B_6 = KEY_NUMPAD6 H_7 = KEY_NUMPAD1 B_8 = KEY_NUMPAD2 H_9 = KEY_NUMPAD3 If mode = "TV" Then 'use keypad for all buttons (except 1-9) H_HACK = KEY_SUBTRACT

B_HELP = 18 'I don't know what the name of this key is H_PREVIEW = KEY_ADD
B UP = Asc("8") H DOWN = Asc("2") B_LEFT. = ASC("4") B RIGHT = Asc("6") B SELECT = Asc("5") H_PAGEUP = KEY_DIVIDE
B_PAGEDOWN = Asc("0") H_0 = KEY_MULTIPLY
B_FILTER = KEY_RETURN
Else B BACK = KEY_F1 B_HELP = KEY_F3 H_PREVIEW = KEY_F2 H_UP = KEY_UP
B_DOWN = KEY_DOWN
B_LEFT = KEY_LEFT
B RIGHT = KEY_RIGHT
B_SELECT = KEY_RETURN
H_PAGEUP = KEY_PRIOR
B_PAGEDOWN = KEY_NEXT
B_0 = KEY_NUMPADO
B_FILTER = KEY_F4 End If End Sub Sub SetStatus (text As String, Color) 'update the status bar with new message Dim s As SSPanel Set s = frmFrame!sspStatus '(works as long as form is loaded) s.BackColor = Color s.Caption = text End Sub Sub SizeAControl (Item As Control, t, H, 1, w) 'set the size attributes of a control Item.Top = t Item.Left = 1 Item.Height = H
Item.Width = w End Sub Sub SizeAForm (frm As Form, t, H, 1, w) 'set the size attributes of a form frcn.Top = t frm.Left = 1 frm.Height = H
frm.Width = w End Sub Function StationString (s) As String 'looks up station number and returns station name as string statTable.Index = "ID"

statTable.Seek ~- , s If statTable.NoMatch Then MsgBox "illegal station ID " & s Stop cnd If StationString = statTable("Name") End Function Sub TellUser (message As String) 'displays message on screen until key is pressed 'probably would not be used userMsg = message Wait frmMsg End Sub Function TimeLabel (t) As String 'returns null string for times on half hour, ' returns hour 1..12 otherwise Dim s As String s = Format(t, "hh:mm AM/PM") If Mid(s, 4, 2) _ "30" Then TimeLabel = ~~
Else s = Formats, "h AM/PM') 'strip off AM/PM
TimeLabel = Lefts, Lens) - 3) End If End Function Function TimeString (abate) As String 'format a date as 12-hour time without AM/pM or leading zero Dim theTime As String theTime = Format(aDate, "hh:mm AM/PM") theTime = Left(theTime, 5) 'take just "hh:mm" part If Left(theTime, 1) _ "0" Then theTime = Right(theTime, 4) End If TimeString = theTime End Function Sub Wait (F As Form) 'Allows one form to wait for another to hide itself F.Show While (F.Visible) ' DoEvents wend End Sub -----= WEEK form code =___-__ Option Explicit 'stacked channel' view to be used with TV search and ' possibly other minimal searches (would need modification in ApplyFilter) Dim allData(8) As snapshot 'all data within time period Dim filterDatalB) As snapshot 'a snapshot for each day in the view Dim NDays As Integer 'number of days in display Dim NSlots As Integer 'number o~ time slots in display Dim NProgs As Integer 'number of programs in display Dim colorField As String 'the database field that determines item color '(the field should contain an integer) Dim inPreview As Integer 'boolean 'if true, preview should show Dim refDate 'reference date for data time slots Dim slotsPerDay As Integer 'number of slots allowed per day Dim currDay 'number of current day Dim dayWidth As Integer 'width of day labels Dim lblHeight As Integer 'height of day labels Dim infoHeight As Integer 'height of specialized info panel Dim timeHeight 'height of time labels Dim startTime 'beginning time for view Dim TSBegin As Long 'first time slot of current day Dim TSEnd As Long 'last time slot of current day Dim TScurrent As Long 'time slot of current program Sub ApplyFilter () 'filter for a particular show by title in userString Dim i As Integer 'counter 'create snapshot for each day For i = 1 To NDays allData(i).Filter = "Title = """ & userString & """"
Set filterData(i) = allData(i>.CreateSnapshot() filterData(i).Sort = "StartTS"
Set filterData(i) = filterData(i).CreateSnapshot() Next i End Sub Sub ChangeSel (d As String) 'perform view navigation Dim current 'as database marker Dim success As Integer 'boolean Dim s As Integer 'station number Dim best Dim TS As Long 'time slot Dim F As snapshot Dim aDay As Integer Dim marker 'as bookmark Dim arrows As String 'save values, initialize values current = filterData(currDay).Hookmark Set F = filterData(currDay) s = F("Station") TS = TScurrent aDay = currDay success = False Select Case d Case "Right"

'move to later time, same day F.FindNext ~StartTS > " & Str(TS) success = Not F.NoMatch If success Then 'check if info arrows needed TS = F("StartTS") F.MoveNext If not F.EOF Then If F("StartTS") = TS Then infoArrows "down"
Else infoArrows "none"
End If Else infoArrows "none"
End If F.MovePrevious End If Case "Left"
'move to earlier time, same day F.FindPrevious "StartTS < " & Str(TS) success = Not F.NoMatch If success Then TS = F("StartTS") 'go to top of column F.FindFirst "StartTS = " & Str(TS) TS = F("StartTS") 'check if info arrows needed F.MoveNext If Not F.EOF Then If F("StartTS") = TS Then infoArrows "down' Else infoArrows "none"
End If Else infoArrows "none"
End If F.MovePrevious End If Case 'Down' 'move to later day, trying to keep close to previous time slot if NProQs < 1 Th~a Exit Sub 'do nothing if all snapshots empty aDay = aDay ~ 1: TS = TS t 48 While Not success And aDay <= NDays Set P = filterData(aDay) F.FindFirst "StartTS > " & Str(TS) If F.NoMatch Then 'no prop to right, look left for any programs If Not F.EOF Then F.MoveLast If Not F.EOF Then success = True TS = F("StartTS") End If Else 'save program to right, count time slots away, check left marker = F.Bookmark best = F("StartTS") - TS
F.FindLast "StartTS <_ " & Str(TS) If F.NoMatch Then 'no prog to left, take program to right F.Bookmark = marker TS = TS + best Else 'check distances from previous time slot If TS - F("StartTS") > best Then 'right prog closest F.Bookmark = marker TS = TS + best Else 'left prog closest TS = F("StartTS") End If End If 'either way, we found a program success = True End If aDay = aDay + 1: TS = TS + 48 Wend aDay = aDay - 1: TS = TS - 48 If success Then 'make sure to be at the top of a column F.FindFirst "StartTS = " & Str(TS) If F.NoMatch Then Stop 'how did we get a TS with no program in it?
TS = F("StartTS") 'check if info arrows needed F.MoveNext If Not F.EOF Then If F("StartTS") = TS Then infoArrows ~down"
Else infoRrrows "none"
End If Else infoArrows "none' End If F . hbwPrevioua End If Case "Up"
'move to earlier day, trying to keep close to previous time slot If NProgs < 1 Then Exit Sub 'do nothing if all snapshots empty aDay = aDay - 1: TS = TS - 48 While Not success And aDay > 0 Set F = filterData(aDay) F.FindFirst "StartTS > " & Str(TS) If F.NoMatch Then 'no prop to right, look left If Not F.EOF Then F.MoveLast 8, If Not F.EOF Then success = True TS = F("StartTS") End If Else 'save program to right, count time slots away, look left marker = F.Hookmark best = F("StartTS") - TS
F.FindLast "StartTS <_ " & Str(TS) If F.NoMatch Then 'no prog to left, take program to right F.Hookmark = marker TS = TS + best Else 'check distances If TS - F("StartTS") > best Then 'right prog closest F.Hookmark = marker TS = TS + best Else 'left prog closest TS = F("StartTS") End If End If 'either way, we found a program success = True End If aDay = aDay - 1: TS = TS - 48 Wend aDay = aDay + 1: TS = TS + 48 If success Then 'make sure to be at the top of a column F.FindFirst "StartTS = " & Str(TS) If F.NoMatch Then Stop 'how did we get a TS with no program in it?
TS = F(~StartTS~) 'check if info arrows needed F.MoveNext If Not F.EOF Then If F(~StartTS~) = TS Then infoArrows "down"
Else infoArrows "none"
Bnd If Else infoArrows "none' End I f F.MovePrevious End If Case "Next' 'find next program, same time and day F.MoveNext If Not F.EOF Then 'success means still in same time slot success = F("StartTS"1 = TS

End If 'set arrows If success Then F.MoveNext arrows = "up"
If Not F.EOF Then If F("StartTS") = TS Then arrows = "both"
End If F.MovePrevious infoArrows arrows End If Case "Prior"
'find previous program, same time and day F.MovePrevious If Not F.HOF Then 'success means still in same time slot success = F("StartTS") = TS
End If 'set arrows If success Then F.MovePrevious arrows = "down"
If Not F.BOF Then If F("StartTS") = TS Then arrows = "both"
End If F.MoveNext infoArrows arrows End If Case "none' 'stay at current program, update the arrows (used at startup) If Not F.EOF Then F.MoveNext arrows = "none"
If Not F.EOF Then If F("StartTS") = TS Then arrows = "down"
End If F.MovePrevious infoArrows arrows End If End Select If success That ' updat~
TScurr~at ~ F("StartTS") currDay ~ aDay DisplayProg Else 'restore database position filterData(currDay).Hookmark = current End If 'set begin and end time slots for current day TSHegin = DateDiff("n", refDate, (startTime + currDay - 1)) \ 30 TSEnd = TSBegin + slotsPerDay - 1 End Sub Sub DisplayProg () 'set info box with current program info and highlight position Dim F As snapshot Dim msg As String Set F = filterData(currDay) msg = StationString(F("Station")) & ". " & Format(F("Start"), "h:mm AM/PM") msg = msg & " to " & Format(F("Finish"), "h:mm AM/PM, ") msg = msg & Format(F("Title")) msg = msg & Chr(13) & "(episode info here)" '& Format(F("Episode")) 'note: current database does not contain episode information SetInfo msg, Color~FlcolorField) Mod 9) shpProg(0).Visible = False selector. Visible = False Position shpProg(0), F("StartTS"), F("FinishTS") CPlace 0, selector, shpProg(0) shpProg(0).Visible = True selector. Visible = True End Sub Sub DoPreview () 'Construct an appropriate preview message and display Dim msg As String msg = filterData(currDay)("Title") msg = msg & Chr(13) & "on " & StationString(filterData(currDay)("Station")) 5~
Chr(13) msg = msg & CategoryString((filterData(currDay)("Type")), (filterData(currDay)("Category"))1 msg = msg & Chz(13) & DayString(Weekday(filterData(currDay)("Start")), "long°) msg = msg & ", " & Format(filterData(currDay)("Start"), "mmm d, yy h:mm AM/PM") msg = msg & Chr(13) & " to " & Format(filterData(currDay)("Finish"), "h:mm AM/PM") popup.Caption = msg SizeAControl popup, (lblTime(1).top + 1.5 ' lblTime(ll.Height), 12, (lblDay(ll.Width), 45 popup.Visible = True inPreview = True End Sub Sub DoSelect (1 'set data for ssiection and go to TV.
userStation = filterData(currDayl("Station") userStart = filterDatalcurrDay)("Start") returnCode = TOTtI
Me. Hide End Sub Sub DrawProg (duplicates As Integer, index As Integer) 'draw a program shape in display, marking it if there are duplicates at the identical time slot 'shpProg(0) should be at the desired location Dim above, below, side, wide Const GAP = .3 above = shpProg(0).top below = shpProg(0).Height side = shpProg(OI.Left wide = shpProg(0).Width ForeColor = blackCOLOR 'line color, thin black outline FillStyle = 0 'solid drawwidth = 1 Select Case duplicates Case 0 'draw the program in the given color fillColor = Color(index) Line (side, above)-(side + wide, above + below - .5 ' GAP), B
Case 1 'draw the program in grey and mark it fillColor = greyCOLOR 'indicate duplicates (which may be of different colors) Line (side, above)-(side + wide, above + below - .5 * GAP), , H
'draw icon above = above + GAP
side = side + GAP
wide = 2 * GAP
drawwidth = 2 Line (side, above)-(side + wide, above + wide) Line (side, above + wide)-(side + wide, above) Line (side, above + .5 * wide)-(side + wide, above + .5 * wide) Line (side + .5 * wide, above)-(side + .5 * wide, above + wide) Case Else 'no need to redraw duplicate marks End Select End Sub Sub Form_Activate () Dim i As Integer 'counter Static saveFilter Aa String If sav~Filt~r = us~rString Then sameFilter = True saveFilt~r ~ userStrin9 SetStatus 'This Week: ~ & userString, greyCOLOR
'if not same form, erase and redraw the week schedule If Not SamePilter Then Me.Cls SetInfo ~Loading program information...~, GREY
shpProg(0).Visible = Falsa selector. Visible = False infoAzrows ~none~
DoEvents ApplyFilter MakeDisplay sameFilter = True End If End Sub Sub Form_KeyDown (KeyCode As Integer, Shift As Integer) Dim index As Integer Dim n As Integer Select Case KeyCode Case Asc(~Q~) End Case B_HACK
returnCode = HACK
Me. Hide Case H_HELP
sameFilter = True InvokeHelp Case H_PREVIEW
If inPreview Then inPreview = False popup.Visible = False Else inPreview = True End If Case BRIGHT
ChangeSel ("Right") Case B_LEFT
ChangeSel ("Left') Case H UP
ChangeSel ("Up") Case B_DOWN
ChangeSel ("Down') Case B_SELECT
If Not filterData(currDay).EOF Then DoSelect Case B_PAGEDOWN
ChangeSel ("Next') Case H_PAGEUP
ChangeSel ("Prior') Case B_FILTER
'go back to frmS~lect to choose a new title returnCode = PIC1~
Me.Hid~
Case B_0 returnCod~ = SHORTCUT
Me. Hide End Select If inPreview Then DoPreview Else popup.Visible = False End If End Sub Sub Form_Load () Jim i As Integer 'set form colors and fonts Me.HackColor = formCOLOR
shpProg(0).HackColor = BorderColor lblDay(0).BackColor = backgroundCOLOR
selector.9orderColor = HorderColor dayLine(0).BorderColor = divideCOLOR
lblTime(0).ForeColor = slotCOLOR
shpSlot(0).HorderColor = slotCOLOR
infoPanel.FontSize = mediumFONT
If displayMode = "TV" Then lblDay(0).FontSize = smallFONT
lblTime(0).FontSize = smallFONT
popup.FontSize = mediumFONT
Else lblDay(0).FontSize = largeFONT
lblTime(0).FontSize = larqeFONT
popup.FontSize = largeFONT
End I f 'cover up the standard info box SizeAForm Me, 0, DispTop + DispHeight, DispLeft, dispWidth 'set scale and size objects NDays = 7 NSlots = 48 daywidth = 4 lblHeight = 2 infoHeight = 6 If displayMode = "TV" Then upArrow.Left = 8950 downArrow.Left = 8950 timeHeight = 2 downArrow.top = 650 upArrow.top = 150 Else timeHeight = 1.5 downArrow.top = 1525 End If Me.Scale (0, 0)-(NSlots + dayWidth, NDays * lblHeight + 2 * timefieight +
infoHeight) selector.eord~rWidth = 1 'place extsnd~d info panel SizeAControl infoPan~l, 0, infoHeight, 0, (Me.ScaleWZdth) infoPanel.CaDtion = "" ' infoPanel.Visible = True 'place day labels along side SizeAControl IblDay(01, lblHeight + infoHeight, lblHeight, 0, dayWidth For i = 1 To NDays Load lblDay(i) lblDay(i).Caption = DayString(i, "short") lblDay(i).top = (i - 1) ' lblHeight + info8eight + 2 * timeHeight lblDay(i).Visible = True Next i a~
'put AM/PM label across top SizeAControl iblDay(0), infoHeight, timeHeight, dayWidth, NSlots lblDay(0).Caption = "AM NOON PM"
lblDay(0).Visible = True 'put time labels across top SizeAControl lblTime(0), (lblDay(0).Height) + infoHeight, timeHeight, 0, 2 For i = 1 To NSlots \ 2 Load lblTime(i) lblTime(i).Caption = TimeLabel(DateAdd("h~, (i - 1), fakeTODAY)>
lblTime(i).Left = 2 * i + 2 lblTime(i).Visible = True Next i NProgs = 0 sameFilter = False InputData Form Activate End Sub Sub infoArrows (direct As String) 'show or hide arrows in info box indicating presence of more programs at identical time Select Case direct Case "up"
downArrow.Visible = False upArrow.Visible = True Case "down"
upArrow.Visible = False downArrow.Visible = True Case "both' upArrow.Visible = True downArrow.Visible = True Case "none' upArrow.Visible = False downArrow.Visible = False End Select End Sub Sub InputData () 'part of form_load 'opens the database and creates allData snapshots Dim DB As database Dim RefSna~ 11s snapshot Dim i As Integer Set DH = OpenDatabase(TVDB) 'get reference date and number of stations Set RefSnap = DH.CreateSnapshot("Reference") RefSnap.FindFirst 'Name = 'Date'"
refDate = DateValue(RefSnap("Data")) RefSnap.FindFirst "Name = 'NStations'"
Set allData(0) = DB..CreateSnapshot("Programs") startTime = refDate TSHegin = 0 TSEnd = TSHegin + 48 - 1 For i = 1 To 7 allData(0).Filter = Overlap(TSHegin + 48 * (i - 1), TSEnd + 48 * (i -Set allData(i) = allData(0).CreateSnapshot() Next i Set allData(0) = Nothing 'no longer need data all together End Sub Sub MakeDisplay () 'create schedule display on screen Dim i As Integer 'counter Dim d As Integer 'day Dim T5last As Integer 'last time slot affected Dim F As snapshot 'convenience Dim offset As Integer 'used twice: dayline offset & number of programs sharing a time slot 'draw horizontal day lines drawwidth = 2 ForeColor = lblDay(0).HackColor offset = infoHeight + 2 * timeHeight Foz i = 0 To NDays Line (0, offset + i * lblHeightl-(52, offset + i ~ lblHeight) Next i 'place program shapes offset = 0 'keep track of how full a particular time slot is colorField = 'Category' 'note: should this be 'Type" instead?
For d = 1 To NDays currDay = d TSlast = -1 Set F = filterData(d) If Not F.EOF Then F.MoveFirat Do While Not F.EOF
If F("StartTS') = TSlast Then offset = offset + 1 DrawProQ offset, -1 8lse offset = 0 Position shpPro9(0), F("StartTS"), F("FirrishTS") DrawProQ offaet,~F(colorField) Mod 9 TSlast = F("StartTS") End If F.MoveNext Loop F.MoveFirst End If Next d 'initialize stuff a=1 currDay = 1 While d <= NDays If filterData(d).EOF Then d = d + 1 Else NProgs = 1 'just to make sure it is more than 0 currDay = d d = NDays + 1 End If Wend shpProg(O).ZOrder selector.ZOrder If Not filterData(currDay).EOF Then TScurrent = filterData(currDay)("StartTS") DisplayProg ChangeSel "none"
End If End Sub Sub Position (shape As Control, start, finish) 'position a program shape Dim leftTS
Dim rightTS
Const smallGAP = .1 'convert to time slot scale leftTS = start - 48 * (currDay - 1) rightTS = finish - 48 * (currDay - 1) 'set left and width shape. Left = dayWidth + leftTS
shape. Width = rightTS - leftTS + 1 - smallGAP
'cut off at beginning of day if shape. Left < dayWidth Then shape. Width = shape. Width - (dayWidth - shape. Left) shape. Left = dayWidth End If 'set top and height shape. Height = 2 - 2 * smallGAP
shape. top = lblDay(currDay).top + smallGAP
End Sub Sub SetInfo (msg As String, Color) 'override the global SetInfo to write to my own info panel infoPanel.BackColor = Color infoPanel.Caption = msg End Sub ----_= WKDAY form code =-____ Option Explicit 'schedule of 5 weekdays at a particular time 'uses time-slot guided navigation Dim allData(8) As snapshot 'all data within time period Dim filterData(8) As snapshot 'a snapshot for each day in the view Dim NDays As Integer 'number of days in display Dim NSlots As Integer 'number of time slots in display Dim NProgs As Integer 'number of programs in display Dim NStation As Integer 'number of stations in display Dim MaxStation As Integer 'total number of stations in database Dim colorField As String 'the database field that determines item color '(the field should contain an integer) Dim inPreview As Integer 'boolean 'true if preview should show Const sideGap = .OS 'space at beginning and end of program Const topGAP = 4 'space btwn time label and first program shape Dim refDate 'reference date for data time slots Const lbIHEIGHT = 40 'height of day and time labels (in 500 scale) Const MINProgWidth = .2 'minimum width of a program shape as fraction of slot Dim slotsPerDay As Integer 'number of slots allowed per day Dim currDay As Integer 'number of current day Dim startTime 'start day and time of display Dim TSHegin As Long 'first time slot Dim TSEnd As Long 'last time slot Dim TScurrent As Long 'current time slot Dim rowOffset 'distance between (tops of) rows in the schedule Sub ApplyFilter () 'create data set of onpy TV programs that fit into query string filters(TV) 'set number of stations and database field determining color Dim i As Integer 'counter If InStr(filters(TV), "Station") Then NStation = 10 'note: need better mechanism for displaying favorite channels colorField = "Type"
Else NStation = MaxStation colorField = 'Category' End If For i = 1 To NDays allData(i).Filter = filters(TV>
Set filterDatali) = allData(i).CreateSnapshot() Next i End Sub Sub ChangeSel (dJV StsinQ) Dim current, tirstMatch 'as database markers Dim success J1s InteQes 'boolean . ' Dim s As Integer 'station Dim TS As Long 'time slot Dim F As snapshot Dim aDay As Integer Dim best As Integer current = filterData(currDay).Hookmark Set F = filterData(currDay) s = F("Station") TS = TScurrent aDay = currDay success = False If d = "Right" Then 'check to immediate right, same time slot F.MoveNext If Not F.EOF Then success = F("Station') = s And F("StartTS") = TS
End If If Not success Then 'check time slots to right shpSlot(TS - TSBegin + I + (currDay - 1) * slotsPerDay).FillStyle =
1'transparent lblTime(TS - TSHegin + 1 + (currDay - 1) * slotsPerDay).HackStyle =
0'transparent While aDay <= NDays And Not success While TS < TSEnd And Not success TS = TS + 1 'check stations at and below current F.FindFirst Overlap~TS, TS) & ~And Station >_ " & s If F.NoMatch Then 'take the last station above current F.FindLast Overlap(TS, TS) & ~And Station < ~ & s success = Not F.NoMatch Else 'save this match and check if stations above are closer success = True best = F(~Station~1 - s firstMatch = F.Hookmark 'check previous F.FindPrevious Ovezlap(TS, TS) If F.NoMatch Then 'no previous match, stick with first match F.Hookmark = firstMatch Else If s - F('Station") > best Then 'first match was closer F.Bookmark = firstMatch End If End If End If Wwad If Not success Then TSBegin = TSBegin + 48 ' TSEnd = TSBegin + slotsPerDay - 1 TS = TSHegin - 1 aDay = aDay + 1 Set F = filterData(aDay) End If Wend End If ElseIf d = "Left' Then 'check to immediate left, same time slot F.MovePrevious If Not F.BOF Then success = F(~Station") = s And F("FinishTS") = TS
End If If Not success Then 'check previous time slots shpSlot(TS - TSHegin + 1 + (currDay - 1) ~ slotsPerDayl.FillStyle =
1'transparent lblTime(TS - TSBegin + 1 + (currDay - 1) " slotsPerDay).BackStyle =
0'transparent While aDay >= 1 And Not success 'for each day to left While TS > TSBegin And Not success 'look for previous slot this day TS = TS - 1 F.FindFirst Overlap(TS, TS) & " And Station >_ " & Str(s) If F.NoMatch Then 'none with station less than current, look for first one down F.FindLast Overlap(TS, TS) success = Not F.NoMatch Else success = True 'mark this one and check up firstMatch = F.Bookmark best = F("Station") - s F.FindPrevious Overlap(TS, TS)'will be less than current station If F.NoMatch Then 'none lower, keep first match F.Hookmark = firstMatch Else If s - F("Station') > best Then 'first match was closer F.Hookmark = firstMatch End If End If End If Wend If Not success Then 'try previous day aDay = aDay - 1 TSBegin = TSBegin - 48 TSEnd = TSHegin + slotsPerDay - 1 TS = TSEnd + 1 Set F = filterData(aDay) End If wend End If ElseIf d = 'Down' Then 'move down within time slot 'note: should we have option to only stop at programs that begin_ in current time slot?
' (with exception of first time slot in each day, of course) F.Hookmark = current F.FindNext ~(~ ~ Overlap(TS, TS) ~ ~ And Station <> ~ & Str(s) & ~)"
success = Not F.NoMatch ElseIf d = ~up~ Then 'move down within time slot 'note: should we have option to only stop at programs that begin_ in currer.~
time slot?
' (with exception of first time slot in each day, of course) F.Bookmark = current F.FindPrevious "(" & Overlap(TS, TS) & " And Station <> " & Str(s) & ~)~
success = Not F.NoMatch ElseIf d = "Top" Then F.FindFirst Overlap(TS, TS) success = Not F.NoMatch ElseIf d = "Bottom" Then F.FindLast Overlap(TS, TS) success = Not F.NoMatch End If If success Then 'update TScurrent = TS
currDay = aDay DisplayProg Else 'restore position in data filterData(currDay).Bookmark = current End If 'restore other stuff TSBegin = DateDiff("n", refDate, (startTime + currDay - 1)) \ 30 TSEnd = TSHegin + slotsPerDay - 1 shpSlot(TScurrent - TSBegin + 1 + (currDay - 1) ' slotsPerDay).FillStyle =
0'solid ' lblTime(TScurrent - TSBegin + 1 + (currDay - 1) ' slotsPerDayl.BackStyle =
1'opaque End Sub Sub DisplayProq () 'highlight location of current program 'put info for current program in info box Dim F As snapshot Dim msg As String Set F = filterData(currDay) 'highlight progzam shpProy(0).Visible = Palse selector. Visible = False Position shDProQlO), F("Start"), F("Finish"), F("Station") CPlace 0, selector, shpProg(0) shpProg(0).Visible = True selector. Visible = True 'set message msg = StationString(F("Station")) & " - " & F("Title") & " "
msg = msg & Format(F("Start'), "h:mm AM/PM") msg = msg & " to " & Format(F("Finish"), "h:mm AM/PM") SetInfo msg, Color(F(colorField) Mod 9) End Sub Sub DoPreview () 'Co.~.strsct an appropriate preview message and display Dim msg As String msg = "Station: " & StationString(filterData(currDay)("Station")) msg = msg & Chr(13) & "Title: " & filterData(currDay)("Title") & Ch=('a3) msg = msg & CategoryString((filterData(currDay)("Type")), (filterData(currDay)("Category"))) msg = msg & Chr(13) & "Time: " & Format(filterData(currDay)(°Start~), "mmm d,yy h:mm AM/PM") msg = msg & Chr(13) & " to " & Format(filterData(currDayl("Finish"), ~h:ssn AM/PM") 'show popup with preview message popup.Caption = msg popup.Top = lblTime(1).Top + 2 ' lblTime(1).Height popup.Left = 2 popup.Width = slotsPerDay ~ NDays - 3 popup.Visible = True inPreview = True End Sub Sub DoSelect () 'set data for selection and go to TV
userStation = filterData(currDay)("Station') userStart = filterData(currDay)("Start') returnCode = TOTV
Me. Hide End Sub Sub Form_Activate () Dim i As Integer 'counter Static saveFilter As String If saveFilter = filtera(currDomain) Then sameFilter = True saveFilter = filters(currDomain) SetStatus 'Evening TV: " & currFilter(TV), greyCOLOR
'note: "Evening TV' label would be variable If inPreview Then popup.Visible = False inPreview = False End If If newUaer Then popup.Caption = ~Prass 'category' to change the kind of programs, diplayed.°
popup.Viaible = True 'note: ought to make popup go away on timer as well as button press newUser = False End If If sameFilter Then 'restore darkened time-slot If TScurrent > 0 Then shpSlot(TScurrent - TSBegin + i + (currDay - 1) * slotsPerDayf.Fi~_3~y_z = 0'solid lblTime(TScurrent - TSBegin + 1 + (c~.:rrDay - 1> * slotsPerDay).HackSty~e - a'solid End If Else 'unload old program shapes and redo display SetInfo "Loading program information... , GREY
shpProg(0).Visible = False lblDay(0).Visible = False lblTime(0).Visible = False shpSlot(0).Visible = False selector. Visible = False For i = 1 To NProgs Unload shpProg(i) Next i ApplyFilter MakeDisplay sameFilter = True End If End Sub Sub Form_KeyDowa (KeyCode As Integer, Shift As Integer) 'note: always turn off the black slot before leaving, so it doesn't mess up later views Dim Index As Integer Dim n As Integer Select Case KeyCode Case Asc("Q") End Case B_BACR
shpSlot~TScurrent - TSBegin + 1 + (currDay - 1) * slotsPerDay).FillStyle =
1'transparent lblTime(TScurrent - TSHegin + 1 + (currDay - 1) * slotsPerDay).HackStyle =
0'transparent returnCode = HACK
Me. Hide Case H_HELP
sameFilter = True InvokeFielp Case B_PREVIEW
If inPreview Then po~up.Visible = False inPreview = False Else inPreview = True End If Case BRIGHT
If Not filterData(currDay).EOF Then ChangeSel ("Right') Case B_LEFT
If Not filterData(currDay).EOF Then ChanqeSel ('Left") Case B UP
If Not filterData(currDay).EOF Then ChaageSel ("Up"1 Case H DOWN

If Not filterData(currDay).EOF Then ChangeSel ("Down") Case B_SELECT
shpSlot(TScurrent - TSBegin + 1 + (currDay - 1) * slotsPerDay).Fiil3ty'~e =
1'transparent lblTime(TScurrent - TSBegin + 1 ~ (currDay - 1) * slotsPerDay).BackSty'_e =
0'transparent If Not filterData(currDayl.EOF Then DoSelect Case B_PAGEDOWN
If Not fiiterData(currDay).EOF Then ChangeSel ("Bottom") Case B_PAGEUP
If Not filterData(currDay).EOF Then ChangeSel ("Top") Case H FILTER
shpSlot(TScurrent - TSHegin + 1 + (currDay - 1) * slotsPerDay).FillStyle =
1'transparent lblTime(TScurrent - TSBegin + 1 + (currDay - 1) * slotsPerDay).HackStyle =
0'transparent returnCode = Filter Me. Hide Case B_0 shpSlot(TScurrent - TSBegin + 1 + (currDay - 1) * slotsPerDay).FillStyle =
1'transparent lblTimelTScurrent - TSBegin + 1 + (currDay - 1) * slotsPerDayl.HackStyle =
0'transparent returnCode = SHORTCUT
Me. Hide End Select If inPreview Then DoPreview Else popup.Visible = False End If End Sub Sub Fob Load () Dim d As Integer, i As Integer, n As Integer 'counters Dim t 'as time 'set form colors and fonts Me.BackColor = formCOLOR
shpProg(0>.BackColor = BordezColor lblDay(0).HackColor = backgroundCOLOR
selector.BorderColor = BorderColor dayLine(0).BorderColor = divideCOLOR
lblTime(0).PoraColor = slotCOLOR
shpSlot(0).HorderColor = slotCOLOR
If displayMode = 'TV' Then lblDay(0).FontSize = smallFONT
lblTime(0).FontSize = smallFONT
popup.FontSize = mediumFONT
Else lblDay(0).FontSize = largeFONT
lblTime(0).FontSize = largeFONT
popup.FontSize = largeFONT
End I f 'set scale and size objects SizeAForm Me, DispTop, DispHeight, DispLeft, DispWidth Me. Scale (0, 0)-(500, 500) SizeAControl lblDay(0), 0, lbIHEIGHT, 0, 500 SizeAControl lblTime(0), lbIHEIGHT, lbIHEIGHT, 0, SizeAControl shpSlot(0), 2 * lbIHEIGHT + .5 * topGAP,lbIHEIGHT
500 - 2 * 0 SizeAControl popup, 250, 200, 250, 200 , , selector.BorderWidth = 1 dayLine(0).Y1 = 0 dayLine(OI.Y2 = 500 'init variables sameFilter = False sameView = False inPreview = False NProgs = 0 NDays = 5 'five week days slotsPerDay = 6 'three hours, 6 half-hour slots NSlots = NDays * slotsPerDay startTime = fakeToday + CVDate("7:00 PM") 'time woulde and set be variabl at activate startTime = DateAdd("d", 2 - Weekday(startTime), startTime startTime) 'set to Monday(=2>

'set time slot scale and place the permanent objects Me.ScaleWidth = NSlots lblTime(0).Width = 1 shpSlot(0).Width = 1 For i = 1 To NDays 'place and caption day labels Load lblDay(i) SizeAControl lblDay(i), 0, lbIHEIGHT, slotsPerDay slotsPerDay * (i - 1), lblDay(i).Caption = DayString(i + 1, "short") lblDay(i).Visible = True Next i For d = 1 To NDays For i = 1 To slotsPerDay n = (d - 1) * slotsPerDay + i 'place time slot dividers Load shpSlot(n) shpSlot(n).Move n - 1 shpSlot(n).ZOrdar shpSlot(n).Visible = True 'plae~ time Iab~ls Load lblTfa~(n) lbl?im~(n).Mow n - 1 lblTim~(n).20rd~r , t = DateAdd(n, 30 * (i-- 1), startTime) ' lblTim~(n).Caption = TimeLabelft) 'time captions would be set at activate since they change (when could sameView false) shpSlot(i).FillStyle = 1'transparent lblTime(i).HackStyle = 0'transparent lblTime(n).Visible = True Next i 'place day separators, but don't show yet If d < NDays Then 2 ) 70429 Load dayLine(d) dayLine(d).X1 = d * slotsPerDay dayLine(d).X2 = d * slotsPerDay End If Next d InputData Form_Activate sameView = True End Sub Sub InputData () 'part of form_load 'opens the database and creates allData snapshots Dim DH As database Dim RefSnap As snapshot Dim i As Integer Set DH = OpenDatabase(TVDH) 'assumes data already sorted by station, start 'get reference date and number of stations Set RefSnap = DB.CreateSnapshot("Reference~) RefSnap.FindFirst "Name = 'Date'"
refDate = DateValue(RefSnap('Data~)) RefSnap.FindFirst 'Name = 'NStations'~
MaxStation = Val(RefSnap("Data~)) Set allData(0) = DB.CreateSnapshot('Programs") 'create snapshots of all programs for each weekday at fixed time ' time would be variable and these would have to be created at activate TSHegin = DateDiff("n", refDate, startTime) \ 30 TSEnd = TSBegin + slotsPerDay - 1 For i = 1 To 5 allData(0).Filter = Overlap(TSBegin + 48 * (i - 1), TSEnd + 48 * (i - 1)) '48 time slots/day Set allData(i) = allData(0).CreateSnapshot() Next i Set allData(0) = Nothing 'won't be needing everything since time is fixed End Sub Sub MakeDisDlay () 'create the viaval sch~dul~ of programs from the filtered data Dim d As Iatper 'day , Dim c As Integer 'counter ' Dim F As snapshot 'convenience Dim hasProgs As Integer 'remember the first day that has pzograms in it 'set times showing If Not sameView Then 'would change time labels here End If 2~70a29 'place program shapes hasProgs = 0 c = 0 'init count of shpProgs On Error GoTo ErrorHandler 'if we run out of shpProgs to allocate For d = 1 To NDays currDay = d Set F = filterData(d) 'create a shape control for each TV program in the data If Not F.EOF Then F.MoveFirst Do While Not F.EOF
Load shpProg(c + 1) c = c + 1 'increment only after allocate succeeds shpProg(c).BackColor = Color(F(colorField) Mod 9) Position shpProq(c), F("Start"), F("Finish"), F("Station") shpProg(c).ZOrder shpProg(c).Visible = True F.MoveNext Loop F.MoveFirst If hasProgs = 0 Then hasProgs = d 'remember the first day with programs in it End If Next d MoveOn:
On Error GoTo 0 'quit trapping errors internally 'make day lines visible on top For d = 1 To NDays - 1 dayLine(d).ZOrder dayLine(d).Visible = True Next d 'initialize stuff NProga = c currDay = haaProgs shpProg(0).ZOrder selector.ZOrder If currDay > 0 Then 'set time slot begin and end numbers for current day TSBegin = DateDiff('n', refDate, startTime) \ 30 + 48 ~ (currDay - 1) TSEnd = TSBeQin + slotaPerDay - 1 TScurrent ~ TSBeQin Set P = tilterData(currDay) Do Whili TSeurrent <= TSEnd ~ _ P.FindPisat Overlap(TScurrent, TScurrent) If Not P.NoMatch Then DisplayPro9 Exit Do End If TScurrent = TScurrent + 1 Loop Else TSHegin = DateDiff("n", refDate, startTime) \ 30 TSEnd = TSHegin + slotsPerDay - 1 21 ~d~2 TScurrent = TSBegin currDay = 1 End If shpSlot(TScurrent - TSHegin + 1 + (currDay - 1) t slotsPerDay).Fi113ty1e =
0'solid lblTime(TScurrent - TSBegin + 1 + (currDay - 1) * slotsPerDay).HackStyle =
1'opaque Exit Sub ErrorHandler:
If Err = 342 Then 'ran out of room to allocate program shapes, quit drawing Resume MoveOn Else Dim msg msg = Error & Chr(13) & "Resume or Cancel?' msg = InputBox(msg, "Error Correction", "Resume") If msg = "" Then Stop Resume MoveOn End If End Sub Sub Position (shape As Control, start, finish, station) 'position a program shape for display Dim relativeL, relativeW, dayStart Dim edge 'convert a daytime to position in NSlot scale dayStart = startTime + currDay - 1 relativeL = (start - dayStart) * 48 relativeW = (finish - dayStart) " 48 - relativeL
'clip shapes off at day boundaries If relativeL < 0 Then relativeW = relativeW + relativeL
relativeL = 0 End If If relativeW + relativeL > slotsPerDay Then relativeW = slotsPerDay -relativeL
'set left and width of shape edge = (currDay - 1) ~ slotsPerDay shape. Left = relatiwL + edge + sideGap shape. Width = relative~l - 2 ~ sideGap 'enforce minimum width so program is visible If shape. Width < MINProQWidth Then shape. Width = MINProgWidth 'set top according to station 'note: this scheme only works because stations are named l..n rowOffset = ((500 - Z ~ lbIHEIGHT - shpProg(0).Height) ~~/ NStation)_'_.
shape. Top = shpSlot(0).Top + topGAP + (station - 1) * rowOffset End Sub lol Thus, it will now be understood that there has been disclosed a method and apparatus of finding and selecting a program to view from a large schedule of TV
programs. While the invention has been particularly illustrated and described with reference to preferred embodiments thereof, it will be understood by those skilled in the art that various changes in form, details, and applications may be made therein.
For example, color coding of the individual items of the reduced representations and of the various entries in the various grid displays could be used to assist the viewer in making rapid program selections. Another example is that it is easily within the capabilities of this art to modify a TV set by integrating the set top box according to the present invention into it. It is accordingly intended that the appended claims shall cover all such changes in form, details and applications which do not depart from the true spirit and scope of the invention.

Claims (7)

Claims:
1. Apparatus for selecting an item from a group thereof in a system having display means and interactive movable pointing means for specifying a location in the display means and making a selection at a specified location, the apparatus comprising:
filtration means including subgroup specifiers in the display means and responsive to selection of a subgroup specifier by the pointing means for filtering the group to produce the subgroup specified by the selected subgroup specifier;
means for displaying representations of group items belonging to at least a portion of the subgroup in the display means;
group item selection means for selecting a group item by selecting the representation thereof in the display in response to the pointing means;
means for displaying a reduced representation of the entire subgroup and an indication in the reduced representation of the portion of the group being presently displayed by the display means;
wherein said reduced representation represents a three dimensional representation, the third dimension being location within a logical stack of items having at least one common property; and wherein each item of a logical stack have viewing timeslot as one common property.
2. The apparatus set forth in claim 1, wherein said interactive movable pointing means includes a remote control having:
a first pair of buttons to control changes in location in the display in a first direction;
a second pair of buttons to control changes in location in the display in a second direction; and a third pair of buttons to control changes in location within the logical stack.
3. Apparatus for selecting an item from a group thereof in a system having display means and interactive movable pointing means for specifying a location in the display means and making a selection at a specified location, the apparatus comprising:
filtration means including subgroup specifiers in the display means and responsive to selection of a subgroup specifier by the pointing means for filtering the group to produce the subgroup specified by the selected subgroup specifier;
means for displaying representations of group items belonging to the subgroup in the display means;
group item selection means for selecting a group item by selecting the representation thereof in the display in response to the pointing means; and means for displaying a reduced representation of the entire subgroup and an indication in the reduced representation of the portion of the group being presently displayed by the display means;
said reduced representation displaying means displaying a three dimensional representation, a third dimension being represented as a logical stack of items having at least one common property and;
said interactive movable pointing means includes a remote control having:
a first pair of buttons to control changes in location in the display in a first direction; and a second pair of buttons to control changes in location in the display in a second direction; and a third pair of buttons to control changes in location within the logical stack.
4. A method comprising the steps of:
receiving program schedule data for at least 300 individual channels for a time period of at least a week, said program schedule data having at least individual program titles with each of said individual titles having a respective start and stop time;

storing said program schedule data in local memory for rapid sorting and retrieval in a database format;
displaying a plurality of vertically cascaded cards with each card representing a respective individual title with its particular start time and channel;
filtering the program schedule data in response to interactive user inputs into a subgroup of the program schedule data;
displaying the subgroup of the program schedule data for review; and interactively selecting an individual title from the subgroup of program schedule data for viewing on a TV screen.
5. A method comprising the steps of:
receiving program schedule data for at least 300 individual channels for a time period of at least a week, said program schedule data having at least individual program titles with each of said individual titles having a respective start and stop time;
storing said program schedule data in local memory for rapid sorting and retrieval in a database format;
displaying a plurality of vertically cascaded cards with each card representing a respective individual title with its particular start time and channel;
filtering the program schedule data in response to interactive user inputs into a subgroup of the program schedule data;
displaying the subgroup of the program schedule data for review; and interactively selecting an individual title from the subgroup of program schedule data for recording by a video recording device.
6. A method for choosing a desired program from a large schedule of programs whose data is stored in a local memory, comprising the steps of:
displaying a vertically cascaded group of cards with each card representing a program of a particular time and channel;
displaying a selection window located around a subgroup of said group of cards;

displaying a two-dimensional grid adjacent to said vertically cascaded group of cards in which said subgroup of the programs represented by said vertically cascaded group of cards are shown in greater detail;
displaying a first active area within said selection window highlighting one of said subgroup of programs;
displaying a second active area within said two-dimensional grid, said second active area being located around and highlighting greater details of the program highlighted in said first active area;
moving said first active area in a vertical direction in response to vertical direction arrows to a viewer's input of a remote control; and selecting a desired program by moving said active area to said desired program and actuating a select button for said set top box to make said selection.
7. The method according to claim 6, further comprising the steps of after said active area is moved one location outside of said selection window by inputs from said viewer, moving said selection window to a contiguous subgroup to which said active area has moved.
CA002170429A 1995-03-28 1996-02-27 Method and apparatus for finding and selecting a desired data item from a large schedule of data items using a tv set and a controller similar to a tv-remote-control Expired - Fee Related CA2170429C (en)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US41239395A 1995-03-28 1995-03-28
US412,393 1995-03-28

Publications (2)

Publication Number Publication Date
CA2170429A1 CA2170429A1 (en) 1996-09-29
CA2170429C true CA2170429C (en) 2000-04-25

Family

ID=23632789

Family Applications (1)

Application Number Title Priority Date Filing Date
CA002170429A Expired - Fee Related CA2170429C (en) 1995-03-28 1996-02-27 Method and apparatus for finding and selecting a desired data item from a large schedule of data items using a tv set and a controller similar to a tv-remote-control

Country Status (5)

Country Link
US (2) US5912664A (en)
EP (1) EP0735749B1 (en)
JP (1) JP4142119B2 (en)
CA (1) CA2170429C (en)
DE (1) DE69620287T2 (en)

Families Citing this family (191)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8352400B2 (en) 1991-12-23 2013-01-08 Hoffberg Steven M Adaptive pattern recognition based controller apparatus and method and human-factored interface therefore
US5880768A (en) * 1995-04-06 1999-03-09 Prevue Networks, Inc. Interactive program guide systems and processes
US6769128B1 (en) 1995-06-07 2004-07-27 United Video Properties, Inc. Electronic television program guide schedule system and method with data feed access
US6388714B1 (en) 1995-10-02 2002-05-14 Starsight Telecast Inc Interactive computer system for providing television schedule information
US6323911B1 (en) 1995-10-02 2001-11-27 Starsight Telecast, Inc. System and method for using television schedule information
US8850477B2 (en) 1995-10-02 2014-09-30 Starsight Telecast, Inc. Systems and methods for linking television viewers with advertisers and broadcasters
US6732369B1 (en) 1995-10-02 2004-05-04 Starsight Telecast, Inc. Systems and methods for contextually linking television program information
US6240555B1 (en) 1996-03-29 2001-05-29 Microsoft Corporation Interactive entertainment system for presenting supplemental interactive content together with continuous video programs
US6025837A (en) 1996-03-29 2000-02-15 Micrsoft Corporation Electronic program guide with hyperlinks to target resources
US6469753B1 (en) 1996-05-03 2002-10-22 Starsight Telecast, Inc. Information system
WO1997049237A1 (en) * 1996-06-17 1997-12-24 Starsight Telecast, Inc. Television schedule system with enhanced features
JP3359236B2 (en) * 1996-09-25 2002-12-24 株式会社アクセス Internet unit and Internet TV
NZ335805A (en) * 1996-11-15 2000-05-26 Mindport Bv Method and apparatus for locating a program in an electronic program guide
US20030066085A1 (en) 1996-12-10 2003-04-03 United Video Properties, Inc., A Corporation Of Delaware Internet television program guide system
AU6675098A (en) 1997-02-28 1998-09-18 Starsight Telecast Incorporated Television control interface with electronic guide
GB2340633B (en) * 1997-03-31 2001-01-10 Microsoft Corp Query-based electronic program guide
GB2325537B8 (en) * 1997-03-31 2000-01-31 Microsoft Corp Query-based electronic program guide
WO1998047279A2 (en) * 1997-04-16 1998-10-22 Starsight Telecast, Incorporated Multiple database, user-choice-compiled program and event guide
KR100378538B1 (en) * 1997-06-06 2003-03-29 톰슨 콘슈머 일렉트로닉스, 인코포레이티드 Method and apparatus for selectively changing program guide format by a viewer
US6262722B1 (en) * 1997-07-08 2001-07-17 United Video Properties, Inc. Interactive program guide navigator menu system
BRPI9812104B1 (en) 1997-07-21 2016-12-27 Guide E Inc method for navigating an interactive program guide
EP0933933A4 (en) * 1997-08-21 2004-11-24 Sony Corp Receiver, program retrieval method, and receiving method
ATE217744T1 (en) 1997-09-18 2002-06-15 United Video Properties Inc REMINDER DEVICE FOR INTERNET TELEVISION GUIDES USING ELECTRONIC MAIL
US6016141A (en) 1997-10-06 2000-01-18 United Video Properties, Inc. Interactive television program guide system with pay program package promotion
US6330610B1 (en) * 1997-12-04 2001-12-11 Eric E. Docter Multi-stage data filtering system employing multiple filtering criteria
JP3466071B2 (en) * 1997-12-05 2003-11-10 松下電器産業株式会社 Broadcast receiver
US20010042246A1 (en) 1999-08-04 2001-11-15 Henry C. Yuen Home entertainment system and method of its operation
CA2318844A1 (en) * 1998-01-23 1999-07-29 Index Systems, Inc. Home entertainment system and method of its operation
AU2658999A (en) * 1998-02-04 1999-08-23 Corporate Media Partners Doing Business As Americast Method and system for navigating through content in an organized and categorizedfashion
US7185355B1 (en) 1998-03-04 2007-02-27 United Video Properties, Inc. Program guide system with preference profiles
JP3657424B2 (en) 1998-03-20 2005-06-08 松下電器産業株式会社 Center device and terminal device for broadcasting program information
US7028043B2 (en) * 1998-04-10 2006-04-11 International Business Machines Corporation Creation of customized trees
US20110093898A1 (en) * 1998-06-18 2011-04-21 Rosenthol Joshua A Program guide system with user designated favorite themes
US6763522B1 (en) * 1998-06-30 2004-07-13 Sony Corporation System and method for a digital television electronic program guide
CN1867068A (en) 1998-07-14 2006-11-22 联合视频制品公司 Client-server based interactive television program guide system with remote server recording
AR020608A1 (en) 1998-07-17 2002-05-22 United Video Properties Inc A METHOD AND A PROVISION TO SUPPLY A USER REMOTE ACCESS TO AN INTERACTIVE PROGRAMMING GUIDE BY A REMOTE ACCESS LINK
US6898762B2 (en) 1998-08-21 2005-05-24 United Video Properties, Inc. Client-server electronic program guide
US6594825B1 (en) * 1998-10-30 2003-07-15 Intel Corporation Method and apparatus for selecting a version of an entertainment program based on user preferences
US6799328B1 (en) * 1998-11-23 2004-09-28 Opentv, Inc. Dynamic event information table schedule window
WO2000033571A1 (en) 1998-11-30 2000-06-08 Sony Corporation Information providing device and method
US6766526B1 (en) * 1998-12-03 2004-07-20 United Video Properties, Inc. Smart channel entry system
US6865746B1 (en) 1998-12-03 2005-03-08 United Video Properties, Inc. Electronic program guide with related-program search feature
US7966078B2 (en) 1999-02-01 2011-06-21 Steven Hoffberg Network media appliance system and method
JP2000231432A (en) * 1999-02-12 2000-08-22 Fujitsu Ltd Computer system
US6990676B1 (en) * 1999-03-17 2006-01-24 Sony Corporation Locally stored content previews. Representative of programming content in an electronic programming guide through a graphic image accessed from the hard drive of a set top box
US6847778B1 (en) * 1999-03-30 2005-01-25 Tivo, Inc. Multimedia visual progress indication system
US8689265B2 (en) 1999-03-30 2014-04-01 Tivo Inc. Multimedia mobile personalization system
US6757906B1 (en) * 1999-03-30 2004-06-29 Tivo, Inc. Television viewer interface system
US7992163B1 (en) 1999-06-11 2011-08-02 Jerding Dean F Video-on-demand navigational system
US6817028B1 (en) 1999-06-11 2004-11-09 Scientific-Atlanta, Inc. Reduced screen control system for interactive program guide
US7010801B1 (en) 1999-06-11 2006-03-07 Scientific-Atlanta, Inc. Video on demand system with parameter-controlled bandwidth deallocation
EP1129575A1 (en) * 1999-09-10 2001-09-05 Koninklijke Philips Electronics N.V. Method and apparatus for displaying information units
KR100626833B1 (en) * 1999-11-12 2006-09-22 엘지전자 주식회사 Method for processing data transmitted in a digital broadcast signal
WO2001037560A1 (en) * 1999-11-15 2001-05-25 Matsushita Electric Industrial Co., Ltd. Video searching method and video searching apparatus
US7051352B1 (en) 2000-02-04 2006-05-23 Koninklijke Philips Electronics N.V. Adaptive TV program recommender
EP1196839B1 (en) * 2000-03-17 2006-11-02 Koninklijke Philips Electronics N.V. Method and apparatus for displaying a multi-level menu
US7975277B1 (en) 2000-04-03 2011-07-05 Jerding Dean F System for providing alternative services
US8516525B1 (en) 2000-06-09 2013-08-20 Dean F. Jerding Integrated searching system for interactive media guide
US7200857B1 (en) 2000-06-09 2007-04-03 Scientific-Atlanta, Inc. Synchronized video-on-demand supplemental commentary
US7934232B1 (en) 2000-05-04 2011-04-26 Jerding Dean F Navigation paradigm for access to television services
US8069259B2 (en) 2000-06-09 2011-11-29 Rodriguez Arturo A Managing removal of media titles from a list
US7962370B2 (en) 2000-06-29 2011-06-14 Rodriguez Arturo A Methods in a media service system for transaction processing
JP4942242B2 (en) * 2000-08-25 2012-05-30 ソニー株式会社 Information processing apparatus and method, and recording medium
KR20190096450A (en) 2000-10-11 2019-08-19 로비 가이드스, 인크. Systems and methods for delivering media content
US7340759B1 (en) 2000-11-10 2008-03-04 Scientific-Atlanta, Inc. Systems and methods for adaptive pricing in a digital broadband delivery system
US20020087987A1 (en) * 2000-11-16 2002-07-04 Dudkiewicz Gil Gavriel System and method for creating and editing a viewer profile used in determining the desirability of video programming events
US8341676B1 (en) * 2000-12-01 2012-12-25 JLB Ventures LLC. Method and system for performing an alphabetic search using a single application of keys
US7721310B2 (en) * 2000-12-05 2010-05-18 Koninklijke Philips Electronics N.V. Method and apparatus for selective updating of a user profile
US7970645B2 (en) * 2001-02-23 2011-06-28 Cox Communications, Inc. Method and apparatus for providing targeted advertisements
GB0104781D0 (en) * 2001-02-27 2001-04-18 Pace Micro Tech Plc Representation of EPG programming information
CN1225115C (en) * 2001-02-28 2005-10-26 汤姆森许可公司 System and method for simplifying different types of searches in electronic program guide
JP2002344206A (en) * 2001-05-11 2002-11-29 Murata Mfg Co Ltd Non-reciprocal circuit element and communications equipment
US7568212B2 (en) * 2001-05-29 2009-07-28 Sanyo Electric Co., Ltd. Digital broadcasting receiver
US8266656B2 (en) * 2001-06-06 2012-09-11 Jlb Ventures Llc Method for making selections in search criteria in TV EPGs
US20030046698A1 (en) * 2001-06-11 2003-03-06 Yakov Kamen Methods and apparatuses for conducting a TV EPG search in various search time periods
US7512964B2 (en) 2001-06-29 2009-03-31 Cisco Technology System and method for archiving multiple downloaded recordable media content
US7496945B2 (en) 2001-06-29 2009-02-24 Cisco Technology, Inc. Interactive program guide for bidirectional services
US7526788B2 (en) 2001-06-29 2009-04-28 Scientific-Atlanta, Inc. Graphic user interface alternate download options for unavailable PRM content
US8006262B2 (en) 2001-06-29 2011-08-23 Rodriguez Arturo A Graphic user interfaces for purchasable and recordable media (PRM) downloads
US20030046695A1 (en) * 2001-08-29 2003-03-06 Digeo, Inc. System and method for enabling focused navigation using filtering and direct-tune buttons
US7735102B1 (en) 2001-08-29 2010-06-08 Billmaier James A System and method for focused navigation within a user interface
US7080394B2 (en) * 2001-08-29 2006-07-18 Digeo, Inc. System and method for capturing video frames for focused navigation within a user interface
US20030046694A1 (en) * 2001-08-29 2003-03-06 Digeo, Inc. System and method for displaying option representations with multiple levels of specificity
US7594246B1 (en) * 2001-08-29 2009-09-22 Vulcan Ventures, Inc. System and method for focused navigation within a user interface
WO2003021950A1 (en) * 2001-08-29 2003-03-13 Digeo, Inc. Epg card navigation and caching of tv programs
US7107531B2 (en) 2001-08-29 2006-09-12 Digeo, Inc. System and method for focused navigation within a user interface
US7159176B2 (en) * 2001-08-29 2007-01-02 Digeo, Inc. System and method for focused navigation within a user interface
US7155675B2 (en) * 2001-08-29 2006-12-26 Digeo, Inc. System and method for focused navigation within a user interface
US7159177B2 (en) * 2001-08-29 2007-01-02 Digeo, Inc. System and method for focused navigation within a user interface
US7650569B1 (en) * 2001-08-29 2010-01-19 Allen Paul G System and method for focused navigation within a user interface
US20030046693A1 (en) * 2001-08-29 2003-03-06 Digeo, Inc. System and method for focused navigation within an interactive television user interface
WO2003021951A1 (en) * 2001-08-29 2003-03-13 Digeo, Inc. Navigation using filtering and direct-tune buttons
WO2003021948A1 (en) * 2001-08-29 2003-03-13 Digeo, Inc. Epg card navigation representing time slots
US7107532B1 (en) 2001-08-29 2006-09-12 Digeo, Inc. System and method for focused navigation within a user interface
US7055104B1 (en) * 2002-03-29 2006-05-30 Digeo, Inc. System and method for focused navigation using filters
US20030140073A1 (en) * 2001-12-18 2003-07-24 Todd Wostrel Data table input and real-time dynamic display on a handheld device
US6897904B2 (en) 2002-01-04 2005-05-24 Microsoft Corporation Method and apparatus for selecting among multiple tuners
US7334251B2 (en) 2002-02-11 2008-02-19 Scientific-Atlanta, Inc. Management of television advertising
US20030160759A1 (en) * 2002-02-28 2003-08-28 Koninklijke Philips Electronics N.V. Method and system for displaying search results
US8099680B1 (en) 2002-03-12 2012-01-17 Arris Group, Inc. System and method of contextual pre-tuning
US7174126B2 (en) * 2002-05-03 2007-02-06 Time Warner Interactive Video Group Inc. Technique for effectively accessing programming listing information in an entertainment delivery system
US20040100484A1 (en) * 2002-11-25 2004-05-27 Barrett Peter T. Three-dimensional television viewing environment
US7511710B2 (en) 2002-11-25 2009-03-31 Microsoft Corporation Three-dimensional program guide
US7363591B2 (en) * 2003-01-21 2008-04-22 Microsoft Corporation Electronic programming guide system and method
US7493646B2 (en) 2003-01-30 2009-02-17 United Video Properties, Inc. Interactive television systems with digital video recording and adjustable reminders
JP4815096B2 (en) * 2003-06-12 2011-11-16 株式会社日立製作所 Information search / playback apparatus and display method thereof
KR100562904B1 (en) * 2003-09-02 2006-03-21 삼성전자주식회사 Method for Displaying EPG Information Using Mini Map
US7984468B2 (en) 2003-11-06 2011-07-19 United Video Properties, Inc. Systems and methods for providing program suggestions in an interactive television program guide
US8161388B2 (en) 2004-01-21 2012-04-17 Rodriguez Arturo A Interactive discovery of display device characteristics
US7798903B2 (en) * 2004-04-30 2010-09-21 Microsoft Corporation System and method for accessing system software in a gaming console system via an input device
US8578420B2 (en) * 2004-05-05 2013-11-05 Ati Technologies Ulc Method and apparatus for automated display of video programming guide information
US20050251750A1 (en) * 2004-05-10 2005-11-10 Robert Vallone Television viewer interface system
US20050289593A1 (en) * 2004-05-26 2005-12-29 Skipjam Corp. Method and system for displaying and selecting content of an electronic program guide
US20050273815A1 (en) * 2004-06-04 2005-12-08 Ati Technologies Inc. Method and apparatus for the display of electronic program guide information
US7631336B2 (en) 2004-07-30 2009-12-08 Broadband Itv, Inc. Method for converting, navigating and displaying video content uploaded from the internet to a digital TV video-on-demand platform
US9641902B2 (en) 2007-06-26 2017-05-02 Broadband Itv, Inc. Dynamic adjustment of electronic program guide displays based on viewer preferences for minimizing navigation in VOD program selection
US7590997B2 (en) 2004-07-30 2009-09-15 Broadband Itv, Inc. System and method for managing, converting and displaying video content on a video-on-demand platform, including ads used for drill-down navigation and consumer-generated classified ads
US11259059B2 (en) 2004-07-30 2022-02-22 Broadband Itv, Inc. System for addressing on-demand TV program content on TV services platform of a digital TV services provider
US8806533B1 (en) 2004-10-08 2014-08-12 United Video Properties, Inc. System and method for using television information codes
US7895218B2 (en) * 2004-11-09 2011-02-22 Veveo, Inc. Method and system for performing searches for television content using reduced text input
US20060101499A1 (en) * 2004-11-09 2006-05-11 Veveo, Inc. Method and system for secure sharing, gifting, and purchasing of content on television and mobile devices
US20060101504A1 (en) * 2004-11-09 2006-05-11 Veveo.Tv, Inc. Method and system for performing searches for television content and channels using a non-intrusive television interface and with reduced text input
US8122034B2 (en) 2005-06-30 2012-02-21 Veveo, Inc. Method and system for incremental search with reduced text entry where the relevance of results is a dynamically computed function of user input search string character count
GB0514133D0 (en) * 2005-07-08 2005-08-17 Mirifice Ltd Monitoring apparatus
US7788266B2 (en) 2005-08-26 2010-08-31 Veveo, Inc. Method and system for processing ambiguous, multi-term search queries
US7779011B2 (en) 2005-08-26 2010-08-17 Veveo, Inc. Method and system for dynamically processing ambiguous, reduced text search queries and highlighting results thereof
US20070045961A1 (en) * 2005-08-31 2007-03-01 Morris Robert P Method and system providing for navigation of a multi-resource user interface
US8189472B2 (en) 2005-09-07 2012-05-29 Mcdonald James F Optimizing bandwidth utilization to a subscriber premises
US7644054B2 (en) 2005-11-23 2010-01-05 Veveo, Inc. System and method for finding desired results by incremental search using an ambiguous keypad with the input containing orthographic and typographic errors
AU2005239672B2 (en) * 2005-11-30 2009-06-11 Canon Kabushiki Kaisha Sortable collection browser
US20070127696A1 (en) * 2005-12-06 2007-06-07 Scott White Systems, methods and devices to mask private data displayed by a set-top box
TW200723048A (en) * 2005-12-07 2007-06-16 Era Digital Media Co Single page website interface
US8782706B2 (en) * 2005-12-29 2014-07-15 United Video Properties Systems and methods for providing channel groups in an interactive media guidance application
US20070260703A1 (en) * 2006-01-27 2007-11-08 Sankar Ardhanari Methods and systems for transmission of subsequences of incremental query actions and selection of content items based on later received subsequences
KR100725411B1 (en) * 2006-02-06 2007-06-07 삼성전자주식회사 User interface for content browsing, method for the providing the user interface, and content browsing apparatus
US7774341B2 (en) 2006-03-06 2010-08-10 Veveo, Inc. Methods and systems for selecting and presenting content based on dynamically identifying microgenres associated with the content
US8316394B2 (en) 2006-03-24 2012-11-20 United Video Properties, Inc. Interactive media guidance application with intelligent navigation and display features
CA2609873C (en) 2006-03-29 2012-12-04 Mathieu Audet Multi-dimensional locating system and method
US8073860B2 (en) 2006-03-30 2011-12-06 Veveo, Inc. Method and system for incrementally selecting and providing relevant search engines in response to a user query
EP4209927A1 (en) * 2006-04-20 2023-07-12 Veveo, Inc. User interface methods and systems for selecting and presenting content based on user navigation and selection actions associated with the content
US7536384B2 (en) 2006-09-14 2009-05-19 Veveo, Inc. Methods and systems for dynamically rearranging search results into hierarchically organized concept clusters
FR2906378B1 (en) * 2006-09-22 2010-01-01 Thales Sa SECURE MAN-MACHINE INTERFACE FOR MANAGING GRAPHIC OBJECTS ON A DISPLAY SCREEN
US8381249B2 (en) * 2006-10-06 2013-02-19 United Video Properties, Inc. Systems and methods for acquiring, categorizing and delivering media in interactive media guidance applications
WO2008045690A2 (en) 2006-10-06 2008-04-17 Veveo, Inc. Linear character selection display interface for ambiguous text input
US8832742B2 (en) 2006-10-06 2014-09-09 United Video Properties, Inc. Systems and methods for acquiring, categorizing and delivering media in interactive media guidance applications
US8078884B2 (en) * 2006-11-13 2011-12-13 Veveo, Inc. Method of and system for selecting and presenting content based on user identification
GB2444974B (en) * 2006-12-22 2011-12-28 British Sky Broadcasting Ltd Media device and interface
GB2444973A (en) * 2006-12-22 2008-06-25 British Sky Broadcasting Ltd Media demand and playback system
US9270963B2 (en) 2007-01-03 2016-02-23 Tivo Inc. Program shortcuts
US8490138B2 (en) * 2007-02-23 2013-07-16 Rovi Guides, Inc. Channel searching by content type
US7801888B2 (en) 2007-03-09 2010-09-21 Microsoft Corporation Media content search results ranked by popularity
US8826123B2 (en) 2007-05-25 2014-09-02 9224-5489 Quebec Inc. Timescale for presenting information
WO2008148012A1 (en) 2007-05-25 2008-12-04 Veveo, Inc. System and method for text disambiguation and context designation in incremental search
US20080313574A1 (en) * 2007-05-25 2008-12-18 Veveo, Inc. System and method for search with reduced physical interaction requirements
WO2008148009A1 (en) 2007-05-25 2008-12-04 Veveo, Inc. Method and system for unified searching across and within multiple documents
US11570521B2 (en) 2007-06-26 2023-01-31 Broadband Itv, Inc. Dynamic adjustment of electronic program guide displays based on viewer preferences for minimizing navigation in VOD program selection
CA2601154C (en) 2007-07-07 2016-09-13 Mathieu Audet Method and system for distinguising elements of information along a plurality of axes on a basis of a commonality
US8601392B2 (en) 2007-08-22 2013-12-03 9224-5489 Quebec Inc. Timeline for presenting information
US20090100464A1 (en) * 2007-10-16 2009-04-16 Microsoft Corporation Content filter
GB2455803B (en) * 2007-12-21 2012-07-04 British Sky Broadcasting Ltd Online EPG
CA2657835C (en) 2008-03-07 2017-09-19 Mathieu Audet Documents discrimination system and method thereof
US8286080B2 (en) * 2008-07-24 2012-10-09 Cisco Technology, Inc. User navigation via vectors dynamically mapped to distinct media attributes
US20100058245A1 (en) * 2008-08-28 2010-03-04 Takaaki Ota Method and apparatus for an object oriented on-screen display menu system with a visual cue
GB2463124B (en) 2008-09-05 2012-06-20 Skype Ltd A peripheral device for communication over a communications sytem
GB2463104A (en) * 2008-09-05 2010-03-10 Skype Ltd Thumbnail selection of telephone contact using zooming
US8607155B2 (en) 2008-09-12 2013-12-10 9224-5489 Quebec Inc. Method of managing groups of arrays of documents
KR101541804B1 (en) * 2008-09-24 2015-08-05 삼성전자주식회사 Digital device and method for controlling UI thereof
US10063934B2 (en) 2008-11-25 2018-08-28 Rovi Technologies Corporation Reducing unicast session duration with restart TV
US8316396B2 (en) 2009-05-13 2012-11-20 Tivo Inc. Correlation of media metadata gathered from diverse sources
US8423088B2 (en) 2009-07-22 2013-04-16 Microsoft Corporation Aggregated, interactive communication timeline
KR20110019163A (en) * 2009-08-19 2011-02-25 삼성전자주식회사 Method for providing gui to display list for the plurality of items and display apparatus applying the same
US9166714B2 (en) 2009-09-11 2015-10-20 Veveo, Inc. Method of and system for presenting enriched video viewing analytics
US20110154402A1 (en) 2009-12-18 2011-06-23 Rovi Technologies Corporation Systems and methods for navigating program listings in a media guidance application
US20110161242A1 (en) * 2009-12-28 2011-06-30 Rovi Technologies Corporation Systems and methods for searching and browsing media in an interactive media guidance application
US20110191332A1 (en) 2010-02-04 2011-08-04 Veveo, Inc. Method of and System for Updating Locally Cached Content Descriptor Information
US8577915B2 (en) 2010-09-10 2013-11-05 Veveo, Inc. Method of and system for conducting personalized federated search and presentation of results therefrom
US20120102528A1 (en) * 2010-10-25 2012-04-26 Sony Corporation Method and system for favorite television show directory
US20120174039A1 (en) * 2011-01-05 2012-07-05 United Video Properties, Inc. Systems and methods for navigating through content in an interactive media guidance application
WO2012094564A1 (en) 2011-01-06 2012-07-12 Veveo, Inc. Methods of and systems for content search based on environment sampling
USD665407S1 (en) * 2011-01-24 2012-08-14 Microsoft Corporation Display screen with graphical user interface
US9058093B2 (en) 2011-02-01 2015-06-16 9224-5489 Quebec Inc. Active element
US10289657B2 (en) * 2011-09-25 2019-05-14 9224-5489 Quebec Inc. Method of retrieving information elements on an undisplayed portion of an axis of information elements
US20130132883A1 (en) * 2011-11-22 2013-05-23 Nokia Corporation Apparatus and Associated Methods
US8805418B2 (en) 2011-12-23 2014-08-12 United Video Properties, Inc. Methods and systems for performing actions based on location-based rules
US9519693B2 (en) 2012-06-11 2016-12-13 9224-5489 Quebec Inc. Method and apparatus for displaying data element axes
US9646080B2 (en) 2012-06-12 2017-05-09 9224-5489 Quebec Inc. Multi-functions axis-based interface
US9609374B2 (en) 2012-06-27 2017-03-28 Rovi Guides, Inc. System and methods for automatically obtaining cost-efficient access to a media content collection
US9288521B2 (en) 2014-05-28 2016-03-15 Rovi Guides, Inc. Systems and methods for updating media asset data based on pause point in the media asset
US9948962B2 (en) 2014-11-13 2018-04-17 Time Warner Cable Enterprises Llc Apparatus and methods for efficient delivery of electronic program guide data
US9734244B2 (en) 2014-12-08 2017-08-15 Rovi Guides, Inc. Methods and systems for providing serendipitous recommendations
US10671266B2 (en) 2017-06-05 2020-06-02 9224-5489 Quebec Inc. Method and apparatus of aligning information element axes

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5261042A (en) * 1986-03-27 1993-11-09 Wang Laboratories, Inc. Menu management system
US5339391A (en) * 1990-05-14 1994-08-16 Microelectronics And Computer Technology Corporation Computer display unit with attribute enhanced scroll bar
EP1244300B1 (en) * 1990-09-10 2005-01-12 Starsight Telecast, Inc. Method and apparatus for accessing information about television programs
US5526034A (en) * 1990-09-28 1996-06-11 Ictv, Inc. Interactive home information system with signal assignment
US5093718A (en) * 1990-09-28 1992-03-03 Inteletext Systems, Inc. Interactive home information system
US5412720A (en) * 1990-09-28 1995-05-02 Ictv, Inc. Interactive home information system
US5172413A (en) * 1990-12-20 1992-12-15 Sasktel Secure hierarchial video delivery system and method
DE69222102T2 (en) * 1991-08-02 1998-03-26 Grass Valley Group Operator interface for video editing system for the display and interactive control of video material
US5581275A (en) * 1992-02-28 1996-12-03 Hewlett-Packard Company Method and apparatus for locating a predetermined position in a computer file
JP3198486B2 (en) * 1992-03-11 2001-08-13 ソニー株式会社 Monitor system for AV system
US5592551A (en) * 1992-12-01 1997-01-07 Scientific-Atlanta, Inc. Method and apparatus for providing interactive electronic programming guide
WO1994014279A1 (en) * 1992-12-09 1994-06-23 Discovery Communications, Inc. Digital cable headend for cable television delivery system
US5555354A (en) * 1993-03-23 1996-09-10 Silicon Graphics Inc. Method and apparatus for navigation within three-dimensional information landscape
US5524195A (en) * 1993-05-24 1996-06-04 Sun Microsystems, Inc. Graphical user interface for interactive television with an animated agent
US5583560A (en) * 1993-06-22 1996-12-10 Apple Computer, Inc. Method and apparatus for audio-visual interface for the selective display of listing information on a display
FR2710807B1 (en) * 1993-09-28 1995-11-03 Thomson Consumer Electronics Method for displaying and processing videotext or telephone data and device.
US5557724A (en) * 1993-10-12 1996-09-17 Intel Corporation User interface, method, and apparatus selecting and playing channels having video, audio, and/or text streams
US5581797A (en) * 1993-10-22 1996-12-03 Lucent Technologies Inc. Method and apparatus for displaying hierarchical information of a large software system
US5465113A (en) * 1993-12-13 1995-11-07 At&T Corp. Programmable channel regulating cable television controller
DE4410547C2 (en) * 1994-03-26 1999-03-18 Loewe Opta Gmbh Process for creating an electronic program guide and circuit therefor
US5596373A (en) * 1995-01-04 1997-01-21 Sony Corporation Method and apparatus for providing program oriented information in a multiple station broadcast system
CA2166434A1 (en) * 1995-01-04 1996-07-05 Fujio Noguchi Method and apparatus for providing programming information

Also Published As

Publication number Publication date
US5912664A (en) 1999-06-15
DE69620287D1 (en) 2002-05-08
EP0735749B1 (en) 2002-04-03
EP0735749A2 (en) 1996-10-02
US5812124A (en) 1998-09-22
JP4142119B2 (en) 2008-08-27
CA2170429A1 (en) 1996-09-29
JPH08292866A (en) 1996-11-05
EP0735749A3 (en) 1997-09-17
DE69620287T2 (en) 2002-11-28

Similar Documents

Publication Publication Date Title
CA2170429C (en) Method and apparatus for finding and selecting a desired data item from a large schedule of data items using a tv set and a controller similar to a tv-remote-control
EP1111912B1 (en) A television schedule system
US6023267A (en) Process for selecting programes, especially television programes and device and graphical interface implementing this process
US6018372A (en) Electronic program guide with multiple day planner
US9191722B2 (en) System and method for modifying advertisement responsive to EPG information
US5990890A (en) System for data entry and navigation in a user interface
US6756997B1 (en) Systems and methods for displaying and recording control interface with television programs, video, advertising information and program scheduling information
US8635649B2 (en) System and method for modifying advertisement responsive to EPG information
EP1377049B1 (en) User interface for television schedule system
CA2319519A1 (en) Method and system for navigating through content in an organized and categorized fashion
KR100304652B1 (en) Program guide method of television receiver

Legal Events

Date Code Title Description
EEER Examination request
MKLA Lapsed
MKLA Lapsed

Effective date: 20110228