Each wall consists of a linedef that references one or two sidedefs (right and optionally left). Each sidedef has three texture names (lower, middle, and upper) with up to eight characters each. (The name "-" means no texture: either not applicable or totally transparent.)
If a wall is tall enough that the texture needs to be tiled vertically, the texture graphics should be exactly 128 units high, or the tutti-frutti effect will occur. (This, however, has been addressed in most advanced source ports.)
There is no maximum width. If the wall area is larger than the graphic, the pattern will be tiled. Depending on the geometry of the map design, many textures may be clipped or offset (see Texture alignment).
The Doom engine looks up a texture name using the wall texture lumps TEXTURE1 and TEXTURE2. (TEXTURE1 is present in all Doom versions; TEXTURE2 supports the additional textures in registered/Ultimate Doom, but is not found in Doom II.) This yields a list of indices into the PNAMES lump. For each index, PNAMES gives the name of a lump known as a wall patch; each wall patch lump is stored in Doom's picture format. Rendering the texture's list of patches gives the final texture graphic that can be applied to any wall surface.
Complete details of the data structures are given in the Unofficial Doom Specs.