This page contains a simple Java applet that will generate VCRplus codes. Please send comments about the applet to
. I can't help with using or configuring the VCR+.
The applet tag on this page does not specify any parameters, so the applet will default to the next half hour of the current date.
Here's the applet source. There are two classes in one .java file, your compiler may want you to split them into separate files.
The class that does the UI is very primitive, and only allows year selections for last year, this year, and next year, though it doesn't seem to matter. If you make your own applet tag you can get any year you want (the year menu will show the year you give it, plus one year before and one year after). This is a limitation of the UI, not the encoder. I figured that the most common uses for the applet will be making codes for sometime near today, and "sometime near today" seems to generally be within a year of now, so this ought to cover it. If you want to play with the encoder, feel free to grab the source and feed it all the dates you want.
As far as I can tell, there are no Y2K (or Y3K for that matter) problems with the encoder or the UI. Don't make the mistake of thinking this is a warranty. It isn't.
The Encoder class can only deal with simple 6-digit PlusCodes. See below for more info on this limitation.
The applet is actually two classes, a VCRPlus class that is just a wrapper for doing the UI, and the Encoder class, which makes the codes. One could certainly replace the VCRPlus class with something nicer, or even use the Encoder applet to generate a table of codes with only an applet tag or a CGI.
I wrote the VCRPlus class from scratch, just to test the Encoder class.
The Encoder class is based on C source I found on the net (search for VCRPLUS and you'll find it). The original author of the C code is apparently unknown, but subsequent work is attributed to David W. Sanderson, Kent Anthony Behrends (Mac port), and Paul Balyoz (Unix port and cleanup).
Doyle MyersHere is the READ.ME from the C package. The applet shares any limitations listed here. The READ.ME was written by Paul Balyoz.
NB: The READ.ME refers to a list of cable stations that may be out of date. The print edition of TV Guide generally carries a table that shows the current mappings for your area. There is probably an edition specific to your cable system, satellite system, or two giant TV cans and a piece of TV string (or however else the signal gets into your house). This is the limit of my knowledge about these things, so asking how to get the right channels, or other general questions about how the VCR+ device works will probably be met with an incredibly dumb stare.
-------------------------- VCR+ Encoding and Decoding -------------------------- ----------- DESCRIPTION ----------- This package contains C source code for encoding and decoding VCRplus codes found in many television guides. This code has been ported to Unix and is fairly user-friendly. This implementation only understands VCRplus codes with 6 digits or fewer. This covers channels 1 thru 64, and half-hour increments for starting times and program lengths, up to 5 hours long. Time wraps around at the edge of each month (so May 1 looks like April 1 if today's date is still in April). The VCRplus algorithm is relative to the current month, so that each month the low-numbered codes can be re-used. This is done because VCRplus numbers with only a few digits are preferred by the viewer. Encoding is skewed so that the codes with a few digits are more likely to be used (i.e. half-hour primetime programs). This source has been compiled and tested on the following platforms: Sun Solaris 2.3 (SunPro C, Gnu C) HP HP/UX 10.01 (Gnu C) ------------- DOCUMENTATION ------------- Included with this package are a number of technical and informational documents: README This file. README.macvcr+ The MacVCR+ info file. README.origpost Top of DaviD W. Sanderson's usenet posting. Docs-basic/ A re-implementation in TurboBasicXL by jmcgowan@bigcat.missouri.edu (John McGowan) included some really good technical documentation, which is included here. misc/ Other implementations of VCR plus utilities. orig/ Original source code. utils/ Small utilities to help cleanup. ------- HISTORY ------- ?/?/? Original code author unknown. 12/31/92 dws@ssec.wisc.edu (DaviD W. Sanderson) posted a shar of encode and decode written in C to Usenet newsgroups alt.source, rec.video. He describes not knowing who the original author is. ?/?/? wk01802@worldlink.com (Kent Anthony Behrends) ported it to the Macintosh and named it MacVCR+. Program crashed easily [see below]. 02/19/95 pab@rainbow.cse.nau.edu (Paul Balyoz) ported to Unix, general cleanup and user-friendlifications: * writing outside of array bounds bugs fixed * sorted start[] and leng[] arrays by index * removed unnecessary over-parenthesization * added clearer output in English * decode now gets time/date from Unix system; specifying today's date is still possible (just optional now) * removed all goto's * encode only allows channels 1-64, since the algorithm ends up wrapping at 64 anyway (channel number modulo 64). 04/27/96 pbalyoz@sedona.intel.com (Paul Balyoz) more cleanup and condensing of source code, code comments section added. 04/28/96 pbalyoz@sedona.intel.com (Paul Balyoz) more code cleanup, fixed a bug (out[] array has 17 elements not 16), a few useful comments added. ------------- CODE COMMENTS ------------- The C files encode.c and decode.c are designed so that if you define the macro STANDALONE, each file creates a main() so that it can compile to a standalone executable program (see Makefile). If you don't define it, you get two C functions you can call from your own main program: int encode_main (int month, int day, int year, int channel, int starttime, int duration); void decode_main (int month_today, int date_today, int year_today, int newspaper, int *channel, int *starttime, int *duration); Look near the bottom of those source files for further info. -------------- ADVANCED NOTES -------------- So what about cable TV channels that have names instead of numbers? Many of them have been mapped to channel numbers for use with VCRplus. The problem then is that you may actually have a local station at that channel number, separate from the cable network channel reserved for that VCRplus channel number. And, of course, your local cable TV provider has probably mapped all the channels to different numbers anyway for the service they provide. Here's a chart of cable channels I've heard of so far: NAME NUMBER DESCRIPTION A? 39 Arts & Entertainment Network AMC 35 American Movie Classics ASN 19 Arizona Sports Programming Network BET 57 Black Entertainment Television BRV 54 Bravo CNN 42 Cable News Network COM 24 Comedy Channel CSP 30 C-SPAN DIS 53 Disney Channel DSC 37 Discovery Channel E! 63 E! Entertainment Television ESN 34 ESPN FAM 47 Family Channel HBO 33 Home Box Office LIF 46 Lifetime MAX 45 Cinemax MTV 48 Music Television NIK 38 Nickelodeon SHO 41 Showtime TBS 43 TBS TLC 51 The Learning Channel TMC 58 The Movie Channel TNN 49 The Nashville Network TNT 52 Turner Network Television USA 44 USA Network VN1 62 Video Hits 1 WGN 55 WGN, Chicago And some others this software package can't use because the channel numbers are too large: AT 85 America's Talking CAR 78 Cartoon Network CNB 74 CNBC ES2 76 ESPN2 FX 89 FX SCI 87 Sci-Fi Channel ---- BUGS ---- Decoding seems to be "modulo the current month". If today's date is near the end of the month and you try to decode a VCRplus code from the beginning of next month, decode.c misunderstands and reports the time as being at the beginning of _this_ month! Example: For today's date of April 27 1996 and VCRplus code 5449, it says Program: April 1 1996 on channel 8, starting at 3:30 PM, 30 minutes long. instead of Program: May 1 1996 on channel 8, starting at 5:30 PM, 30 minutes long. ------ FUTURE ------ Now all we need is to be able to understand the VCRplus algorithm for times between half-hour periods, as well as channels above 64, so that we can decode VCRplus codes greater than 999999. There are a lot of those large style VCRplus numbers in television guides today. ----- TO DO ----- Still to do: * _statically_ initialize the static start[] and leng[] arrays so we don't spend run-time doing it (encode.c, decode.c). * algorithmatize array elements 192-479 instead of storing them in start[] and leng[], since the algorithm is rather obvious (encode.c, decode.c). * convert start[] and leng[] arrays into opposite indexing so we don't have to loop thru the whole table searching for the right values (encode.c where comments say, "Search for the entry we need"). ---------- DISCLAIMER ---------- I don't actually understand the algorithm used, I'm just the code cleanup guy. Hopefully I didn't break the algorithm. (Both encode and decode have been tested on a number of real-life examples after my modifications, and it all seems to work fine). -- paul -- Paul Balyoz, Senior Systems Programmer root@rainbow.cse.nau.edu Computer Science Department Paul.Balyoz@nau.edu Northern Arizona University pab@rainbow.cse.nau.edu PO Box 15600, Flagstaff AZ 86011, USA pab@pine.cse.nau.edu [end of original READ.ME]
VCR Plus+, and PlusCode are trademarks of Gemstar Development Corporation. These trademarks are used here only to refer to the VCR Plus+ device and codes, and are not intended to imply that this software is approved of in any way by Gemstar Development Corporation. The author is not affiliated with Gemstar Development Corporation. This software is only an example of a Java applet, and was just done for fun, adapted from information widely available on the net (e.g., Usenet newsgroups alt.source and rec.video).
VCRPlus Applet version 1.1, Copyright (C) 1996-2000 Doyle B. Myers. VCRPlus Applet comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under the terms of the GNU General Public License.