VCRPlus Applet

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+.


Find A VCRplus Code

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.

The odds of this working increase dramatically if you enable Java!

Here's the applet source. There are two classes in one .java file, your compiler may want you to split them into separate files.


Known Problems

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.

About The Java Classes

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 Myers
November, 1996
Revised April, 2000
Revised March, 2003

Original C-Code READ.ME

Here 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]


Standard Fine Print Weasel

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.


Back to The Amplifier