Welcome to Ed Chapman's DHV Custom Issues Page

Location: http://rocws01011/Custom.html image Nov 28 2001
image
Recent projects Image Editor tool cool internal links
Documentation My Calendar Phone / Email
PDF Issues DHV Custom Issues Codev Issues
401K helper Old Work Pages

Home Kids Buick's
Links Parents Laughs

image
This page will be used to track issues around Customization for the DHV RIP

Overview 03/10/2000

This page is for information on custom RIP projects. The first is the custom rip2store or rip2tiff project. The second is a custom transfer function. There is also a custom camelot back ported with a bug fix. The updates section has a high level overview of new projects and features. After that it is in chronological order so the newest updates are at the bottomof the page

Updates 03/10/2000

A new version of the custom transfer function for RIP releases 03.08 and newer is out. A custom version of camelot with the bug fix for slips working with PDF and back ported to a 02.14 RIP is out. The DLL API as implemented in 03.06 is available.

The 3.x interface is defined for the custom lib. This includes dynamic loaded libraries, the ability to call multiple libs, calls at job start interpreting and end interpreting , ability to not print rasters, and the ability to call scripts or other programs.

A new section for for modifying transfer functions has been added. This does not use the custom library (it is all in PostScript). It is a custom issues since that is how the first offering will be made. See Transfer Function status for updates on this and RIP2Store for updates on the RIP to Store or RIP and forward customization.

The purpose of the RIP2Store is so the Heidelberg Digital Customization group can modify rasters produced by all interpreters on a DHV RIP by replacing a library file /hp/lib/libcus.so and inserting a %KDKCustom: {"on" | "off" | "sysdefault"} "optional 32 byte string" used as arguments in the job header. Another method of enabling this function is to use a interpreter start up option. The third method is to use the configuration utility to turn on the system default to "on" or "off" plus a 32 byte string.

The RIP will parse the KDKCustom: line. If it is "on" or "sysdefault" with the default turned ON, or enabled with a interpreter start up option - each interpreter will call the Custom() procedures before sending out each image to RTS, plus at job start interpreting and end interpreting . This procedure may then post process the raster images stored in shared memory. It may not change the raster size. Interpreters will not be allowed to have empty bands or the Custom procedure may not change them. The Custom procedure may not fork off a thread to modify the raster and then exit since the raster is immediately sent out upon it's return. This means the TS (interpreter) thread calling Custom() will wait for it's return.

**Note check the release notes to see what release each feature is implemented.


Parsing and sysdefault RIP2Store 1/4/2000

In this table Syntax and SysDef are inputs used to determine the outputs ActOn, DocReq, and String. Rel is what release it is supported. "X" means don't care. The Syntax is the KDKCustom in the job. The SysDef is the system default that may be changed with the configuration utility.

Syntax SysDef Rel ActOn DocReq String Action
%%%KDKCustom NOT in job F 02.00 F F NULL Not Call Custom()
%%%KDKCustom NOT in job T 03.01 F T sysdefault string Call Custom()
%KDKCustom: X 02.08 T T NULL Call Custom()
%KDKCustom: Typo string arg X 02.08 T T NULL Call Custom()
%KDKCustom: on X 02.08 T T NULL Call Custom()
%KDKCustom: off X 02.08 T F NULL Not call Custom()
%KDKCustom: on string arg X 02.00 T T string arg Call Custom()
%KDKCustom: on (string arg) X 02.00 T T string arg Call Custom()
%KDKCustom: on "string arg" X 02.00 T T "string arg" Call Custom()
%KDKCustom: off string arg X 02.08 T F string arg Not call Custom()
%KDKCustom: sysdefault F 03.01 T F NULL Not Call Custom()
%KDKCustom: sysdefault T 03.01 T T NULL Call Custom()
%KDKCustom: sysdefault string arg F 03.01 T F string arg Not Call Custom()
%KDKCustom: sysdefault string arg T 03.01 T T string arg Call Custom()

RIP2Store Arguments 01/04/2000

There are two arguments to the Custom() procedure a Ts_Image_Complete pointer and the string argument to %KDKCustom: string (see prototypes below). The two arguments to the job start procedures are a Doc_Requirements pointer along with the string arguments. The three arguments to the job end procedures are a Ts_Doc_Complete pointer along with the string arguments and Doc_Requirements pointer. The CustomImage program or script will be called if the custom lib was to be called and they exist. It will be called at with each image. It is called with a fork and exec so the arguments are not prototyped
RIP2Store 02.xx release
void    Custom  (   Ts_Image_Complete   *ptic,
                    char                *args);
