/* ----------------------------------------------------------------- */

/* window1.c - window 1 code */

#include "general.h"

#include "window.h"

extern struct Image title;

#define W1_COUNT 7

UBYTE (*w1_list[])(void) = {

        CreateGadgetContext1,
        CreateGadgets1,
        CreateWindow1,
        CreateMenu1,
        CreateMenuLayout1,
        InstallMenu1,
        CreateFileRequest 

};



/* ----------------------------------------------------------------- */

static struct  Window          *s_window_p;   

static struct  Menu            *s_menu_p;

static struct  Gadget          *s_gadgetlist_p;

static struct  Gadget          *s_previous_gadget_p;

struct FileRequester           *s_file_requester_p;

static STACK   *s_resource_stack_p;


/* ----------------------------------------------------------------- */

UBYTE OpenWindow1(void)

{

UBYTE error_number=NO_ERROR;

if(!(s_resource_stack_p=CreateStack(void *))) error_number=NO_STACK; 
        
else  {

      /* attempt to allocate window resources... */

         error_number=AllocateResource(W1_COUNT,w1_list);                           

         if(!error_number)
         
                {

                 g_handler_sigbit[1]=1<<s_window_p->UserPort->mp_SigBit;
                 
                 /* add (OR) signal bit to global port mask */   

                 g_port_mask|=g_handler_sigbit[1];

                 if(g_handler_sigbit[3])

                 DisableWindow1MenuItem(1,0);

                 if(g_handler_sigbit[2])

                 DisableWindow1MenuItem(1,1);
                
                }

     }

return(error_number);

} /* Logical end of this module */
  
/* ----------------------------------------------------------------- */

void CloseWindow1(void)

{

while(!PopStack(s_resource_stack_p,g_function1)) g_function1(); 
 
       KillStack(s_resource_stack_p);
 

g_port_mask^=g_handler_sigbit[1]; /* remove signal bit from mask */  

g_handler_sigbit[1]=0; /* clear signal bit entry */

s_window_p=NULL; /* to indicate closed window */

}
 
/* ----------------------------------------------------------------- */


UBYTE CreateGadgetContext1(void)

{
    
UBYTE error_number=ALLOCATION_ERROR;

s_gadgetlist_p=NULL;/* static so must set to zero each time */

s_previous_gadget_p=CreateContext(&s_gadgetlist_p);

if(s_previous_gadget_p)

    {
        
    g_function1=RemoveGadgets1;
        
    PushStack(s_resource_stack_p,g_function1);
    
    if(s_previous_gadget_p) error_number=NO_ERROR;
        
    }
            
return(error_number);

}

/* ----------------------------------------------------------------------- */

void RemoveGadgets1(void)

{
        
FreeGadgets(s_gadgetlist_p);        
        
}

/* ----------------------------------------------------------------- */


UBYTE CreateGadgets1(void)

{

UBYTE error_number=ALLOCATION_ERROR;

newgadget.ng_TextAttr=g_public_screen_p->Font;

newgadget.ng_VisualInfo=g_visual_info_p;
                          
newgadget.ng_Width=g_w1_gadget1_width;     
             
newgadget.ng_Height=g_w1_gadget1_height;     
             
newgadget.ng_LeftEdge=g_w1_gadget1_x;     
             
newgadget.ng_TopEdge=g_w1_gadget1_y;     
             
newgadget.ng_GadgetText=NULL;

s_previous_gadget_p=CreateGadget(LISTVIEW_KIND,s_previous_gadget_p,
                                            &newgadget,
                                            GTLV_Labels,g_database_list_p,
                                            GTLV_ShowSelected,NULL,
                                            LAYOUTA_Spacing,3,
                                            TAG_END);
    
if(s_previous_gadget_p) error_number=NO_ERROR;
                
return(error_number);
                                
}

/* ----------------------------------------------------------------------- */

UBYTE CreateWindow1(void)

