From: donna@uhunix.uhcc.Hawaii.Edu (Donna Okazaki)
Subject: Re: DLG2VIFF
Organization: University of Hawaii
Date: Fri, 20 Nov 1992 21:41:21 GMT

In article <41543@pprg.eece.unm.edu.pprg.unm.edu> rasure@borris.eece.unm.edu (John Rasure) writes:
>
>In "DLG2VIFF", Chris Blasband writes:
>+ I have received over 900 DLG files from USGS and I am
>+ trying to use the dlg2viff command to transform them
>+ into viff files. When I type in the command, Khoros
>+ just sits there and does nothing (it does not even
>+ open up the output file).
>+ 
>+ Has anyone successfully read in the optional formatted
>+ DLG files, and if so, what's the trick.
>
>It has been awhile since this has come up.  About 9 months ago, we
>considered rewriting the dlg2viff code for a Khoros 1.0 patch - but
>we did not.  It was implemented poorly.
>
>What prompted us to look at it in detail was that there was a bug on SUNS
>that did not show up on DEC machines .... in trying to track it down we
>decided the best thing to do was leave it alone and rewrite it when we
>get resources to do so - it may or may not be in Khoros 2.0.
>

I have been using DLG2VIFF on a Sparc 2 running SunOS 4.1.2
on USGS Optional format, level-3 DLG files with no problem.
(Using Khoros 1.0.5).  When I read the data from the tape, I
converted them from fixed length to variable length records,
terminated by newlines.

However, I agree that its design leaves much to be desired
and may get around to rewriting it myself if my stack ever gets
that low. <wishful thinking> :-)

BTW, there is a small bug/oversight in the readline() function in
dlg.c which doesn't seem to affect DLG2VIFF, but is annoying 
for those of us trying to use the readdlg() function to extract 
line records from level-3 files.  The following patch fixes this:

*****patch dlg.c in $KHOROS_HOME/src/file_formats/Lib*****
591a592
>     /* 11-13-92 - patched to read line number */
593c594
<     readfixed (file,  5, "%d", dummys);
---
>     readfixed (file,  5, "%d", &(lineptr->linenum));
*****end of patch*****


Also, there is a major bug in DEM2VIFF which causes it to crash
on some DEM files.  I also thought it should be able to read DEM's
with elevation in FEET and convert it to meters instead of
rejecting the DEM and it should also apply the z-resolution factor
to the elevations.  These fixes are contained in the following patch:

*****patch ldem2viff.c in $KHOROS_HOME/src/file_formats/Lib*****
61a62
> #include <math.h>
62a64
> #define FEET2METERS .3048
180a183
>      * 10-15-92 Added feet capability.
183,185c186,188
<         if (dem_img->elevationunit != METERS) {
<             fprintf (stderr, "error in ldem2viff: 1-degree DEM data must ");
<             fprintf (stderr, "have elevations given in meters\n");
---
>         if (dem_img->elevationunit != METERS && dem_img->elevationunit != FEET) {
>             fprintf (stderr, "error in ldem2viff: 1-degree DEM data must ");
>             fprintf (stderr, "have elevations given in meters or feet\n");
190,192c193,195
<         if (dem_img->elevationunit != METERS) {
<             fprintf (stderr, "error in ldem2viff: 7.5-minute DEM data must ");
<             fprintf (stderr, "have elevations given in meters\n");
---
>         if (dem_img->elevationunit != METERS && dem_img->elevationunit != FEET) {
>             fprintf (stderr, "error in ldem2viff: 7.5-minute DEM data must ");
>             fprintf (stderr, "have elevations given in meters or feet\n");
291c294,295
<                 elevation = elevation + (float)dem_img->data[x]->elevation;
---
>                 elevation = elevation + 
>                             (float)(dem_img->data[x]->elevation * dem_img->zres);
292a297,303
>                 /*
>                  * 10-15-92 Adjust feet to meters if necessary.
>                  */
>                 if (dem_img->elevationunit == FEET) {
>                     elevation *= FEET2METERS;
>                 }
> 
406c417,418
<                 elevation = elevation + dem_img->data[x]->elevation;
---
>                 elevation = elevation +
>                             (float)(dem_img->data[x]->elevation * dem_img->zres);
409,410c421
<                  *
<                  *
---
>                  * 10-15-92 Adjust feet to meters if necessary.
411a423,430
>                 if (dem_img->elevationunit == FEET) {
>                     elevation *= FEET2METERS;
>                 }
> 
>                 /*
>                  * 10-21-92 Fix calculation of i.  Range must go from
>                  * 0 to (xv_rows-1) so data won't overflow outside of array.
>                  */
413,414c432,433
<                 i = (int) (((northing-min_northing)/northing_range) * xv_rows);
<                 i = xv_rows -i;
---
>                 i = irint(((xv_rows-1)*(northing-min_northing))/northing_range);
>                 i = (xv_rows-1) - i;
*****end of patch*****

-----
She surveys seafloors       | Donna Okazaki
to the seashore             | Univ. of Hawaii, Geography Dept.
        ~ ~ ~ ~             | donna@uhunix.uhcc.hawaii.edu
Newsgroups: comp.soft-sys.khoros