RIP2Store 03.xx release (return value of 0 indicates not to print the rasters)
int     Custom  (   Ts_Image_Complete   *ptic,
                    char                *args);
RIP2Store new in 03.xx release
extern void CustomStartOfJob(   Doc_Requirements    *dreqs,
                                char                *args);

extern void CustomEndOfJob(     Doc_Requirements    *dreqs,
                                Ts_Doc_Complete     *dcom,
                                char                *args);

/hp/tools/scripts/CustomImage (DirName FileName JobID Page width height)

The Ts_Image_Complete structure consists of: 10/19/1999

The following options in RED helvetica font will not be honored on a per page basis for DHV:
scan_mode = CLEAR_ONLY | SCAN_ONLY | CLEAR_AFTER_SCAN | CLEAR_DURING_SCAN
	*note: on DHV SCAN_ONLY will be used *
image_size = receiver_pixels_line + receiver_lines_page + image_pixels_line + image_lines +
	image_offset_x + image_offset_y + image_bpp
image_a = TRUE | FALSE * black image plain marked *

image_b = TRUE | FALSE * red image plain marked *
image_c = TRUE | FALSE * blue image plain marked *
image_d = TRUE | FALSE * green image plain marked *

force_front = TRUE | FALSE
force_simplex = TRUE | FALSE
force_tumble = TRUE | FALSE
force_back = TRUE | FALSE
num_copies = 1 to MAX_COPIES
start_new_set = TRUE | FALSE

stapler = how + when + orient
how = STAPLE_NO | STAPLE_ONE | STAPLE_TWO | STAPLE_ThrEE | STAPLE_FOUR |
	STAPLE_FIVE
when = NEVER | PAGE_END | SET_END | JOB_END | SET_START | JOB_START
orient = STAPLE_NONE | STAPLE_0 | STAPLE_90 | STAPLE_45 | STAPLE_135
folder = how + when
how = UNKNOWN_FOLD | NO_FOLD | Z_FOLD | SADDLE_FOLD | GATE_FOLD | RIGHT_GATE_FOLD |
	LEFT_GATE_FOLD | LETTER_FOLD | X_FOLD
when = NEVER | PAGE_END | SET_END | JOB_END | SET_START | JOB_START
stacker = how + when
how = NO_JOG | JOG_POS1 | JOG_POS2 | JOG_ALTERNATE
when = NEVER | PAGE_END | SET_END | JOB_END | SET_START | JOB_START

insert = TRUE | FALSE
number_of_separations = * 1 to 4 *
separation_n = * K=0 R=1 B=2 G=3 *
ScapeProduced = SCAPE_PORTRAIT | SCAPE_LANDSCAPE
output_destination =  * (NEW in 3.0) * ME_DEFAULT_OUTPUT | ME_OUTPUT_TOP_EXIT |
	ME_OUTPUT_STAPLER | ME_OUTPUT_STACKER | ME_OUTPUT_ZFOLDER | ME_OUTPUT_BOOKLET_MAKER |
	ME_LCR | ME_TRAY | ME_FINISHER | ME_POST_PROCESSOR

LinkedListOfBands[MAX_SEPARATIONS] = * linked list of pointers to the raster bands
	In shared memory on DHV (GONE in 3.0) *
time_stat_info_PageTime = * time to interpret this page (GONE in 3.0)*

job_id = * the job number assigned by the Job Manager *
PageNumber = * 1 to n *
shm_id = * shared memory ID *
LinkedListOffset = *offset from top of shared memory where linked list is stored in bytes *
media = x + y + weight + color + type + media_tag
x = * 72nds of an inch *
y = * 72nds of an inch *
weight = * grams/square-meter *
color = NULL | * text string e.g. Green *
type = NULL | * text string e.g. 3-hole *
media_tag = NULL | * text string e.g. cover *

The Doc_Requirements structure consists of: 01/06/2000

The following options in RED helvetica font are not used by TS for DHV:
Doc_Requirements = 
collate = TRUE | FALSE
duplex = TRUE | FALSE
tumble = TRUE | FALSE
pamphlet = TRUE | FALSE * Not used by TS as input only as output *

reverse_page_order = TRUE | FALSE 
replication = * 2 means 2 up replication *
signature = * pamphlet signature size, 0 = no limit *
ChaptersAreSets = TRUE | FALSE
kdk_image_size = width + height

timestats = * for keeping interpretation times Not used TS *
mismatch_timeout = * time JM waits for operator response *
ignore_media_mismatch = TRUE | FALSE
block_on_mismatch = TRUE | FALSE