{

UBYTE error_number=ALLOCATION_ERROR;

s_window_p=OpenWindowTags(NULL,
        WA_MenuHelp,TRUE,
        WA_Gadgets,s_gadgetlist_p,
        WA_Left,g_w1_x, WA_Top,g_w1_y,
        WA_Width,g_w1_width, WA_Height,g_w1_height,
        WA_DragBar, TRUE,
        WA_DepthGadget, TRUE,
        WA_SizeGadget, TRUE,
        WA_CloseGadget, TRUE,
        WA_SmartRefresh, TRUE,
        WA_MinHeight,W1_MINIMUM_HEIGHT,
        WA_MaxHeight,g_public_screen_p->Height,
        WA_MinWidth,W1_MINIMUM_WIDTH,
        WA_MaxWidth,g_public_screen_p->Width,   

        WA_IDCMP, LISTVIEWIDCMP^IDCMP_INTUITICKS /* BLOCKING TICKS */
           |IDCMP_CLOSEWINDOW|IDCMP_MENUPICK|
           IDCMP_REFRESHWINDOW|IDCMP_GADGETUP|
           IDCMP_CHANGEWINDOW|IDCMP_MENUHELP,
        WA_Title, W1_TITLE,
        WA_PubScreen, g_public_screen_p,
        TAG_END);
        
if (s_window_p)
        
        {
        
        SetRast(s_window_p->RPort,3);

        RefreshWindowFrame(s_window_p);

        DrawImage(s_window_p->RPort,&title,g_w1_title_x,g_w1_title_y);

        GT_RefreshWindow(s_window_p,NULL);
        
        error_number=NO_ERROR;
                               
        g_function1=KillWindow1;
        
        PushStack(s_resource_stack_p,g_function1);
               
        }
      
return(error_number);

}

/* ----------------------------------------------------------------- */

void KillWindow1(void)

{

CloseWindow(s_window_p);
 
}

/* ----------------------------------------------------------------- */


UBYTE CreateMenu1(void)

{

UBYTE error_number=NO_ERROR;

if(!(s_menu_p=CreateMenus(menu1,TAG_END)))

        error_number=ALLOCATION_ERROR;

  else {
        
        g_function1=ReleaseMenu1;
        
        PushStack(s_resource_stack_p,g_function1);
       
       }
        
return(error_number);


}

/* ----------------------------------------------------------------- */

void ReleaseMenu1(void)

{
        
FreeMenus(s_menu_p);
        
}

/* ----------------------------------------------------------------- */

UBYTE CreateMenuLayout1(void)

{

UBYTE error_number=NO_ERROR;

if(!(LayoutMenus(s_menu_p,g_visual_info_p,TAG_END)))

        error_number=ALLOCATION_ERROR;

  else {
        
        
       /* Function must be tested for success but
          no deallocation operations are needed! */
       
       }
        
return(error_number);


}

/* ----------------------------------------------------------------- */

UBYTE InstallMenu1(void)

{

UBYTE error_number=NO_ERROR;

if(!(SetMenuStrip(s_window_p,s_menu_p)))

        error_number=ALLOCATION_ERROR;

  else {
        
        g_function1=RemoveMenu1;
        
        PushStack(s_resource_stack_p,g_function1);
       
       }
        
return(error_number);

}

/* ----------------------------------------------------------------- */

void RemoveMenu1(void)

{

ClearMenuStrip(s_window_p);
        
}

/* ----------------------------------------------------------------- */

UBYTE CreateFileRequest(void)

{

UBYTE error_number=NO_ERROR;

if(!(s_file_requester_p=AllocAslRequestTags(ASL_FileRequest,
                                            ASL_LeftEdge,g_asl_x,
                                            ASL_TopEdge, g_asl_y,
                                            ASL_Width,g_asl_width,
                                            ASL_Height,g_asl_height,
					    ASLFR_RejectIcons,TRUE,
                                            TAG_DONE
                                           )))

        error_number=ALLOCATION_ERROR;

  else {
        
        g_function1=RemoveFileRequest;
        
        PushStack(s_resource_stack_p,g_function1);
       
       }
       
return(error_number);

}

/* ----------------------------------------------------------------- */

void RemoveFileRequest(void)

{

FreeAslRequest(s_file_requester_p);
        
}

/* ----------------------------------------------------------------- */




/* eventhandler1.c - event handling code for window 1 follows */


/* ----------------------------------------------------------------- */

UBYTE EventHandler1(void)

{

UBYTE error_number=NO_ERROR;

struct Message *message_p;

while (message_p=(struct Message *)GT_GetIMsg(s_window_p->UserPort))
   
  {          
   
   error_number=IntuitionEvent1((struct IntuiMessage *)message_p);
   
  }
      
return(error_number);

}

/* ----------------------------------------------------------------- */


UBYTE IntuitionEvent1(struct IntuiMessage *message_p)

