Latest News
!System updates

Development tools
C/C++ Tools

Writing 32-bit code
32-bit introduction
32-bit overview
32-bit technical
Memory issues
Developer tools
Paul Skirrow's Guide (PDF)
Download area

32-bit APIs
API changes
CallASWI
FileCore

RISC OS 5
Overview
BBC BASIC
CDFS driver
OS_ClaimDeviceVector behaviour
CDFS
Draw clipping
GraphicsV
HAL
Internet
UTF8 & Japanese support
International IME support
MIMEMap
Module PostInit/Final
PCI Manager
PDumper
Podules
Resource allocation
SCSI
Service Calls
UCS fonts
USB
WIMP API Changes
WIMP Flags

IYONIX pc
DDR memory
Help system
Keyboard layout
Miscellaneous
PCI slots

Opportunities

Iyonix Ltd
IYONIX home page
Contact details

   

PDumper API

PDumperReason_SetDriver reason code 0

called because someone called PDriver_SetDriver
R1->  dumper number
R2->  command to ensure the dumper is present
R3->  string (256 bytes) where to find the palette file
  this block is transient, and a local copy should be
  taken if persistence is required
  eg. "Printers:Palettes.0"
R4->  config block (272 bytes)
  this block is transient, and a local copy should be
  taken if persistence is required
  byte 0 = height in dots per strip (PrintEdit's DumpLength)
  byte 1 = number of vertical interlace passes (PrintEdit's x interlace)
  byte 2 = number of horizontal interlace passes (PrintEdit's y interlace)
  byte 3 = number of passes over line - 1 (used for multipass printing, eg CMYK)
  byte 4 = strip type
  byte 5 = output depth in bpp (1, or 8)
  byte 6 = number of passes per strip - 1
  byte 7 = number of current pass
  bytes 8-11 = copy of dumper's private word
  bytes 12-255 (ie 244 bytes) comes from !Printers and contains printer
  configuration strings and some other parameters.
  The location of each configuration string within the
  buffer is given as an offset from byte 12.
  The first byte of each string denotes its length in bytes
  or in RISC OS 5 it may be zero to indicate that a 24-bit length
  and 32-bit pointer are provided (see below).
  byte at +12 data length multiplier
  byte at +13 data length added
  byte at +14 dump height
  byte at +15 -> page start string (0 for none)
  byte at +16 -> page end string (0 for none)
  byte at +17 -> line return string (0 for none)
  byte at +18 -> line skip string (0 for none)
  byte at +19 -> line end 1 string (0 for none)
  byte at +20 -> line end 2 string (0 for none)
  byte at +21 -> line end 3 string (0 for none)
  byte at +22 -> zero skip string (0 for none)
  byte at +23 -> line start 1 string (0 for none)
  byte at +24 -> line start 2 string (0 for none)
  byte at +25 -> line pass 1 string (0 for none)
  byte at +26 -> line pass 1b string (0 for none)
  byte at +27 -> line pass 2 string (0 for none)
  byte at +28 -> line pass 2b string (0 for none)
  byte at +29 -> line pass 3 string (0 for none)
  byte at +30 -> line pass 3b string (0 for none)
  byte at +31 -> line pass 4 string (0 for none)
  byte at +32 -> line pass 4b string (0 for none)
  byte at +33 -> set lines per page string (0 for none)
  byte at +34 = number of lines per page
  byte at +35 = number of leading zeros to leave
  byte at +36 = multiplier to convert to skip (see skip resolution)
  byte at +40 = divider to convert to skip (see skip resolution)
  byte at +44 = short advance to use for continuous roll paper
  byte at +48 -> form feed string (0 for none)
  byte at +49 = reserved
  byte at +50 = reserved
  byte at +51 = reserved
  byte at +52 = paper x offset
  byte at +56 = paper y offset
  word at +256 configuration word (see R5)
  word at +260 pointer to active printer dumper
  word at +264 printer dumper number (see R1)
  word at +268 left margin in pixels
R5=  configuration word
R11=  0 (reason code)
R12->  private word

For all of the above string pointers, the string they point to is of the form

 [ length byte ] [ string of that length ]

since the string may contain any of the 256 available ASCII characters.

Previous printer dumpers and printer managers could therefore never have strings of longer than 255 bytes (and given the string also had to fit in the 244 byte block, somewhat less).

Now, where the length byte is zero this signifies that the two words are of the new format:

 [ 0 ] [ 24 length bits ] [ pointer to the string anywhere in memory ]

This provides for a configuration string up to 16Mbytes long, though in practice the PrintEdit and Printer Manager applications will put a more conservative limit on this.

Printer dumpers can support both old and new Printer Manager applications by inspecting the length byte. For non zero it can assume it is running on a pre RISC OS 5 system and behave as before by outputting the short string, for zero it simply needs to fetch the larger pointer and address and output as before (probably using a shared output routine).

As there are 20 string pointers which in their extended form are 8 bytes each this gives a maximum of 160 bytes, hence the new style block still fits in the existing 244 byte block limits.

PDumperReason_OutputDump reason code 1

R7 points to a block of the above form

PDumperReason_ColourSet reason code 2

R5 points to a block of the above form

PDumperReason_StartPage reason code 3

R5 points to a block of the above form

PDumperReason_StartPage reason code 4

R4 points to a block of the above form

PDumperReason_StartJob reason code 5

R5 points to a block of the above form

PDumperReason_AbortJob reason code 6

Unchanged

© 2006 IYONIX Ltd 32-bit RISC OS