# ACEDB User Group Newsletter - June 2002

If you want to have this newsletter mailed to you or you want to make comments/suggestions about the format/content then send an email to acedb@sanger.ac.uk.

This month, some new homology drawing tags/code, some bug fixes and some general gubbins for developers.

## General News

More smap and more smap and more smap.

## New Features

### New Blixem Preference

From the xace "Preferences" dialog you can now specify a path for the script that launches the stand alone version of blixem (you need to set the BLIXEM_EXTERNAL preference to use the stand alone version). This allows users to select which version of blixem they want to run which can be useful for testing new versions.

### Display of Homologies and EST read pairs in FMap

The FMap display now supports drawing of lines between the blocks for a single feature, e.g. all the blocks of a single homolgy match. This is very useful when there are lots of homologies in a column or when a homology is spread out over a long distance as it makes it easy to see which blocks belong with each other or whether there are further blocks off screen. This is extended for EST read pairs so that the blocks for each match are joined by lines and the pair are also joined with a dashed line. The line drawing is turned on when the display mode for a feature/homology column is set to "cluster" (cluster mode already vertically aligns the blocks for each feature).

Line drawing for all features is controlled by:

`Join_blocks`:This is a new tag in the `Display` section of the `?Method` class, if present in the Method object for a feature then blocks will be joined by lines when the column display mode is "cluster".

In addition to specifying the `Join_blocks` tag, connecting of EST read pairs by a dashed line is controlled by the following tags within the two Sequence class objects representing the EST read pair:

`Paired_read ?Sequence XREF Paired_read`: each EST Sequence object must cross reference the other.

`EST_5` or `EST_3`: one EST Sequence object must have the `EST_5` tag and one the `EST_3` tag to indicate whether they are the 5' or 3' read.

## Bugs Fixed

### Small bug in "Model" command

Fixed a small buglet in "Model" command which meant code read past the end of the class definition to be displayed and showed irrelevant comments that happened to follow the definition.

### Write access to database.map

The code now crashes if it cannot write the database.map file, it used to fail silently potentially leaving a corrupted database.

### Show_in_reverse_orientation bug

Homols that have the Show_in_reverse_orientation tag set get swopped to the opposite strand, they must be swopped back to their original strand when passed to Blixem.

## Developers Corner

If you wish to make comments/suggestions about any of the below, please mail them to acedb@sanger.ac.uk

### Some messubs changes

messcrash message format: The format of the message now contains information about the program running, userid etc. in a more easily parsed/uniform way:

    // FATAL ERROR (ruid: XXX, euid: XXX, nodeid: XXX, program: XXX, version: XXX, file: XXX.c, line: XXXX)
       -  Unable to update database/database.map file (system error 13 - Permission denied)

`messcrash` optional `abort()` call: You can control whether messcrash calls `abort()` or not using the `messAbortOnCrash()` routine prior to the messcrash call. This call is used in the implementation of the `messAssert()` macro described below.

A safer hprintf(): `hprintf()` (and other XXprintf style routines) have been a problem in Standard C because there was no way to tell whether you had allocated a big enough buffer to hold the string that they produce. Some operating systems and the latest version of the C standard library overcome this to some extent with XXnprintf versions of the calls which print at most "n" characters. Glib already provides these type of calls, e.g. g_vsnprintf(), and hprintf() now makes use of this.

Some messNNN macros(): The following macros have been added to regular.h which should help with producing concise but error-checking code:

messCheck()
  allows more succint (one line) checking of whether calls such as printf() worked. Can be used in either of these formats:

      messCheck( var = func(arg1, arg2), cond) ;
      messCheck( func(arg1, arg2), cond) ;

  Note that you don't have to assign the function result to a variable and that "cond" should be a simple equality test like != 0 or == NULL.
messAssert()
  this macro works just like the standard C library assert() but calls messcrash() instead of directly calling abort().

If the checks fail then messcrash is called with a string which shows the condition that failed.

### Graph package changes

You can now set the graph line style via the `graphLineStyle()` call to either `GRAPH_LINE_SOLID` or `GRAPH_LINE_DASHED`.

There is a new `graphBoxSetDim()` function which you can use to set the dimensions of a box, this enables you to do things like draw a single pixel wide line but in a box that is several pixels wide so that the user can more easily click on the line (this is used in the homology block line drawing code so that the user can click on the lines between homology boxes to select that particular homology match.

### SMap changes

The smap code now makes use of the NO_OVERLAP_EXTERNAL status flags to detect which end of a feature has been clipped if the feature extends beyond the end of the current smap. We can make use of this to draw at least part of very long features that extend beyond the ends of the current FMap context for instance.

## June monthly build not available.

Apologies, once again there was no build this month due to the major SMap development work.

Last modified: Wed Dec 18 16:33:20 GMT 2002