This file is indexed.

/usr/include/ncbi/udviewer.h is in libvibrant6-dev 6.1.20170106-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
/*   undviewer.h
* ===========================================================================
*
*                            PUBLIC DOMAIN NOTICE
*            National Center for Biotechnology Information (NCBI)
*
*  This software/database is a "United States Government Work" under the
*  terms of the United States Copyright Act.  It was written as part of
*  the author's official duties as a United States Government employee and
*  thus cannot be copyrighted.  This software/database is freely available
*  to the public for use. The National Library of Medicine and the U.S.
*  Government do not place any restriction on its use or reproduction.
*  We would, however, appreciate having the NCBI and the author cited in
*  any work or product based on this material
*
*  Although all reasonable efforts have been taken to ensure the accuracy
*  and reliability of the software and data, the NLM and the U.S.
*  Government do not and cannot warrant the performance or results that
*  may be obtained by using this software or data. The NLM and the U.S.
*  Government disclaim all warranties, express or implied, including
*  warranties of performance, merchantability or fitness for any particular
*  purpose.
*
* ===========================================================================
*
* File Name:  undviewer.h
*
* Author:  Patrick Durand
*
* Version Creation Date:   5/3/99
*
* $Revision: 6.58 $
*
* File Description: 
*
* Modifications:
* --------------------------------------------------------------------------
* $Log: udviewer.h,v $
* Revision 6.58  2006/07/13 17:13:18  bollin
* use Uint4 instead of Uint2 for itemID values
*
* Revision 6.57  2000/07/12 15:38:08  hurwitz
* made rectangle select much faster.  it's almost working.
*
* Revision 6.56  2000/07/08 20:44:01  vakatov
* Get all "#include" out of the 'extern "C" { }' scope;  other cleanup...
*
* Revision 6.55  2000/06/27 20:46:38  hurwitz
* fixed bugs with select rectangle, added select row option
*
* Revision 6.54  2000/06/26 19:32:17  hurwitz
* can select a rectangle instead of a single row, auto horizontal scroll works but not vertical scroll yet
*
* Revision 6.53  2000/06/16 14:57:02  lewisg
* move entrez calls out of desktop
*
* Revision 6.52  2000/05/19 13:48:31  hurwitz
* made a version of DDE that doesn't allow aligned gaps, changed wording for adding new rows
*
* Revision 6.51  2000/05/15 23:39:34  lewisg
* shred cblast, add menu items for gapped/ungapped, fix pdbheaders
*
* Revision 6.50  2000/04/28 13:51:20  kans
* db_list is a PopuP, not a scrolling LisT
*
* Revision 6.49  2000/04/27 22:21:58  lewisg
* misc bugs/features
*
* Revision 6.48  2000/04/27 19:47:31  kans
* implemented udv reset and select (PD+JK)
*
* Revision 6.47  2000/04/13 13:58:03  durand
* allowed udv to display reverse complement sequence
*
* Revision 6.46  2000/04/11 13:19:26  durand
* added UDV_LoadSpecificEditor for Sequin
*
* Revision 6.45  2000/04/10 21:41:26  lewisg
* move alignment menus into ddv, udv from cn3d
*
* Revision 6.44  2000/04/10 20:33:40  lewisg
* fix show/hide for blast multiple, make blast multiple API generic
*
* Revision 6.43  2000/04/05 21:13:20  kans
* more changes to allow udv panel to be added to Sequin viewer
*
* Revision 6.42  2000/04/05 20:52:36  hurwitz
* added GUI control for shifting left and right alignment boundaries
*
* Revision 6.41  2000/04/03 22:26:32  hurwitz
* can now shift a row with click and drag
*
* Revision 6.40  2000/03/31 13:51:21  durand
* added UDV_InitForSequin()
*
* Revision 6.39  2000/03/30 19:54:09  kans
* initial work to get UDV and DDV into Sequin viewer
*
* Revision 6.38  2000/03/28 21:03:14  hurwitz
* added gui control to re-order rows
*
* Revision 6.37  2000/03/15 19:32:20  lewisg
* launch only single udv window
*
* Revision 6.36  2000/03/06 14:00:47  durand
* first release of the Summary viewer done
*
* Revision 6.35  2000/03/02 15:41:46  lewisg
* move StartNetworkProc typedef to samutil.h
*
* Revision 6.34  2000/03/01 22:49:41  lewisg
* import bioseq, neatlyindex, get rid of dead code
*
* Revision 6.33  2000/02/16 22:38:30  durand
* fixed some wierd behaviours of features selections
*
* Revision 6.32  2000/02/16 16:00:33  durand
* added UDVprocid and GVprocid to vmp data structure
*
* Revision 6.31  2000/02/15 22:40:58  lewisg
* add ability to launch udv so that it colors by row, fixes to colormgr, track rows from viewmgr, fix visual c projects
*
* Revision 6.30  2000/01/11 15:03:18  durand
* remove network stuff
*
* Revision 6.29  2000/01/10 15:18:40  durand
* use Entrez instead of ID1
*
* Revision 6.28  2000/01/05 21:06:38  durand
* update mouse click actions and DrawSequence function for a better use from ddv and cn3d
*
* Revision 6.27  2000/01/03 21:06:38  durand
* update the way the udv main window is created
*
* Revision 6.26  1999/12/03 23:17:23  lewisg
* Patrick's new global update msg, argument passing when launching ddv, experimental editing
*
* Revision 6.25  1999/11/29 15:17:55  durand
* designed a new GUI; fixed problems under Win95 and Linux
*
* Revision 6.24  1999/11/19 15:01:47  durand
* speed up mouse selection ; avoid sequence flashing during selection ; update menu functionalities
*
* Revision 6.23  1999/11/18 14:54:23  durand
* add a new function to create an image map given a ParaG structure - Entrez sequence viewer only
*
* Revision 6.22  1999/11/09 21:06:58  durand
* add sequence selection manager
*
* Revision 6.21  1999/10/21 13:00:33  durand
* add new fields in UDV_mouse_select struct
*
* Revision 6.20  1999/10/20 20:07:44  durand
* add first_row and first_col to UDV_mouse_select
*
* Revision 6.19  1999/10/02 15:11:16  durand
* update the code to be used by wwwudv
*
* Revision 6.18  1999/09/29 20:09:51  durand
* modify some parts of the code to be used by the cgi-bin release of UDV
*
* Revision 6.17  1999/09/22 14:26:50  durand
* add fields for DDV mouse management
*
* Revision 6.16  1999/09/20 21:57:41  durand
* switch UDV_draw_double_cursor from static to NLM_EXTERN
*
* Revision 6.15  1999/09/08 15:36:58  beloslyu
* Typo fixed
*
* Revision 6.14  1999/09/08 14:09:32  durand
* update UDV_Draw_scale to deal with discontinuous SEqAlign
*
* Revision 6.13  1999/07/30 20:08:56  durand
* updates for the new Entrez graphical viewer
*
* Revision 6.12  1999/07/19 20:35:36  durand
* switch ScalePositionfrom from Boolean to Uint1 in UDV_Draw_scale
*
* Revision 6.11  1999/07/09 13:56:56  durand
* removed all the defines to udvdef.h
*
* Revision 6.10  1999/07/06 17:02:59  durand
* add UDVPanelRegion structure for DDV
*
* Revision 6.9  1999/06/16 22:11:24  durand
* update UDV functions to be used by DDV
*
* Revision 6.8  1999/06/16 13:07:00  durand
* update UDV functions to be used by DDV
*
* Revision 6.7  1999/06/15 15:25:53  durand
* remove DDV_win in UDVPanelData structure
*
* Revision 6.6  1999/06/08 13:52:36  durand
* update UDV data structures for the MSA editor
* ==========================================================================
*/