emulation = POSTSCRIPT | PCL | TIFF | PDF | CCITT | EITHER * TIFF not supported *
cfg_emulation = * localized and used on trailer page *
cfg_operator_msg = * string used on trailer page *
operator_msg = * string from %%OperatorMessage: *
operator_msg_handled = TRUE | FALSE

hold_job = TRUE | FALSE 
sets = * number of sets max 99999 *

cfg_sets = * used for UI * 
staple = how + when + orient
how = STAPLE_NO | STAPLE_ONE | STAPLE_TWO | STAPLE_ThrEE | STAPLE_FOUR | STAPLE_FIVE
when = NEVER | PAGE_END | SET_END | JOB_END | SET_START | JOB_START
orient = STAPLE_NONE | STAPLE_0 | STAPLE_90 | STAPLE_45 | STAPLE_135
fold = how + when
how = UNKNOWN_FOLD | NO_FOLD | Z_FOLD | SADDLE_FOLD | GATE_FOLD | RIGHT_GATE_FOLD | LEFT_GATE_FOLD | LETTER_FOLD | X_FOLD
when = NEVER | PAGE_END | SET_END | JOB_END | SET_START | JOB_START
stacking = how + when
how = NO_JOG | JOG_POS1 | JOG_POS2 | JOG_ALTERNATE
when = NEVER | PAGE_END | SET_END | JOB_END | SET_START | JOB_START
trim = TRUE | FALSE
OutputMedia = ME_DEFAULT_OUTPUT | ME_OUTPUT_TOP_EXIT | ME_OUTPUT_STAPLER | ME_OUTPUT_STACKER | ME_OUTPUT_ZFOLDER | ME_OUTPUT_BOOKLET_MAKER | ME_LCR | ME_TRAY | ME_FINISHER | ME_POST_PROCESSOR
strategy = NOTIFYME | SUBSTITUTE | TRUSTME
num_papers = * number of trays used for current job *
paper[ME_NUMBER_PAPER_SUPPLIES] =
x + y + weight + matching_supply + available + media_not_found + color + type + size + cfg_size + cfg_weight + cfg_color + cfg_type + media_tag + isTransparent + numHoles + isSimplex + isPostFuserInsert + spare 
x = * width in pixels *
y = * height in lines *
weight = * 0.0 - n.n grams / square meter *
matching_supply = * Tray number *
available = TRUE | FALSE
media_not_found = TRUE | FALSE
color = NULL | text sting i.e. "RED"
type = NULL | text string i.e. "REFLECTION" | "TRANSPARANCY" | "3-HOLE"

size = * not used * 
cfg_size = TBD
cfg_weight = * i.e. 20#b *
cfg_color = * string i.e. red *
cfg_type = * string i.e. expensive *
media_tag = * char *
isTransparent = TRUE | FALSE
numHoles = * punched hole media *
isSimplex = TRUE | FALSE
isPostFuserInsert = TRUE | FALSE

spare 
* these papers are derived from DSC parsing not from ME *
kdk_acton_req = collate + duplex + tumble + pamphlet + ka_Reverse_page_order + ka_Replication + ka_Signature + ka_Chaptersaresets + ka_Kdk_image_size +emulation + ka_Operator_msg + numcopies + staple + fold + jog output_media + strategy + ka_Kdk_transparency_mode + ka_Cover + trailerpage + ka_Separatormedia + ka_Bodymedia + ka_Docmedia + ka_Print_range + ka_Kdk_destination + ka_Kdk_email + ka_Kdk_jobid + ka_Routing + ka_Image_align + ka_Edge_erase + ka_Trim + print_density + landscapedetect + rotation + orientation + ka_Proofset_state + ka_Block_on_mismatch + ka_Custom_lib + ka_Charge_num + ka_Isgret + spare *(all on or off) *
kdk_transparency_mode = modifier + transparency_tag + auxiliary_tag
modifier = BLANK | PRINTED
transparency_tag = * tray number of transparency *
auxiliary_tag = * tray number for interleaved paper *
front_cover = media_tag + print_mode + side
media_tag = * tray number *
print_mode = SIMPLEX | DUPLEX
side = SIDE_NONE | SIDE_FRONT | SIDE_BACK | SIDE_BOTH
back_cover = media_tag + print_mode + side
media_tag = * tray number *
print_mode = SIMPLEX | DUPLEX
side = SIDE_NONE | SIDE_FRONT | SIDE_BACK | SIDE_BOTH
charge_num = * charge number from DSC *
TrailerPage = ON | OFF | ON_ERROR | ONE_PAGE * ONE_PAGE is the same as ON with a limit of 1 sheet *
TrailerPageMedia = * paper type of trailer page *
SeparatorMedia = * paper type of separator media *
BodyMedia = * paper type of body media *
print_range_start_page = * start printing at this page *
print_range_end_page = * stop printing after this page *
DSC_For = * string from %%For: *
DSC_Title = * string from %%Title: *
KDK_Host = * string from %KDKHost: *
finisher_file_name = * string with file name *
num_page_elements = * for use with finisher file *
header_file_name = * used in trailer pages *