{

UBYTE i,error_number=NO_ERROR;

UWORD code; 

ULONG class;

void *address;

struct Node *node_p;

class=message_p->Class; 
            
code= message_p->Code;

address=message_p->IAddress;

GT_ReplyIMsg(message_p);

switch (class) {

                case IDCMP_CLOSEWINDOW: 
                     
                     error_number=PROGRAM_EXIT; break;
               

                case IDCMP_MENUPICK: 
                             
                error_number=MenuEvent1(code); break;
                             

                case IDCMP_MENUHELP:

                     break;
                      
                
                case IDCMP_GADGETUP:
                
                     /* code = ordinal list number (first NODE is 0) */
                   
                     if (code)
                     
                       { 
                        
                        node_p=g_database_list_p->lh_Head;
                             
                        for (i=0;i<code;i++)
                   
                         {
                        
                         node_p=node_p->ln_Succ; /* next node */  
                      
                         }   

                         g_current_node_p=(struct ListNode *)node_p;
                      
                         g_new_node=*g_current_node_p; /* copy to editor window */

                         DisplayListNode(g_current_node_p);
                        
                        }
                        
                        else DisplayBeep(NULL); /* 1st record selected */
                             
                      break;


                case IDCMP_REFRESHWINDOW:
  
                     g_w1_height=s_window_p->Height;

                     g_w1_width=s_window_p->Width;

                     g_w1_gadget1_width=g_w1_width-3*g_offset-IMAGE_SIZE;

                     g_w1_gadget1_height=g_w1_height-2*g_w1_gadget1_y;

                     g_w1_title_x=g_w1_gadget1_x+g_w1_gadget1_width;


                     error_number=REFRESH;
                      
                     break;
                                                    
                    

               case IDCMP_CHANGEWINDOW:
                     
                     g_w1_x=s_window_p->LeftEdge;

                     g_w1_y=s_window_p->TopEdge;
                                                                        
                     break;

                                          
                case IDCMP_INTUITICKS: 
                
                     break;

                                                                 
                default:  break;

              }
              
return(error_number);

}

/* ----------------------------------------------------------------- */

UBYTE MenuEvent1(UWORD code)

{
 
UBYTE error_number=NO_ERROR;

UWORD menu_number;

if (code!=MENUNULL)

  {
                    
  menu_number=MENUNUM(code);
                                  
  switch(menu_number) 

   {
    
    case 0:  error_number=ProjectMenuHandler1(code); 

             break;
 
    case 1:  error_number=RecordMenuHandler1(code); 

             break;

    case 2:  error_number=OtherMenuHandler1(code); 

             break;

                             
    default: break;

   } 

  }

return(error_number);

}

/* ----------------------------------------------------------------- */

UBYTE ProjectMenuHandler1(UWORD code)

{

UBYTE error_number=NO_ERROR;

UWORD item_number,sub_item_number;

item_number=ITEMNUM(code);

sub_item_number=SUBNUM(code);
         
switch (item_number)

        {

         case 0: /* NEW */ 

                    if (g_handler_sigbit[2]) CloseWindow2();
                      
                    if (g_handler_sigbit[3]) CloseWindow3();
                   
                    RemoveListViewList();

                    g_database_list_p=ClearList(g_database_list_p); 

                    g_database_list_p=CreateList(); /* new list header */                 
                   
                    g_current_node_p=NULL;

                    g_filename_buffer[0]=NULL;
                                    
                    SetHeaderDefaults(&g_database_header); /* for default display */

                    SetDefaultFieldLabels();
                    
                    g_creating_flag=TRUE;
 
                    CalculateNewRecordLayout();
  
                    CalculateGadgetPositions(&g_database_header);
                                         
                                    
                    OpenWindow2(); 
                    
                    break;
 
         
         case 1: /* LOAD */                  
                 
                   g_creating_flag=FALSE;                      

                   if (GetFileName("LOAD FILE"))
                 
                     {

                     SetDefaultFieldLabels();
                     
                     RemoveListViewList();

                     g_database_list_p=ClearList(g_database_list_p); 

                     if(g_database_list_p=LoadFile(g_filename_buffer))
                     
                           {
                            
                           g_current_node_p=(struct ListNode *)
                                            g_database_list_p->lh_Head;
                                    
                  
                           g_current_node_p=(struct ListNode *)
                           
                           ((struct Node *)g_current_node_p)->ln_Succ;

                           g_new_node=*g_current_node_p; /* copy of record data */

                           SetGadgetLabels(g_database_list_p,
                                           g_database_header.dh_FieldCount);
          
                           }

                      else { 
                      
                            SetHeaderDefaults(&g_database_header); /* for default display */

                            ClearGlobalNewNode(g_database_header.dh_FieldCount);        
 
                            g_current_node_p=NULL;
                            
                            DisplayBeep(NULL);                                                  
                         
                           }
                    
                     CalculateGadgetPositions(&g_database_header);
                                                                         
                     }
                 
                   error_number=REFRESH; /* do this regardless */                  
                 
                   break;
            
              
         case 3: /* SAVE */ 

                   g_creating_flag=FALSE; 
 
                   if(!strlen(g_filename_buffer))
                         
                     GetFileName("SAVE AS FILE");
                                
                   error_number=SaveFile(g_filename_buffer);
                 
                 break;

          
         
         case 4: /* SAVE AS */

                 g_creating_flag=FALSE; 
                     
                 GetFileName("SAVE AS FILE");
                   
                 error_number=SaveFile(g_filename_buffer);

                 break;
                 
                  
         case 6: error_number=PROGRAM_EXIT; break;


        default: DisplayBeep(NULL);    break;

        }

return(error_number);

}