#ifndef _UNDVIEWER_
#define _UNDVIEWER_


/*******************************************************************************

  INCLUDE SECTION 

*******************************************************************************/
#include <explore.h>
#include <gather.h>
#include <ncbi.h>
#include <ncbistr.h>
#include <objfdef.h>
#include <objseq.h>
#include <objsub.h>
#include <seqmgr.h>
#include <seqport.h>
#include <sequtil.h>
#include <sqnutils.h>
#include <vibrant.h>
#include <bspview.h>

#include <odlbox.h>
#include <udvseq.h>
#include <udvdef.h>

#include <ddvcolor.h>
#include <samutil.h>


#undef NLM_EXTERN
#ifdef NLM_IMPORT
#define NLM_EXTERN NLM_IMPORT
#else
#define NLM_EXTERN extern
#endif

#ifdef __cplusplus
extern "C" {
#endif

/*******************************************************************************

  The major elements of the single sequence viewer : window and paragraph 

*******************************************************************************/

	/*****************************************************************************

	Structure of the UnDViewer area

	-Panel--------------------------------------------------    -
	|         |             |                              |    |
	| Name    | Scale area  |                              |    |
	| area    | (if left    |    Sequence area             |    |
	|         |  scale)     |    (paragraph)               |    cyClient
	|         |             |                              |    |
	|         |             |                              |    |
	--------------------------------------------------------    -
	<-cxName->
        	  <-cxLeftScale->
	<-------------------------cxClient--------------------->

	*****************************************************************************/

	/*****************************************************************************

	Structure of a ParaG : see module udvseq.h

	*****************************************************************************/


/*******************************************************************************

  DATA STRUCTURE SECTION 

*******************************************************************************/
	typedef struct udvscaledata {
		Uint4 ScaleColor;	/*letter color*/
		Uint4 TickMajColor;	/*tick color*/
		Uint4 TickMinColor;	/*tick color*/
		Boolean ShowMajorTick;	/*display tick marks if TRUE*/
		Boolean ShowMMinorTick;	/*display tick marks if TRUE*/
		Int2 ScalePosition;	/*position of the scale, see #define above*/
		Int2 cxLeftScale;	/*width of the 'SCALE_POS_LEFT' area, pixel unit
							NULL if ScalePosition== _TOP or if ShowScale==FALSE*/
		Int2 MajorTickEvery;	/*put a major tick every*/
		Int2 MinorTickEvery;	/*put a minor tick every*/
		} UDVScaleData, PNTR UDVScaleDataPtr;

	typedef struct udvletterlayout {
		Uint4 LetClr;		/*color of a letter*/
		Uint4 bkClr;		/*bk color of a letter*/
		Uint1 AspLet;		/*aspect (uppercase,...)*/
		} UDVLetterLayout, PNTR UDVLetterLayoutPtr;

	typedef struct udvfontdata {
		FonT hFnt;			/*Current Font*/
		Boolean UseDefaultColorLetter; /*if true, use the following color for 
							letter (NA or AA); draft mode*/
		Uint4 LetterColor;
		Int2 cxChar;		/*width of a char, pixel unit*/
		Int2 cyChar;		/*height of a char, pixel unit*/
		Int2 LineHeight;	/*height of a single data line*/
		Int2 ColWidth;/*width of a single data column-MSA only*/
		} UDVFontData, PNTR UDVFontDataPtr;

	/*the following structure was added for DDV. It's here (and not in the
	code of DDV), because that struct is part of UDVPanelData*/
	typedef struct udvpanelregion{/*descriptor of panel regions : ruler,
									names list, ParaG region, etc.*/
		RecT  region;/*size of the region*/
		Uint1 type;  /*type of the region; see above*/
		} UDVPanelRegion, PNTR UDVPanelRegionPtr;

	typedef struct udvpaneldata {
		ValNodePtr region;/*descriptor of the panel content; each 
						region->data.ptrvalue contains a pointer to UDVPanelRegion*/
		Int4 nTotLines;		/*total number of line to display*/
		Int4 nTotCol;/*total number of column to display-MSA only*/
		/*Display options*/
		Boolean ShowFeatures; /*TRUE: show features*/
		Boolean ShowScale;	/*TRUE: show num. scale*/
		Boolean ShowByBlock;/*TRUE: use nBlockByLine -MSA only*/
		/*panel size*/
		Int2 cxClient;		/*width of the client panel area, pixel unit*/
		Int2 cyClient;		/*height of the client panel area, pixel unit*/
		Int2 cxName;		/*width of the 'Name' area, pixel unit*/
		Int2 cyScale;		/*height of the 'Sacle' area, pixel unit (MSA only)*/

		/*Letter lines*/
		Int2 nCharByLine;	/*number of letter displayed on one line of the viewer*/
		Int2 nBlockByLine;	/*number Ten-letter blocks displayed on one line of 
							the viewer*/
		} UDVPanelData, PNTR UDVPanelDataPtr;

	typedef struct udvscrolldata {
		/*Scroll Bar*/
		Int4 ScrollMax;		/*Size of the vertical Scroll Bar*/
							/*also equal number of data lines displayed within
							UnDViewer*/
		Int4 ScrollPos;		/*Current position within the vertical Scroll Bar*/
		Int4 ScrollPage;	/*Page decal of the vertical Scroll Bar*/
		} UDVScrollData, PNTR UDVScrollDataPtr;

	typedef struct undviewergraphdata {
		UDVFontData 	udv_font;	/*Font*/
		UDVPanelData 	udv_panel;	/*Panel*/		
		UDVScaleData	udv_scale;	/*Numerical scale*/
		UDVScrollData	udv_vscrl;	/*vertical Scroll Bar*/
		UDVScrollData	udv_hscrl;	/*horizontal Scroll Bar-MSA only*/
		Uint4Ptr 		pClr;		/*Color table for Features*/
		Uint4			DisplayOptions;/*bits vector to encode display options*/
		UDVLetterLayout NA_LayoutPal[5];
		UDVLetterLayout AA_LayoutPal[26];
		Int4            GotoLetter;/*letter to highlight after a GoTo action; one-based value*/
		} UnDViewerGraphData, PNTR UnDViewerGraphDataPtr;

	typedef struct udv_item_select {
		Uint2		eIDsel;			/*-|               */
		Uint2		iIDsel;			/* |--selected item*/
		Uint2		iTypeSel;		/*-|               */
		} UDV_Item_Select, PNTR UDV_Item_SelectPtr;
		
  typedef struct udv_mouse_select {
    Int1      Action_type;      /*action with the mouse*/
    RecT      rcClip;           /*limit mvt of the mouse to this rc*/
    PoinT     oldPos;           /*old pos of the mouse*/
    PoinT     newPos;           /*new pos of the mouse*/
    ParaGPtr	pgp;              /*current ParaG data*/
    Char      szPos[20];        /*current position within the bsp*/
    Int4      old_row;          /*used by DDV only (display coords); 
							                    set when 'on_click' and every 'on_drag'*/
    Int4      old_col;          /*
                                  set when 'on_click' and every 'on_drag'*/
    ParaGPtr    old_pgp;        /*pgp where old_col was located*/
    Int4        first_row;      /*set only when 'on_click'*/
    Int4        first_col;      /*set only when 'on_click'*/
    Int4        last_row;       /*save corner of rectangle*/
    Int4        last_col;       /*save corner of rectangle*/
    Int4*       first_cols;     /*array for multiple rows*/
    ParaGPtr    first_pgp;      /*pgp where first_col was located*/
    ParaGPtr*   first_pgps;     /*array for multiple rows*/
    PoinT       first_point;    /*point where first clicked*/
    Int4        first_HScroll;  /*horizontal scroll position when first clicked*/
    Int4        first_VScroll;  /*vertical scroll position when first clicked*/
    Int4        old_HScroll;    /*horizontal scroll when select rectangle last drawn */
    Int4        old_VScroll;    /*vertical scroll when select rectangle last drawn */
    RecT        outline;        /*rectangle when making selection*/
  } UDV_mouse_select,PNTR UDV_mouse_selectPtr;

	typedef  struct  scanfeat {/*use to scan feature when the user clicks
						on a feature*/
		Uint2 eID;		/*identity of the feature*/
		Uint2 iID;		
		Int4 index;		/*position within the Feature List Box*/
		} ScanFeat, PNTR ScanFeatPtr;

	typedef struct udvtimerdata {/*used with the UDV timer*/
		Int4 pos;/*one-based; bsp coord*/
		Int2 delay;
		Uint1 status;
		Uint1 action;
	}UDVTimerData, PNTR UDVTimerDataPtr;

	typedef struct viewerdialogdata {
		Uint2 				procid;		/*identification of ObjMgr User Data*/
		Uint2 				proctype;	/* idem */
		Uint2 				userkey;	/* idem */
		BspInfo				bsp_i;		/*bsp information*/
		UnDViewerGraphData 	udv_graph;	/*UnDviewer graphical panel info*/
		ValNodePtr 			ParaG;		/*ParaG data of the entire display*/
		PaneL				UnDViewer;	/*handle of the seq viewer panel*/
		PrompT				InfoPanel;	/*handle of the info panel*/
		WindoW              Parent;  /*only valid for Autonomous viewer*/
		UDV_mouse_select	UDV_ms;		/*used for mouse manipulation*/
		UDV_Item_Select		Item_select;/*selected Item*/
		UDV_Item_Select		Old_Item_select;/*old selected Item*/
		Boolean				ClickFeatFromDlg;/*click from Feat List Dlg==TRUE*/
		UDVTimerData		udt;
        SAM_ViewGlobal     *vgp;  /*added for data exchange with Cn3D*/
        BioseqViewPtr       bvp;  /*added for data exchange with Sequin*/
		Boolean             bDisplayRevComp;/*TRUE : diasplay the reverse
		    complement of a sequence. Nuc. only.*/
		} ViewerDialogData, PNTR ViewerDialogDataPtr;

	typedef struct udvmainmenu {/*handles of the main menu commands*/
		MenU File;
		MenU Options;
		MenU Help;
        MenU Align;
		IteM FileOpen;		/*open file command*/
		IteM EntrezOpen;	/*open from Entrez command*/
		IteM FileClose;		/*close file command*/
		IteM ListSequence;	/*list of available sequence*/
		IteM QuitViewer;	/*close the viewer*/
		IteM ShowFeature;	/*show feature on/off command*/
		IteM ShowFeatureList;	/*show feature on/off command*/
		IteM SearchForFeature;/*search features by keyword*/
		IteM ShowRevComp;	/*show reverse complement (nuc. seq. only)*/
		MenU ScalePos;		/*scale position command*/
		ChoicE ScalePosChoice; /*scale pos value (sub-menu)*/
		IteM RefreshScreen;	/*redraw the entire screen*/
    MenU AddRow;
    MenU FromFile;
    MenU FromNet;
    IteM BlastMany;
		IteM ConfigNet;/*Entrez Network configuration*/
		IteM HelpAbout;	/*what's that ?*/
	} UDVMainMenu, PNTR UDVMainMenuPtr;

	typedef struct udvlogodata {
		FonT	f1;
		FonT	f2;
		FonT	f3;
		Char	szTitle[25];
		Char	szDesc[80];
	} UDVLogoData, PNTR UDVLogoDataPtr;
		
	typedef struct viewermain {
		Boolean             UseNetwork;/*true if UDV is connected to Entrez*/
		Uint2               UDVprocid;
		Uint2               GVprocid;
			/*main win menu*/
		UDVMainMenu			MainMenu;		/*menu command list*/
			/*Features List DlgBox*/
		WindoW				hFeatDlg;
			/*Panel component*/
		ButtoN              gotoBtn;
		TexT                gotoVal;
		PaneL				Logo_Panel;
		Boolean				Show_logo;
		GrouP               StatusGroup;
			/*viewer data used only when AutonomeViewer is TRUE */
		Boolean				AutonomeViewer;
		Pointer				dataptr;		/*identification of the object*/
		Uint2				datatype;		/*idem */
		Uint2				entityID;		/*idem */
		ValNodePtr			BspTable;		/*list of bsp*/
		Uint2				BspChoice;		/*selection in menu (ONE-based)*/
		WindoW				hWndMain;
			/*BSP displayed in the viewer*/
		ViewerDialogDataPtr vdp;		
		} ViewerMain, PNTR ViewerMainPtr;

#define REGISTER_UDV_AUTONOMOUS ObjMgrProcLoad(OMPROC_VIEW, \
		"OneD-Viewer", "SingleSeqViewer", OBJ_BIOSEQ, 0, OBJ_BIOSEQ, 0, \
		NULL, UDV_ObjRegAutonomous, 0)	