KDK_Source = * URL of source file - not used by TS *
KDK_Source_Keep = TRUE | FALSE
KDK_Destination_Print = TRUE | FALSE * not used by TS until 4.0 *
KDK_Destination = * URL of destination file for interpret store - not used by TS until 4.0 *

KDK_Email = * email address for trailer pages *
KDK_JobId = * system job id *
routing = * string from %%Routing used on trailer page DeliverTo: *
image_align = front_x + front_y + back_x + back_y

edge_erase = front_top + front_bottom + front_left + front_right + back_top + back_bottom + back_left + back_right
print_density = * 1-10 Valid, 7 typical - not used by TS **
kdk_landscape_detect = TRUE | FALSE * not used by TS *
isGret = TRUE | FALSE * not used by TS * 
kdk_rotation = side + orientation
side = SIDE_NONE | SIDE_FRONT | SIDE_BACK | SIDE_BOTH
orientation = ROTATE_0 | ROTATE_90 | ROTATE_180 | ROTATE_270

scape = SCAPE_PORTRAIT | SCAPE_LANDSCAPE * due in 5.0 *

proofset_state = NOT_PROOFSET | PROOFSET_HAS_NEVER_RUN| PROOFSET_HAS_RUN_ONCE
use_custom_lib = TRUE | FALSE
custom_lib_arg = * char from %KDKCustom: *

spare
job_id= the job number assigned by the Job Manager
connection_id = PARALLEL_PBS | ETHER_DQP | ETHER_ATALK | LOCALTALK_ATALK
connection_type = JOB_SPOOLED | JOB_SPOOLING |  NONSPOOLED
OpenStdinFileDescriptor = * the PDL data reference *
OpenStdoutFileDescriptor = reference to where to send back channel information. Back channel information includes PDL error strings, and requested information/parameters. It does not include TS_STATUS. If there isn't a live back channel, the information will be collected and may be printed on a trailer page.

OutputWhere = PRINT | PRINT_READY = reference where pages go. These may be or'ed for multiple outputs or nothing selected (to calculated compile time or number of pages). *Note PRINT_READY (compressed to tiff group 4 or raster) jobs are not planned for product.
OutputWhat = RASTER | TIFFG4 for each OutputWhere * only needed for development *

IsTrailerPage = TRUE | FALSE
last_descriptor = TRUE | FALSE
SourceFileName * PDL filename if open descriptor can't be used (such as for PDF) *

The Ts_Doc_Complete structure consists of: 01/06/2000

The following options in RED helvetica font are not used by TS for DHV:
Ts_Doc_Complete = * This occurs when the job completed. *
exit_status = TS_JOB_COMPLETE | TS_JOB_ERROR | TS_JOB_CANCEL
TS_JOB_COMPLETE = * job interpreted without errors *
TS_JOB_ERROR = * job terminated due to a PDL error *
TS_JOB_CANCEL = * job terminated due to a cancel request *

time_stat_info_JobTime = * total amount of time to interpret job *

RIP2Store Shared Memory Interface

The image buffers on DHV are stored in shared memory and passed by reference. This allows multiple processes to have assess to them. There may be 1 to N bands of contiguous or not memory sections.
Linked-List structure
typedef struct _SMt_BandData {
  struct _t_BandData *link; /* used to link Bands */
  int    offset; /* band data offset (if non 0) must
                    add in start of shmem address */
  int    height;   /* number of scan lines */
  unsigned   NotUsed1:  2,
             lastBand:  1,/* used to denote last band */
             NotUsed2:  3,
             unmarked:  1, /* if true, this band and
                              all bands in the plane
                              have no marks. RTS can
                              use prefill/postfill to
                              improve performance */
             NotUsed3:  9;
    short  priv;      /* not used on DHV */
    int    bandBytes; /* number of bytes in band */
} SMBandData, *PSMBandData;
/* A NIL data field means that height all-zero scan lines should be sent.
	The height field must normally be greater than zero; however, a totally
	blank page can be represented by a single band whose height is zero.*/
image