/* ----------------------------------------------------------------- */

UBYTE RecordMenuHandler1(UWORD code)

{

UBYTE error_number=NO_ERROR;

UWORD item_number;

item_number=ITEMNUM(code);
        
switch (item_number)

        {
         
         case 0: g_creating_flag=FALSE; 
         
                 error_number=OpenWindow3(); 
                                       
                 break;
 
 
         case 1: g_creating_flag=FALSE;
         
                 error_number=OpenWindow2(); 
                
                 break;
 
  
         case 3: g_creating_flag=FALSE; 
         
                 if(!OpenClip()) 
         
                    {

                     WriteCurrentRecord(&g_database_header);                    
                     
                     CloseClip();
        
                    }
                   
                   else DisplayBeep(NULL);                  
                    
                 break;


         case 5: g_creating_flag=FALSE;
                 
                 RemoveFromList(); 
        
                 ClearDisplayReadOnly();
                 
                 ClearStringGadgets();
                 
                 break;

                 
        default: break;

        }

return(error_number);

}

/* ----------------------------------------------------------------- */

UBYTE OtherMenuHandler1(UWORD code)

{

UBYTE error_number=NO_ERROR;

UWORD item_number;

item_number=ITEMNUM(code);
         
switch (item_number)

        {

         case 0: /* HELP */ 
                 
                    g_creating_flag=FALSE;
                        
                    break;
  
         default:   break;

        }

return(error_number);

}

/* ----------------------------------------------------------------- */

UBYTE AddToList(void)

{

UBYTE i,buffer[MAX_FIELD_SIZE],error_number=ALLOCATION_ERROR;

WORD  result=NULL;

struct ListNode *memory_p;

struct Node *node_p;

if (IsListEmpty(g_database_list_p))     

       { /* we will be storing field labels in this case! */

        if(memory_p=(struct ListNode *) 
                     AllocMem(sizeof(struct ListNode),MEMF_CLEAR))
        
  
           {
  
            *memory_p=g_new_node; /* copy new data */

            memory_p->ln_Node.ln_Name=&memory_p->ln_Field[0][0];
           
            buffer[0]=' ';

            strncpy(&buffer[1],&memory_p->ln_Field[0][0],
                    g_database_header.dh_FieldSize);

            strncpy(&memory_p->ln_Field[0][0],&buffer[0],
                    g_database_header.dh_FieldSize);
                                  
            AddHead(g_database_list_p,(struct Node *)memory_p); 
           
            error_number=NO_ERROR;
            
           }       
           
       }

 else {
    
         node_p=g_database_list_p->lh_Head; 

         while(node_p)
     
           {
         
           result=stricmp(&g_new_node.ln_Field[0][0],
                  &((struct ListNode *)node_p)->ln_Field[0][0]);            
 
           if(result<0)
              
              
                     {
                        
                        if(memory_p=(struct ListNode *) 
                        AllocMem(sizeof(struct ListNode),MEMF_CLEAR))
          
                        {
  
                        *memory_p=g_new_node; /* copy new data */

                        memory_p->ln_Node.ln_Name=&memory_p->ln_Field[0][0]; 
                                                                  
                        Insert(g_database_list_p,(struct Node *)memory_p,
                               node_p->ln_Pred);

                        node_p=NULL;              
      
                        error_number=NO_ERROR;   
                       
                        }
                      
                      }                       

                 

          if (result==0)
             
                      {                        
                     
                        /*  here we must ONLY copy my extra data
                            exec node fields must be left alone */ 
                        
                        for (i=1;i<g_database_header.dh_FieldCount;i++)
                        strncpy(&(((struct ListNode *)node_p)->ln_Field[i][0]),
                        &g_new_node.ln_Field[i][0],
                        g_database_header.dh_FieldSize);                           
                                     
                        node_p=NULL;                   

                        error_number=NO_ERROR;    
 
                      }

       
                 
          if(result>0)
                 
                      {
                    
                       node_p=node_p->ln_Succ;
                 
                        if(!node_p->ln_Succ) 
              
                          {

                          if(memory_p=(struct ListNode *) 
                                       AllocMem(sizeof(struct ListNode),
                                       MEMF_CLEAR))
          
                            {
  
                             *memory_p=g_new_node; /* copy new data */

                             memory_p->ln_Node.ln_Name=&memory_p->ln_Field[0][0];
                   
                             AddTail(g_database_list_p,(struct Node *)memory_p);

                             node_p=NULL;

                             error_number=NO_ERROR;           
        
                            }          

                          }                 
        
                      }                
     
    
           }/* end while */
           
       } /* end else */ 

  /*  if (!error_number) error_number=REFRESH; */

return(error_number);
    
}

