Warning: require_once(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/WebStart.php on line 94

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require_once(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/WebStart.php on line 157

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require_once(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/Setup.php on line 381

Warning: require_once(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/Setup.php on line 382

Warning: require_once(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/Setup.php on line 383

Warning: require_once(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/Setup.php on line 384

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require_once(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/languages/Language.php on line 20

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007

Warning: Cannot modify header information - headers already sent by (output started at /usr/local/www/mediawiki/includes/WebStart.php:94) in /usr/local/www/mediawiki/includes/WebResponse.php on line 38

Warning: Cannot modify header information - headers already sent by (output started at /usr/local/www/mediawiki/includes/WebStart.php:94) in /usr/local/www/mediawiki/includes/WebResponse.php on line 38

Warning: require(): Unable to allocate memory for pool. in /usr/local/www/mediawiki/includes/AutoLoader.php on line 1007
Softdisk Publishing UDF files - Just Solve the File Format Problem

Softdisk Publishing UDF files

From Just Solve the File Format Problem
(Difference between revisions)
Jump to: navigation, search
(More info)
Line 22: Line 22:
 
* Sokoban
 
* Sokoban
 
* Super Crossword
 
* Super Crossword
 +
* Trivia Now
 
* Word Finder
 
* Word Finder
  
Line 41: Line 42:
  
 
  $ABOUT
 
  $ABOUT
  Silly Program           ; program title
+
  Silly Program Levels    ; data set title
  John Q. Doe            ; author
+
  John Q. Doe            ; data set author
  1.0                    ; version
+
  1.0                    ; data set version
 
  Copywrong 1492 No Publisher
 
  Copywrong 1492 No Publisher
 
  $EOC
 
  $EOC
  
The "DOC" chunk is a standard chunk that identifies which program the file is intended for, with a "driver tag" uniquely identifying the program, and major and minor versions of the file format.  The "ABOUT" chunk has more information (intended to be displayed in an "About" box within the program), consisting (in order) of the program title, author, version, and copyright notice (or perhaps this is supposed to be info for the particular data file, which might be a new set of levels for a game, etc., rather than the program it loads into?)
+
The "DOC" chunk is a standard chunk that identifies which program the file is intended for, with a "driver tag" uniquely identifying the program, and major and minor versions of the file format.  The "ABOUT" chunk has more information (intended to be displayed in an "About" box within the program), consisting (in order) of the title, author, version, and copyright notice of the particular data set (not the program it loads into).
  
Other chunks will have program-specific data.
+
Some of the driver tags that have been used:
 +
* PRGN: Paragon
 +
* SOKOBAN: Sokoban
 +
* TRIVNOW: Trivia Now
 +
 
 +
Other chunks have program-specific data.
 +
 
 +
One commonly-recurrent chunk was "SECRETWORD", which contained a secret word (sometimes in plaintext, sometimes encrypted) which was then output by the program when the user solved a puzzle or completed a game successfully, so that the user could send it in to qualify for some sort of contests, prizes, or something of that sort.  Obviously, the plaintext secret words made cheating pretty easy, which is why encryption was eventually introduced.
  
 
Chunks with multiple instances can be numbered:
 
Chunks with multiple instances can be numbered:

Revision as of 03:12, 31 October 2012

File Formats > Electronic File Formats > Text-based data > Softdisk Publishing UDF files

Softdisk was a publisher of diskmagazines and other software from the 1980s through the early 2000s, as well as a dialup Internet Service Provider (in the Shreveport, LA area) and web host in the late 1990s and early 2000s. It's perhaps best known as the place John Romero, John Carmack, and other founders of Id Software were working when they started their own game-making company as moonlighters.

Softdisk programs used a wide variety of file formats (text-based and binary) for loading and saving data, but at one point in the 1990s some of its developers decided to attempt to standardize the internally-created file formats for future programs, leading to a format specification they termed "UDF" (Universal Data Format, or Uniform Data Format, or Uniform Data File? Computer geeks can be pretty arrogant about regarding their own quirky data formats as being "universal" or "uniform", leading to lots of uses of the letter "U" in such acronyms). There was an internal spec document (which I've unfortunately not been able to find a copy of yet).

This is more of a "meta-format" designed to allow the definition of program-specific data file formats for different programs, with some common structural conventions. Each program's data file format has program-specific elements. Files of this sort can be found on various issues of Softdisk publications such as Softdisk PC, Softdisk for Windows, and Softdisk for Mac. Some of them have a .UDF file extension, but various program-specific extensions were also used.

Programs using files of this format include:

  • Criss Cross
  • Crypto Sleuth
  • Paragon
  • Sokoban
  • Super Crossword
  • Trivia Now
  • Word Finder

Structure

A UDF file is made up of a series of "chunks" consisting of one or more lines of data delimited by lines preceding and following the data containing particular strings of text. Lines can be separated with CR, LF, or CR+LF to allow such files to be created and used on a variety of platforms; programs processing such files are expected to be able to deal with any of these conventions.

A chunk begins with a line starting with the "$" sign, and then a chunk-type name (some character string; there are a few standard chunk names as well as program-specific ones), then in some cases a space and an identifier (name or number) for a specific data item (since some types of data can exist in multiple instances). The chunk terminates with a line consisting of "$EOC" for End Of Chunk, so this string can't occur within the data of a chunk.

Anything following a semicolon (and any whitespace preceding the semicolon) is considered a comment.

Sample chunks:

$DOC
SILLYPROG               ; driver tag
1                       ; major version
1                       ; minor version
$EOC
$ABOUT
Silly Program Levels    ; data set title
John Q. Doe             ; data set author
1.0                     ; data set version
Copywrong 1492 No Publisher
$EOC

The "DOC" chunk is a standard chunk that identifies which program the file is intended for, with a "driver tag" uniquely identifying the program, and major and minor versions of the file format. The "ABOUT" chunk has more information (intended to be displayed in an "About" box within the program), consisting (in order) of the title, author, version, and copyright notice of the particular data set (not the program it loads into).

Some of the driver tags that have been used:

  • PRGN: Paragon
  • SOKOBAN: Sokoban
  • TRIVNOW: Trivia Now

Other chunks have program-specific data.

One commonly-recurrent chunk was "SECRETWORD", which contained a secret word (sometimes in plaintext, sometimes encrypted) which was then output by the program when the user solved a puzzle or completed a game successfully, so that the user could send it in to qualify for some sort of contests, prizes, or something of that sort. Obviously, the plaintext secret words made cheating pretty easy, which is why encryption was eventually introduced.

Chunks with multiple instances can be numbered:

$PUZZLE 1
Some data for the first puzzle...
$EOC
$PUZZLE 2
Some data for the second puzzle...
$EOC
Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox

Warning: Cannot modify header information - headers already sent by (output started at /usr/local/www/mediawiki/includes/WebStart.php:94) in /usr/local/www/mediawiki/includes/WebResponse.php on line 38

Warning: Cannot modify header information - headers already sent by (output started at /usr/local/www/mediawiki/includes/WebStart.php:94) in /usr/local/www/mediawiki/includes/WebResponse.php on line 38

Warning: Cannot modify header information - headers already sent by (output started at /usr/local/www/mediawiki/includes/WebStart.php:94) in /usr/local/www/mediawiki/includes/WebResponse.php on line 38