RIP2Store Files

	/*	example custom lib that rotates all images 180 degrees or mirrors
		all images if the argument is "mirror" One version of a custom lib
		must provide the CheckCustom procedure	*/
3/24/2000
$HP/src/lib/lcus/CheckCustom.c
$HP/src/lib/lcus/CustomExample.c
$HP/src/lib/lcus/Example.h
$HP/src/lib/lcus/mirror.c
$HP/src/lib/lcus/rotate.c

	/*	RIP2Store implementation	*/
3/24/2000
$HP/src/lib/lcus/RIP2Store/CheckCustom.c
$HP/src/lib/lcus/RIP2Store/CustomWriteTiff.c
$HP/src/lib/lcus/RIP2Store/RIP2Store.h
$HP/src/lib/lcus/RIP2Store/SpoolingServices.c
$HP/src/lib/lcus/RIP2Store/WriteTiff.c

	/*	FullBleed implementation	*/
6/15/2000
$HP/src/lib/lcus/FullBleed/CheckCustom.c
$HP/src/lib/lcus/FullBleed/FullBleed.c
$HP/src/lib/lcus/FullBleed/FullBleed.h
$HP/src/lib/lcus/FullBleed/rotate.c

6/15/2000
**Note: 4,x release is under development and this may not be final.
There are no API changes in the 4.x release but some of the structures
passed to the custom lib will change.

image
Click Here  to see the 4.2 custom library source code. This is the example custom lib
that rotates all images 180 degrees or mirrors. The RIP2Store and FullBleed directories are here too.

 Click Here to get the lib source and include files as a tar file:


image
Click Here  to see the 3.x custom library source code. This is the example custom lib
that rotates all images 180 degrees or mirrors. The RIP2Store directory is in here too.

 Click Here to get the lib source and include files as a tar file:

	/*	replace this lib with the Heidelberg Digital customization lib or add
		a new dynamic lib	*/
1/4/2000
$HP/lib/libcus.so

	/*	Custom prototype and limits	*/
$HP/include/ts_custom.h

	/*	shared memory interface	*/
$HP/include/tsras.h

	/*	Ts_Image_Complete and TS_Doc_Complete structures	*/
$HP/include/jm_ts.h

	/*s	DocRequirements structure	*/
$HP/include/common.h

RIP2Store Status Rel 01.51.02

The example lib and interpreter changes are putback. The custom lib may be enabled with the -c option for PS/PDF and KGL and an environmental variable for PCL in release 01.51.02. Arguments may be passed in to Custom by the same method. The Parsing and doc requirements interface change is not done. Enabling the Custom() lib means all jobs will call the lib right now. The example lib does a 180 degree rotate on each image or it mirrors each image if the string argument is "mirror".

Status Rel 2.00.0003

All TS interpreters have been updated to use the new "parsed" %KDKCustom: option. The -c or environmental variable may still be used if the %KDKCustom: on | off is not used. From an TS implementation view, the document requirements KDKActon flag is checked first. This will be TRUE for a %KDKCustom (either on or off). This will be FALSE if KDKCustom: is not in the job or there is a %KDKCustom: sysdefault. If TRUE do what ever is requested by the doc requirements use_custom_lib field - either call the Custom lib or not with optional argument. If FALSE check the -c command line option or environment variable if this is TRUE call the Custom lib with optional argument (works the same as in release 01.51.02.) If FALSE then check use_custom_lib and do what ever is requested. This logic means you turning the system defaults TRUE for Custom will not call the Custom lib without a %KDKCustom: sysdefault.

Status Rel Custom RIP2Store 1.00 9/3/1999