#define REGISTER_UDV_SEQENTRY ObjMgrProcLoad(OMPROC_VIEW, \
		"OneD-Viewer SE", "SingleSeqViewer SE", OBJ_BIOSEQSET, 0, OBJ_BIOSEQSET, 0, \
		NULL, UDV_ObjRegAutonomous, 0)	

	/*struture passed to the FEAT List dialog box*/
	typedef  struct  flmdata {
		WindoW 		hWndMain;	/*UnDviewer*/
		WindoW 		lbox;		/*list of features (OwnerDraw Lbox)*/
		GrouP		gFeatClass;	/*Hidden group of the Feat Class popup*/
		PopuP		pop;	/*available class list*/
		Int1Ptr		SeqFeatClass;/*classes reported for a sequence*/
		} FLMData, PNTR FLMDataPtr;

	/*use to initialize the Feature List Dialog box*/
	typedef  struct  scanfeatforselect {
		Uint2 	eID;	/*if !=-1, UnDviewer slected feature*/		
		Uint2 	iID;		
		Int4 	index;	/*return the index of the UnDviewer slected feature*/
		Int4 	compteur;/*count the number of entries in Feature List DlgBox*/
		WindoW 	lbox;	/*the list itself*/
		Boolean SeqFeatListAvail[SEQFEAT_MAX+1];/*use to retrieve the feature
				classes*/
		Boolean SearchFeat;
		Char    szKeyword[50];
		} ScanFeatForSelect, PNTR ScanFeatForSelectPtr;

	/*
	*  The UdvGlobalsPtr may be registered with a call to SetAppProperty
	*  e.g., SetAppProperty ("UdvGlobals", &udvglobals), where udvglobals
	*  is a persistent structure filled with Vibrant objects or callback
	*  function pointers specific for a given application.
	*/

	typedef SeqEntryPtr (*UdvFetchSeqEntryProc) (Int4 uid, Int2 retcode);

	typedef  struct  udvglobals {
		ViewerMainPtr         vmp;
		UdvFetchSeqEntryProc  fetchSepProc;
		Nlm_ItmActnProc   NetCfgMenuProc;
		StartNetworkProc  NetStartProc;
		} UdvGlobals, PNTR UdvGlobalsPtr;

    /*
     * structs used only by the Blast sequence dialog box
     */