/* ----------------------------------------------------------------- */


UBYTE RemoveFromList(void)

{

UBYTE error_number=NO_ERROR;

RemoveListViewList();

Remove((struct Node *)g_current_node_p); g_current_node_p=NULL;
    
AddListViewList();

ClearDisplayReadOnly(); 
 

return(error_number);
    
}

/* ----------------------------------------------------------------- */


struct List *ClearList(struct List *list_p)

{

struct Node *node_p;
         
/* Deallocate all existing list nodes and list header */

if(list_p)

  {
                     
   while (node_p=RemHead(list_p))
                 
     FreeMem(node_p,sizeof(struct ListNode));

  FreeMem(list_p,sizeof(struct List));

  }
  
return(NULL);

}

/* ----------------------------------------------------------------- */

struct List *CreateList(void)

{

struct List *list_p;

if (list_p=(struct List *) AllocMem(sizeof(struct List),MEMF_CLEAR))
        
     {
        
     NewList(list_p);

     }
     
return(list_p);
    
}

/* ----------------------------------------------------------------- */

UBYTE SaveFile(UBYTE *filename_p)

{
 
UBYTE i,error_number=BAD_FILE;

FILE *fh;

struct Node *node_p;

if(fh=fopen(filename_p,"w"))

  {              
 
   WriteDatabaseHeader(fh);
      
   node_p=g_database_list_p->lh_Head; 
    
     while(node_p)
     
        {

         WriteRecordHeader(fh);

         for (i=0;i<g_database_header.dh_FieldCount;i++)

          {
           
           fputs(&(((struct ListNode *)node_p)->ln_Field[i][0]),fh);

           fputc('\n',fh);
           
          }
          
         fputc('\n',fh);
         
         node_p=node_p->ln_Succ;
         
         if(!node_p->ln_Succ) node_p=NULL;
        
        }

   fclose(fh);
   
   error_number=NO_ERROR;    

  }

return(error_number);    

}

/* ----------------------------------------------------------------- */

void WriteDatabaseHeader(FILE *fh)

{
 
fwrite(&g_database_header,sizeof(struct DatabaseHeader),1,fh);     

}      

/* ----------------------------------------------------------------- */

void WriteRecordHeader(FILE *fh)

{

fwrite(&g_descriptor,sizeof(struct RecordHeader),1,fh);  

}      

/* ----------------------------------------------------------------- */

struct List *LoadFile(UBYTE *filename_p)

{
 
UBYTE i,j,exit_flag=FALSE;

BOOL loop_exit_flag;

WORD c;

struct List *list_p=NULL;

struct ListNode *memory_p;

FILE *fh;

if(fh=fopen(filename_p,"r"))