9/21/1999 The first real custom lib was implemented as a RIP to Store. Click Here to get libcus.so.1.00.tar @(#)Custom RIP2Store 1.00 9/3/1999. *Note* there is a newer version below. This needs to replace the current /hp/lib/libcus.so - you need to untar it and make sure you have the same file permissions as the original and reset the RIP.
	For example (as root)
(click the link above to get the tar file)
mv /hp/lib/libcus.so /hp/lib/libcus.so.orig
tar -xvf libcus.so.tar
mv libcus.so /hp/lib/libcus.so
chmod 755 /hp/lib/libcus.so
chown root /hp/lib/libcus.so
chgrp other /hp/lib/libcus.so
(reset the RIP from the UI)
The purpose of this lib is to write TIFF G4 files out to a well known directory /var/spool/CUSTOM_FILES/ while printing the job. This works for all PDL's (PostScript, PDF, PCL, KGL). Each job is stored in it's own directory with leading zeros. For example RIP job ID 257 will create the directory /var/spool/CUSTOM_FILES/00257. If the directory exists than the next available number will be appended such as 00257.1. The files will be stored by image number with leading zeros such as. Tiff.00001, Tiff.00002 ... Tiff.99999. While storing the job, if there is not enough disk space left to write the next image at the worst case TIFF compression expansion ratio, the RIP will go into a holding state waiting for more disk space to become available.

All files created by this custom library must be cleaned up (moved, deleted, etc.) by the user. This includes cancelled jobs or jobs processing during a RIP reset. Since this is implemented as a custom option booklet jobs will not be combined into one image as done in ISM.

If trailer pages are on, a message such as this should be printed:
@(#)Custom RIP2Store 1.00 9/3/1999 Creating directory: /var/spool/CUSTOM_FILES/00257

A "what libcus.so" will tell you what version the library is such as @(#)Custom RIP2Store 1.00 9/3/1999

Some minor modifications to RIP release rip02.06.00.00 allow full SM error logging with this library. This should also work with prior releases (after 2.00.0003) with this version: Click Here to get libcus.so.noerror.tar @(#)Custom RIP2Store NoError 1.00 9/3/1999. You need to untar it and make sure you have the same file permissions as the original and also rename it to libcus.so and reset the RIP.
	For example (as root)
(click the link above to get the tar file)
mv /hp/lib/libcus.so /hp/lib/libcus.so.orig
tar -xvf libcus.so.noerror.tar
mv libcus.so.noerror /hp/lib/libcus.so
chmod 755 /hp/lib/libcus.so
chown root /hp/lib/libcus.so
chgrp other /hp/lib/libcus.so
(reset the RIP from the UI)
Since the parser was not yet parsing until release 2.00.0003. This lib can be used prior to that release by turning on a command line option in /hp/etc/rip.pids and resetting the RIP. The rip to store would then be on for every job for the interpreter the command line option was changed.

RIP2Store Status Rel 2.07.0000 9/15/1999

Testing of the possible parsed values (see PR #13286) as listed in table above showed many of the %KDKCustom:'s in the job not working. Using a %KDKCustom: on string arg or %KDKCustom: on (string arg) works and not using a %KDKCustom: shut off the feature

RIP2Store Status Rel 2.08.0000 9/15/1999

The configuration utility does not support changing the Custom values in release 02.08 so a %KDKCustom: sysdefault acts like an "on" and not using the %KDKCustom: does not pick a sysdefault value instead it is off.

Status Rel Custom RIP2Store 1.01 9/21/1999

Minor modifications to the filenames from e.g Tiff.00001 to 00001.tif allow the Document Library to determine the filetype for printing and/or viewing. Click Here to get libcus.so.tar @(#)Custom RIP2Store 1.01 9/21/1999. Follow the install procedure in the 1.00 section.

Status Rel Custom RIP2Store 1.02 9/25/1999

The Tiff Orientation tag is changed from 1 to 8 for all files. This will be the correct orientation for landscape A3 and Tabloid sizes and portrait for all other sizes including pamphlet sizes. *Note pamphlets are a single image per file not 2 images combined per page since ISM does this. Tag 8 indicates that the first row of the image is the left hand side and the first column of the image is the bottom. There is no security featues in yet. Click Here to get libcus.so.tar @(#)Custom RIP2Store 1.02 9/25/1999. Follow the install procedure in the 1.00 section.

Test Files


Possible Future Enhancements 9/15/1999

10/7/1999 The lib knows the page number so it knows when page 1 occurs. It could determine job end by checking the files in /var/spool/JM_SPOOL_FILES to know when the job is completed (use the Document Reqirements->header field for the filename). This could be used for file clean up, converting the job to PDF or ftp'ing the files to another server.

Status Rel Custom RIP2Store 1.03 10/7/1999

Some basic security has been added. The Host ID of the SCS workstation must match the version in the library and the release must be 02.xx.xx.

Generate a version for each host ID

8 digit Hex Host ID:
Version: 1.03

Transfer Function Status 11/30/1999

To use this copy startup.ps to /ps/startup.ps and copy colorhtscreen.ps to /hp/bin/colorhtscreen.ps and reset the rip. To uninstall just rename or remove /ps/startup.ps and reset the RIP. Note version for rel 03.xx is below

If this file exists in /ps/startup.ps when the RIP is reset and the /hp/bin/colorhtscreen.ps file has been updated a new transfer function which lightens the entire curve is installed. It is continuos at the endpoints so white is still white and black is still black. It does not alter binary images. Note this is for PDF and PostScript only (not PCL or KGL). This will block jobs from overwriting the transfer function without an explicit call to a systemdict operator. The three operators which are overridden are settransfer setcolortransfer and sethalftone

The steps used to create this were:


Status Rel Custom RIP2Store 1.04 RIP release 03.01.xx 01/04/2000

A common CheckCustom procedure is provided for the interpreters to use. This only needs to be called once per job. This provides an ordered list of libs to call. The dynamic lib part is not yet implemented so it defaults to defined names Custom | CustomEndOfJob | CustomStartOfJob. It is Custom vs. CustomImage for backwards compatibility with 2.x. A parser will be implemented to determine ordered dynamic libs. If format is -d it indicates dynamic libs followed by the lib key name an optional colon ":" if a string arg is provided. e.g. %KDKCustom: on "-dStore:"arg 1" Mail CleanUp:arg2" The first function is KDKCustomStoreStartOfJob | KDKCustomStoreEndOfJob | KDKCustomStoreImage and the first string is "arg 1" - the 2nd function is KDKCustomMailStartOfJob etc. with a NULL string and 3rd KDKCustomCleanUpStartOfJob etc. with "arg2" as the string. An alias file will allow the site to remap options such as alias s store or alias s store:helloworld
/*  pdr = document requirements
*   CommandLine = TRUE if set via command line/enviroment
*   CommandLineString = string if CommandLine TRUE
*   FunctionsToUse = tells calling process function(s) name
*   (NULL terminated list)
*   StringsToUse = tells calling process string(s) to use
*   StartProcsToCall = procedures to call at TS job start
*   ImageProcsToCall = procedures to call for each image
*   EndProcsToCall =  procedures to call at TS job end
*/

T_Bool CheckCustom  (
    Doc_Requirements    *pdr,
    T_Bool              CommandLine,
    char                *CommandLineString,
    char                **FunctionsToUse,
    char                **StringsToUse,
    void                (*StartProcsToCall[])(Doc_Requirements *, char *),
    int                 (*ImageProcsToCall[])(Ts_Image_Complete *, char *),
    void                (*EndProcsToCall[])(    Doc_Requirements *,
                                                Ts_Doc_Complete  *,
                                                char *) )

Generate a version for each host ID Release 03.01.xx

8 digit Hex Host ID:
Version: 1.04

Status Rel Custom RIP2Store 1.05 RIP release 02.xx 01/5/2000

The Call Script feature in release 03.01 has been back ported to the 02.xx release.

Generate a version for each host ID Release 02.xx

8 digit Hex Host ID:
Version: 1.05

Status RIP release 03.06.xx 03/01/2000

The DLL's are functional (max 8 libs), a -d option tells the RIP it is a DLL. This allows the RIP to load a library and call functions not known at compile time. The functions are called in the order specified on the %KDKCustom: line and if no -d option is specified it defaults to the static (02.xx) behavior calling well known procedures.

The size of the custom argument string is increased to 255 bytes. Due to this increase the alias file (proposed in 03.02 was not implemented). There is an undetermined problem calling scripts from camelot (possibly a MT problem). Since there is a call at job end this functionality may no longer be needed. Note an external program is called without problems in the 02.xx custom RIP2Store.

Some slight modifications to the DLL parser from the 03.02 proposal.

Add ';' between DLL names.

    %KDKCustom: on (-dStore:arg1;Mail;CleanUp:arg2)
                                ^    ^
                                |    |

2) White space will be stripped between DLL's

    %KDKCustom: on (-d Store:arg1; Mail; CleanUp :arg2)

    Arguments will not have white space stripped and don't need
    to be quoted.

4) DLL's located in '/hp/lib' in the form of KDKCustom.so

    /hp/lib/KDKCustomStore.so
    /hp/lib/KDKCustomMail.so
    /hp/lib/KDKCustomCleanup.so

5) DLL's not found or incomplete will send G_CANCEL_JOB.
 
EXAMPLE:
 
%KDKCustom: on (-dStore:arg1;Mail;CleanUp: "arg1 arg2")
 
Will call
 
/hp/lib/KDKCustomStore.so(StartProcs,ImageProcs,EndProcs)   w/ NO-ARGS
/hp/lib/KDKCustomMail.so(StartProcs,ImageProcs,EndProcs)    w/args = 'arg1'
/hp/lib/KDKCustomCleanUp.so(StartProcs,ImageProcs,EndProcs) w/args = '"arg1 arg2"'

Special camelot with PDF slips back ported to 2.x for Wayne 03/16/2000

A camelot version for RIP release 02.14 with a back ported fix for PDF slip sheets is available. The newest version requires a license to be obtained through HDi (internal contact is Bill DeMatties). A hostid is required and you get this by typing hostid on your SCS workstation. When getting the license the keyword to use for the program name is "pdf_slips". The password is placed in the /usr/kodak/lib/passwd/.license.cus file. Save current /hp/bin/camelot and tar and copy get pdfslipstestlicense.tar The old unlicensed version is here get pdfslipstest.tar Ensure the new camelot has the same owner and permissions as the old camelot then reset the rip.

Example commands to do this (running as root)

You must have a valid license or the RIP will not operate
Click the hyperlink above to get the tar file needed
Last thing is to reset the RIP from the UI

hostid (done before for license)
ls -l /hp/bin/camelot
cp -p /hp/bin/camelot /hp/bin/camelot.orig
tar -xvf pdfslipstestlicense.tar
cp camelot /hp/bin/camelot
ls -l /hp/bin/camelot (check permissions and owner same as old camelot)
chown root /hp/bin/camelot (if needed)
chmod 555 /hp/bin/camelot (if needed)

These are the diffs in pdfprint.c:

30a31
> *    03/09/2000   Ed Chapman  special version pdf slip sheets #12321 backported 2.x
234a236,237
> 	int OldpaperWidth = -5;
> 	int OldpaperHeight = -5;
777a781,785
> 				/*  PR #12321 fix 1 of 2    */
> 			OldpaperWidth = paperWidth;
> 			OldpaperHeight = paperHeight;
> 				/*  END PR #12321 fix 1 of 2    */
> 
784a793,817
> 				/*  PR #12321 fix 2 of 2    */
> 			if((dreqs->BodyMedia != -1) && ((popt->pdf_opts & USE_INLINE_SPD) != 0))
> 			{
> 				if(PageSizeClose(   (short)OldpaperWidth,
> 									(short)OldpaperHeight,
> 									(short)paperWidth,
> 									(short)paperHeight) == false)
> 				{
> 					ts_printf(TS_DB_INFO)
> 						("%s %s - Issuing SPD outside save restore so slips work\n",
> 						__PDFHEAD__, __PROC__);
> 
> 					sprintf(psStr,
> 						"<< /PageSize [%d %d] >> setpagedevice ",
> 						paperWidth, paperHeight);
> 
> 					ts_printf(TS_DB_INFO)
> 						("%s %s - Execute  ---> %s <--- for page = %d\n",
> 						__PDFHEAD__, __PROC__, psStr, PageNum + 1);
> 
> 					PSExecuteString(psStr);
> 				}
> 			}    
> 				/*  END PR #12321 fix 2 of 2    */

This was added after main() kicks off to obtain a license in solarismain.c:

     if ( check_license("pdf_slips")  )
    {
        ts_printf(TS_DB_INFO)
            ("%s %s - Licence OK For pdf_slips\n",
            __HEAD__, __PROC__);
        ;
    }    

    else
    {   
        ts_printf(TS_DB_ERRORS)
            ("%s %s - Licence ***NOT*** OK For pdf_slips\n",
            __HEAD__, __PROC__);


            /*  log error (unknown in 2.x)  with SM, clean up, and exit   */
        ts_interp_error(    TSQueue,
                            7029,
                            __PROC__,
                            NULL,
                            TRUE);
    }

This was added to link the license lib in config:

$(WORLD_ROOT)/lib/license.lib.cus.a \

Transfer Function Status RIP rel 03.08 03/10/2000

Here is the version for RIP releases 03.08 and beyond. It should work with a 2.x release but it wasn't regression tested in a 2.x machine. To use this copy startup.3.x.ps to /ps/startup.ps and copy colorhtscreen.ps to /hp/bin/colorhtscreen.ps and reset the rip. To uninstall just rename or remove /ps/startup.ps and reset the RIP. The other instructions are the same as before.

Transfer Function Status RIP rel 05.00 12/05/2000

Here is the new version for RIP releases 05.00 and beyond. It should work with earlier releases but it wasn't regression tested. This redefines showpage which is needed with some drivers. To use this copy startup.5.x.ps to /ps/startup.ps and copy colorhtscreen.ps to /hp/bin/colorhtscreen.ps and reset the rip. To uninstall just rename or remove /ps/startup.ps and reset the RIP. The other instructions are the same as before.

Status RIP release 05.07.00.00 image 11/28/2001

There has been only minor changes in the custom library for 5.x - the strtok call was changed to to strtok_r to be MT safe. The structures e.g. DocRequirements change each release so ensure your workspace release matches the targeted customer site.
Hits Since Feb 19, 1999 email me ( Edward_Chapman@Nexpress.com) image