#if 0 

    struct _UDV_BlastDlgData;
    typedef void (*UDV_BlastProcCB)(struct _UDV_BlastDlgData *bddp);

    typedef struct _UDV_BlastDlgData {
        ValNode *pvnSips;		/* list of sips in structure */
        LisT bsp_list;		/* listbox of bsps */
        PopuP db_list;		/* listbox of databases */
        ButtoN bGap;   /* should the alignment be gapped? */
        TexT tMax;
        TexT tExpect;
        UDV_BlastProcCB callback;  /* called at end of alignment */
        Boolean IBM; /* should IBM be applied? */
        SeqAlign *salp;  /* resulting seqalign */
    } UDV_BlastDlgData;

#endif /* 0 */

/*******************************************************************************

  EXTERNAL FUNCTIONS SECTION (see the .c files of UnDViewer for a complete
	  description of each function)

*******************************************************************************/
	/*drawing and UDV graphical management*/
	NLM_EXTERN ValNodePtr UDV_GetSelectedRegions(SelStructPtr om_ssp, Uint2 bsp_eID,
		Uint2 bsp_iID);
	NLM_EXTERN Boolean UDV_IsLetterSelected(ValNodePtr vnp_bsp, Int4 bsp_pos,
		Int4 bspLength,Boolean bDisplayRevComp);
	NLM_EXTERN SeqLocPtr UDV_GetClosetSeqLocGivenBspPos(SeqIdPtr sip, Uint2 eID, 
		Uint2 iID, Int4 bsp_pos, Int4Ptr old_pos, Boolean bModify);
	NLM_EXTERN void UDV_InvalRegion(PaneL UnDViewer,UnDViewerGraphDataPtr GrData,
		ParaGPtr pgp,Int4 start_inval,Int4 stop_inval,Boolean IsSelect);
	NLM_EXTERN void	UDV_GetCurrentDispRange(ViewerDialogDataPtr vdp,
		Int4Ptr from_bsp,Int4Ptr to_bsp,Int4Ptr from_line,Int4Ptr to_line);
	NLM_EXTERN void LogoFontCreate(FonT PNTR f1,FonT PNTR f2,FonT PNTR f3);
	NLM_EXTERN FonT UDV_InitFont(UDVFontDataPtr udvfp);
	NLM_EXTERN Int2 UDV_ComputeLineHeight(Int2 cyChar);
	NLM_EXTERN void UDV_FontDim(Int2Ptr cxChar,Int2Ptr cyChar);
	NLM_EXTERN void UDV_ComputePanelSize(RecT rc,Int2Ptr cxClient,
				Int2Ptr cyClient);
	NLM_EXTERN void UDV_ComputeBlockByLine(Int2 cxClient,Int2 cxName,
				Int2 cxLeftScale,Int2 cxChar,Int2Ptr nCharByLine,
				Int2Ptr nBlockByLine);
	NLM_EXTERN void UDV_Build_Other_Colors(UnDViewerGraphDataPtr GrDataPtr);
	NLM_EXTERN void  UDV_Init_ScaleData(UnDViewerGraphDataPtr GrDataPtr);
	NLM_EXTERN void UDV_Init_GraphData(PaneL p, 
											UnDViewerGraphDataPtr GrDataPtr);
	NLM_EXTERN Uint4Ptr UDV_BuildFeatColorTable(void);
	NLM_EXTERN void UDV_Build_NA_LayoutPalette(UnDViewerGraphDataPtr GrData);
	NLM_EXTERN void UDV_Build_AA_LayoutPalette(UnDViewerGraphDataPtr GrData);
	NLM_EXTERN void UDV_deselect_feature(ViewerDialogDataPtr vdp);
	NLM_EXTERN void UDV_SelectFeatInFeatDlg(ViewerMainPtr vmp, 
			Uint2 entityID, Uint4 itemID);
	NLM_EXTERN void UDV_select_feature(PaneL p,ViewerDialogDataPtr vdp,
			Uint2 entityID,Uint4 itemID,Boolean bRepos);
	NLM_EXTERN void UDV_draw_double_cursor(RecT rcClip,PoinT pos);
  NLM_EXTERN void UDV_draw_horizontal_line(RecT rcClip, Int4 VPos);
  NLM_EXTERN void UDV_draw_rectangle(RecT rcClip, Boolean DotIt);
  NLM_EXTERN void UDV_draw_vertical_bar(RecT rcClip, Int4 HPos, Boolean DotIt);
  NLM_EXTERN void UDV_draw_horizontal_bar(Int4 VPos, Int4 LeftHPos, Int4 RightHPos);
	NLM_EXTERN void UDV_ClickProc(PaneL p, PoinT pt);
	NLM_EXTERN void UDV_DragMouse(PaneL p,ViewerDialogDataPtr vdp, PoinT pt);
	NLM_EXTERN void UDV_DragProc(PaneL p, PoinT pt);
	NLM_EXTERN void UDV_ReleaseMouse(PaneL p,ViewerDialogDataPtr vdp, PoinT pt);
	NLM_EXTERN void UDV_ReleaseProc(PaneL p, PoinT pt);
	NLM_EXTERN void UDV_HoldProc(PaneL p, PoinT pt);
	NLM_EXTERN void UDV_Draw_features(UnDViewerGraphDataPtr GrData,
		BspInfoPtr bsp_i,Boolean UseDefClr,Uint4 DefClr,
		ParaGPtr pgp,RecT PNTR rc,Uint4Ptr pClr,
		UDV_Item_Select * is,UDV_Item_Select * old_is,Uint4 DisplayType);
	NLM_EXTERN Boolean UDV_Draw_features_MAP(UnDViewerGraphDataPtr GrData,
					BspInfoPtr bsp_i,ParaGPtr pgp,RecT PNTR rc,Uint2 entityID,
					ValNodePtr PNTR vnpp_map);
	NLM_EXTERN void UDV_Draw_sequence(UnDViewerGraphDataPtr GrData,
        DDV_ColorGlobal *svpp ,Boolean UseDefClr,Uint4 DefClr,
		ParaGPtr pgp,RecT PNTR rc,Int4 start_decal,Int4 StartLetter,
		CharPtr szSequence, SeqId *sip,ValNodePtr vnp_bsp,Boolean bSelect,
        Int4 Row,Int4 bspLength,Boolean bDisplayRevComp);
	NLM_EXTERN void UDV_Draw_scale(UnDViewerGraphDataPtr GrData,
		Boolean ShowMajorTick,Boolean ShowMMinorTick,Uint1 ScalePosition,
		Int4 StartLetter,Int4 StopLetter,RecT PNTR rc,Int2 LeftDecal,
		Int4 ScaleMaxVal,Int4 AlignPos,Boolean UseBlockDisp,Int2 ColWidth,
		Uint4 DisplayType);
	NLM_EXTERN void UDV_draw_viewer (PaneL p);
	NLM_EXTERN void UDV_Logo_onDraw (PaneL p);

	/*Features List Dialog Box*/
	NLM_EXTERN Boolean LIBCALLBACK UDV_FeaturesListBoxFind (SeqFeatPtr sfp, 
			SeqMgrFeatContextPtr context);

	/*UDV main window management*/
	NLM_EXTERN Int2 LIBCALLBACK UDV_ObjRegAutonomous (Pointer data);
	NLM_EXTERN void UDV_WinMainCleanupExtraProc (GraphiC g, VoidPtr data);
	NLM_EXTERN void UDV_Resize_Logo_Panel (WindoW Parent,RecT PNTR rcL);
	NLM_EXTERN void * UDV_FreeVDPstruct(ViewerDialogDataPtr vdp,Boolean final);
	NLM_EXTERN void UDV_set_PullMenus(UDVMainMenuPtr mmp,Boolean enable);
	NLM_EXTERN void UDV_set_MainMenus(UDVMainMenuPtr mmp,Boolean enable);
	NLM_EXTERN void UDV_set_MainControls(ViewerMainPtr vmp,Boolean enable);
	NLM_EXTERN void UDV_SetupMenus(WindoW w,Boolean isEntrezOk,SAM_ViewGlobal *vgp);
	NLM_EXTERN void	UDV_resize_viewer(PaneL p,ViewerDialogDataPtr vdp);
	NLM_EXTERN void UnDViewerVScrlUpdate(PaneL p,Boolean bInit,Int4 CurPos);
	NLM_EXTERN void UDV_WinMainResize(WindoW w);
	NLM_EXTERN Boolean  UDV_init_bsp_forViewer(PaneL p,BioseqPtr bsp,Uint2 eID,
			Uint2 iID,Uint2 itype,ViewerDialogDataPtr vdp);
	NLM_EXTERN Boolean UDV_Init_NonAutonomous(PaneL p,
				ViewerDialogDataPtr PNTR vdp,FonT f);
	NLM_EXTERN Boolean CreateMainControls(WindoW w,ViewerMainPtr vmp,SAM_ViewGlobal *vgp);
	NLM_EXTERN void UnDViewerVScrlProc (BaR sb, SlatE s, Int4 newval,  Int4 oldval);
	NLM_EXTERN void UDVResetProc (PaneL p);

	/*sequence buffer management*/
	NLM_EXTERN CharPtr UDV_Read_Sequence (SeqIdPtr sip, Int4 from, Int4 to, 
		Boolean IsProt,Int2 len);
	NLM_EXTERN void UDV_create_buffer(UnDViewerGraphDataPtr GrData,
		ValNodePtr ParaG_list,BspInfoPtr bsp_i,ValNodePtr StartScan,
		Boolean bReverse);
		
	/*open a SeqEntry management*/
    NLM_EXTERN Boolean LIBCALLBACK SearchBioseq (BioseqPtr bsp, 
			SeqMgrBioseqContextPtr context);
	NLM_EXTERN Boolean  UDV_analyze_SEP_for_open(FILE *fp,SeqEntryPtr the_set,
		ViewerMainPtr vmp,WindoW w);
	NLM_EXTERN void UDV_Init_vdp_struct(PaneL p,ViewerDialogDataPtr vdp, 
		Boolean EraseParaG,Boolean EraseMainTitle,Boolean EraseInfoPanel);
	NLM_EXTERN void UDV_NetOpen (IteM i);
	NLM_EXTERN void UDV_FileOpen(IteM i);
	NLM_EXTERN void UDV_FileClose(IteM i);
	NLM_EXTERN void UDV_CreateListBioseqDlg(IteM i);

	/*clean quit*/
	NLM_EXTERN void UDV_WinMainProgQuit(WindoW w);

	/*Sequin stuffs*/
	NLM_EXTERN Boolean UDV_InitForSequin(PaneL udvPanel, BioseqViewPtr bvp);
	NLM_EXTERN void UDV_LoadSpecificEditor(BioseqViewPtr bvp, Uint2 entityID, 
		Uint4 itemID, Uint2 itemtype);

  /*zero UDV_mouse_select structure*/
  NLM_EXTERN void ClearUDV_mouse_select(UDV_mouse_selectPtr msp);

#if 0
    /* blast dialog */
    NLM_EXTERN void UDV_BlastDlg(UDV_BlastDlgData *bddp);
#endif


#ifdef __cplusplus
}
#endif

#undef NLM_EXTERN
#ifdef NLM_EXPORT
#define NLM_EXTERN NLM_EXPORT
#else
#define NLM_EXTERN
#endif

#endif /* ndef _UNDVIEWER_ */