  {            
                
  if(!ReadDatabaseHeader(fh))
  
    {

    if (list_p=CreateList())
        
     {

     while(!exit_flag)
     
        {
        
         c=fgetc(fh);
               
         if(!feof(fh))   
         
           {
           
           ungetc(c,fh);
 
           if (!ReadRecordHeader(fh))

             {

              if (memory_p=(struct ListNode *) 
                 AllocMem(sizeof(struct ListNode),MEMF_CLEAR))

                 {
    
                  for (i=0;i<g_database_header.dh_FieldCount;i++)
                  
                    {
                      
                      j=0;loop_exit_flag=FALSE;
                                            
                      while(!loop_exit_flag)
                      
                          {
                            
                            c=fgetc(fh);
                            
                            if (c!=(WORD)'\n')
                            
                            memory_p->ln_Field[i][j++]=(UBYTE)c;
                            
                            else loop_exit_flag=TRUE;
                            
                          }
                        
                       memory_p->ln_Field[i][j]=NULL;  
                      
                     

                     }
                 
                  c=fgetc(fh); /* soak end of record '\n' character */
                   
                  memory_p->ln_Node.ln_Name=&memory_p->ln_Field[0][0];

                  /* We now have a record in memory whose 
                     location is identified by memory_p */

                  AddTail(list_p,(struct Node *)memory_p);
                  
                  }
      
               else exit_flag=TRUE; /* out of memeory */
             
              }
                 
           }
        
         else exit_flag=TRUE;
         
        }       
    
     }
     
    }
    
  fclose(fh);   

  }

return(list_p);    

}

/* ----------------------------------------------------------------- */

UBYTE ReadDatabaseHeader(FILE *fh)

{

UBYTE error_number=BAD_FILE;

UWORD c,count;
      
fread(&g_database_header,sizeof(struct DatabaseHeader),1,fh);

if(g_database_header.dh_ID==FILE_ID)

  {
    
   count=g_database_header.dh_DatabaseHeaderDataSize-6;    
   
   while(count--) c=fgetc(fh); /* skip any other header fields */
   
   error_number=NO_ERROR;

  }

return(error_number);

}

/* ----------------------------------------------------------------- */

UBYTE ReadRecordHeader(FILE *fh)

{

UBYTE error_number=BAD_FILE;

UWORD c,count;
      
fread(&g_descriptor,sizeof(struct RecordHeader),1,fh);

if(g_descriptor.rh_ID==RECORD_ID)

  {

   count=g_descriptor.rh_RecordHeaderDataSize-6;    
   
   while(count--) c=fgetc(fh); /* skip any other header fields */
   
   error_number=NO_ERROR;

  }

return(error_number);

}

/* ----------------------------------------------------------------- */


void EnableWindow1MenuItem(UWORD menu, UWORD item)

{
    
   OnMenu(s_window_p,SHIFTMENU(menu)|SHIFTITEM(item));     
 
}

/* ----------------------------------------------------------------- */

void DisableWindow1MenuItem(UWORD menu, UWORD item)

{ 

  OffMenu(s_window_p,SHIFTMENU(menu)|SHIFTITEM(item));     
 
}

/* ----------------------------------------------------------------- */
BOOL GetFileName(UBYTE *hail_p)

{
     
BOOL error_flag;
           
if(AslRequestTags(s_file_requester_p,
                  ASL_Hail,hail_p,
                  TAG_DONE))
          
    {
                       
     error_flag=MakeFilename(s_file_requester_p,g_filename_buffer);                   
                  
    }
                  
 else DisplayBeep(NULL);                  

return(error_flag);
  
}

/* ----------------------------------------------------------------- */
void RemoveListViewList(void)

                     
{

if(s_window_p) GT_SetGadgetAttrs(s_previous_gadget_p,
                                 s_window_p,NULL,
                                 GTLV_Labels,NULL,
                                 TAG_END);  

}                    
/* ----------------------------------------------------------------- */

void AddListViewList(void)

{

if(s_window_p) GT_SetGadgetAttrs(s_previous_gadget_p,
                                 s_window_p,NULL,
                                 GTLV_Labels,g_database_list_p,
                                 TAG_END);               

}   
                    
/* ----------------------------------------------------------------- */

void DisplayListNode(struct ListNode *node_p)                         

{

UBYTE error_number=NO_ERROR;

    
if (g_handler_sigbit[2]) 
                         
    DisplayInEditor();

if (g_handler_sigbit[3]) 
   
    DisplayReadOnly(node_p);                            

if (!(g_handler_sigbit[2]|g_handler_sigbit[3])) 

    {
                
     error_number=OpenWindow3();      

     DisplayReadOnly(node_p);
        
    }
                       
}
                        
/* ----------------------------------------------------------------- */

void ClearGlobalNewNode(UBYTE count)


{

UBYTE i;

for (i=0;i<count;i++)

     {

      g_new_node.ln_Field[i][0]=NULL;
        
     }

}

/* ----------------------------------------------------------------- */
