home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / the25.zip / thesrc251.zip / default.c < prev    next >
C/C++ Source or Header  |  1998-06-01  |  47KB  |  1,265 lines

  1. /***********************************************************************/
  2. /* DEFAULT.C - Default settings and profile processing                 */
  3. /***********************************************************************/
  4. /*
  5.  * THE - The Hessling Editor. A text editor similar to VM/CMS xedit.
  6.  * Copyright (C) 1991-1997 Mark Hessling
  7.  *
  8.  * This program is free software; you can redistribute it and/or
  9.  * modify it under the terms of the GNU General Public License as
  10.  * published by the Free Software Foundation; either version 2 of
  11.  * the License, or any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  16.  * General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with this program; if not, write to:
  20.  *
  21.  *    The Free Software Foundation, Inc.
  22.  *    675 Mass Ave,
  23.  *    Cambridge, MA 02139 USA.
  24.  *
  25.  *
  26.  * If you make modifications to this software that you feel increases
  27.  * it usefulness for the rest of the community, please email the
  28.  * changes, enhancements, bug fixes as well as any and all ideas to me.
  29.  * This software is going to be maintained and enhanced as deemed
  30.  * necessary by the community.
  31.  *
  32.  * Mark Hessling                 Email:             M.Hessling@qut.edu.au
  33.  * PO Box 203                    Phone:                    +617 3802 0800
  34.  * Bellara                       http://www.gu.edu.au/gext/the/markh.html
  35.  * QLD 4507                      **** Maintainer PDCurses & REXX/SQL ****
  36.  * Australia                     ************* Author of THE ************
  37.  */
  38.  
  39. /*
  40. $Id: default.c 2.1 1995/06/24 16:29:29 MH Rel MH $
  41. */
  42.  
  43. #include <the.h>
  44. #include <proto.h>
  45.  
  46. /*--------------------------- global data -----------------------------*/
  47. /*#define DEBUG 1*/
  48.  bool BEEPx;
  49.  bool CAPREXXOUTx;
  50.  LINETYPE CAPREXXMAXx;
  51.  bool CLEARSCREENx;
  52.  bool CLOCKx;
  53.  CHARTYPE CMDARROWSTABCMDx;
  54.  CHARTYPE EOLx;
  55.  bool HEXDISPLAYx;
  56.  bool INSERTMODEx;
  57.  bool LINEND_STATUSx; /* not really global, but used in command_line() */
  58.  CHARTYPE LINEND_VALUEx; /* not really global, but used in command_line() */
  59.  CHARTYPE NONDISPx; 
  60.  CHARTYPE PREFIXx;/* not really global but used in set_screen_defaults() */
  61.  bool REPROFILEx;
  62.  CHARTYPE TABI_ONx;
  63.  CHARTYPE TABI_Nx;
  64.  ROWTYPE STATUSLINEx='B';
  65.  bool TYPEAHEADx;
  66.  bool scroll_cursor_stay;   /* determine how page scrolling is handled */
  67.  bool MOUSEx;                                         /* mouse support */
  68.  bool SLKx=FALSE;                            /* soft label key support */
  69.  bool SBx=FALSE;                                  /* scrollbar support */
  70.  bool UNTAAx=FALSE;         /* unsigned numerical targets are absolute */
  71.  int DEFSORTx=DIRSORT_NAME;                       /* sort on file attr */
  72.  int DIRORDERx=DIRSORT_ASC;                          /* sort ascending */
  73.  
  74. /***********************************************************************/
  75. #ifdef HAVE_PROTO
  76. void set_global_defaults(void)
  77. #else
  78. void set_global_defaults()
  79. #endif
  80. /***********************************************************************/
  81. {
  82. /*------------------------- external data -----------------------------*/
  83.  extern LENGTHTYPE display_length;
  84.  extern short prefix_width;
  85. /*--------------------------- local data ------------------------------*/
  86. /*--------------------------- processing ------------------------------*/
  87. #ifdef TRACE
  88.  trace_function("default.c: set_global_defaults");
  89. #endif
  90. /*---------------------------------------------------------------------*/
  91. /* Set defaults for all environments first...                          */
  92. /*---------------------------------------------------------------------*/
  93.  BEEPx = FALSE;
  94.  CAPREXXOUTx = FALSE;
  95.  CAPREXXMAXx = 1000L;
  96.  INSERTMODEx = FALSE;
  97.  LINEND_VALUEx = '#';
  98.  REPROFILEx = FALSE;
  99.  TABI_ONx = FALSE;
  100.  TABI_Nx = 8;
  101.  UNTAAx = FALSE;
  102. #if defined(MOUSE_SUPPORT_ENABLED)
  103.  MOUSEx = TRUE;
  104. #else
  105.  MOUSEx = FALSE;
  106. #endif
  107.  if (display_length)          /* if display_length has been specified) */
  108.     EOLx = EOLOUT_NONE;
  109.  else
  110.    {
  111. #ifdef UNIX
  112.     EOLx = EOLOUT_LF;
  113. #endif
  114. #if defined(DOS) || defined(OS2) || defined(WIN32)
  115.     EOLx = EOLOUT_CRLF;
  116. #endif
  117.    }
  118. /*---------------------------------------------------------------------*/
  119. /* If STATUSLINE is OFF before we come here, leave it OFF.             */
  120. /*---------------------------------------------------------------------*/
  121.  if (STATUSLINEx != 'O')
  122.     STATUSLINEx = 'B';
  123.  TYPEAHEADx = FALSE;
  124.  scroll_cursor_stay = TRUE;
  125.  prefix_width = DEFAULT_PREFIX_WIDTH;
  126. /*---------------------------------------------------------------------*/
  127. /* Set defaults for individual environments next...                    */
  128. /*---------------------------------------------------------------------*/
  129.  set_global_look_defaults();
  130.  set_global_feel_defaults();
  131. #ifdef TRACE
  132.  trace_return();
  133. #endif
  134.  return;
  135. }
  136. /***********************************************************************/
  137. #ifdef HAVE_PROTO
  138. void set_global_look_defaults(void)
  139. #else
  140. void set_global_look_defaults()
  141. #endif
  142. /***********************************************************************/
  143. {
  144. /*------------------------- external data -----------------------------*/
  145.  extern short compatible_look;
  146.  extern short prefix_gap;
  147. /*--------------------------- local data ------------------------------*/
  148. /*--------------------------- processing ------------------------------*/
  149. #ifdef TRACE
  150.  trace_function("default.c: set_global_look_defaults");
  151. #endif
  152.  switch(compatible_look)
  153.    {
  154.     case COMPAT_THE:
  155.          CLEARSCREENx = FALSE;
  156.          CLOCKx = TRUE;
  157.          HEXDISPLAYx = TRUE;
  158.          PREFIXx = PREFIX_ON|PREFIX_LEFT;
  159.          prefix_gap = 0;
  160.          NONDISPx = '#';
  161.          break;
  162.     case COMPAT_KEDIT:
  163.          CLEARSCREENx = TRUE;
  164.          CLOCKx = TRUE;
  165.          HEXDISPLAYx = FALSE;
  166.          NONDISPx = '#';
  167.          PREFIXx = PREFIX_OFF;
  168.          prefix_gap = 1;
  169.          break;
  170.     case COMPAT_XEDIT:
  171.          CLEARSCREENx = TRUE;
  172.          CLOCKx = FALSE;
  173.          HEXDISPLAYx = FALSE;
  174.          NONDISPx = '"';
  175.          PREFIXx = PREFIX_ON|PREFIX_LEFT;
  176.          prefix_gap = 1;
  177.          break;
  178.    }
  179. #ifdef TRACE
  180.  trace_return();
  181. #endif
  182.  return;
  183. }
  184. /***********************************************************************/
  185. #ifdef HAVE_PROTO
  186. void set_global_feel_defaults(void)
  187. #else
  188. void set_global_feel_defaults()
  189. #endif
  190. /***********************************************************************/
  191. {
  192. /*------------------------- external data -----------------------------*/
  193.  extern short compatible_feel;
  194. /*--------------------------- local data ------------------------------*/
  195. /*--------------------------- processing ------------------------------*/
  196. #ifdef TRACE
  197.  trace_function("default.c: set_global_feel_defaults");
  198. #endif
  199.  switch(compatible_feel)
  200.    {
  201.     case COMPAT_THE:
  202.          CMDARROWSTABCMDx = FALSE;
  203.          LINEND_STATUSx = FALSE;
  204.          break;
  205.     case COMPAT_KEDIT:
  206.          CMDARROWSTABCMDx = TRUE;
  207.          LINEND_STATUSx = FALSE;
  208.          break;
  209.     case COMPAT_XEDIT:
  210.          CMDARROWSTABCMDx = TRUE;
  211.          LINEND_STATUSx = TRUE;
  212.          break;
  213.    }
  214. #ifdef TRACE
  215.  trace_return();
  216. #endif
  217.  return;
  218. }
  219. /***********************************************************************/
  220. #ifdef HAVE_PROTO
  221. void set_file_defaults(FILE_DETAILS *filep)
  222. #else
  223. void set_file_defaults(filep)
  224. FILE_DETAILS *filep;
  225. #endif
  226. /***********************************************************************/
  227. {
  228. /*------------------------- external data -----------------------------*/
  229.  extern short compatible_feel;
  230. /*--------------------------- local data ------------------------------*/
  231. /*--------------------------- processing ------------------------------*/
  232. #ifdef TRACE
  233.  trace_function("default.c: set_file_defaults");
  234. #endif
  235. /*---------------------------------------------------------------------*/
  236. /* Set defaults for all environments first...                          */
  237. /*---------------------------------------------------------------------*/
  238.  filep->autosave = 0;
  239.  filep->autosave_alt = 0;
  240.  filep->save_alt = 0;
  241.  filep->tabsout_on = FALSE;
  242.  filep->display_actual_filename = TRUE;
  243.  filep->tabsout_num =  8;
  244.  filep->eolout = EOLx;
  245.  filep->undoing = TRUE;
  246.  set_up_default_colours(filep,(COLOUR_ATTR *)NULL,ATTR_MAX);
  247. /*---------------------------------------------------------------------*/
  248. /* Set defaults for individual environments next...                    */
  249. /*---------------------------------------------------------------------*/
  250.  switch(compatible_feel)
  251.    {
  252.     case COMPAT_THE:
  253.          filep->backup = BACKUP_KEEP;
  254.          break;
  255.     case COMPAT_XEDIT:
  256.          filep->backup = BACKUP_OFF;
  257.          break;
  258.     case COMPAT_KEDIT:
  259.          filep->backup = BACKUP_OFF;
  260.          break;
  261.    }
  262. #ifdef TRACE
  263.  trace_return();
  264. #endif
  265.  return;
  266. }
  267. /***********************************************************************/
  268. #ifdef HAVE_PROTO
  269. void set_view_defaults(VIEW_DETAILS *viewp)
  270. #else
  271. void set_view_defaults(viewp)
  272. VIEW_DETAILS *viewp;
  273. #endif
  274. /***********************************************************************/
  275. {
  276. /*------------------------- external data -----------------------------*/
  277.  extern short compatible_look;
  278.  extern short compatible_feel;
  279. /*--------------------------- local data ------------------------------*/
  280.  register int i=0;
  281.  short tabinc=0;
  282. /*--------------------------- processing ------------------------------*/
  283. #ifdef TRACE
  284.  trace_function("default.c: set_view_defaults");
  285. #endif
  286. /*---------------------------------------------------------------------*/
  287. /* Set defaults for all environments first...                          */
  288. /*---------------------------------------------------------------------*/
  289.  viewp->arbchar_status =        FALSE;
  290.  viewp->arbchar_single =        '?';
  291.  viewp->arbchar_multiple =      '$';
  292.  viewp->arrow_on = TRUE;
  293.  viewp->case_locate = CASE_IGNORE;
  294.  viewp->case_change = CASE_RESPECT;
  295.  viewp->case_sort = CASE_RESPECT;
  296.  viewp->cmd_line = 'B';
  297.  viewp->id_line = TRUE;
  298.  viewp->in_ring = FALSE;
  299.  viewp->current_row = 0;   /* this is set once we know the screen size */
  300.  viewp->current_base = POSITION_MIDDLE;
  301.  viewp->current_off = 0;
  302.  viewp->display_high = 0;
  303.  viewp->display_low = 0;
  304.  viewp->hex = FALSE;
  305.  viewp->highlight = HIGHLIGHT_NONE;
  306.  viewp->highlight_high = 0;
  307.  viewp->highlight_low = 0;
  308.  viewp->inputmode = INPUTMODE_LINE;
  309.  viewp->macro = FALSE;
  310.  viewp->margin_left = 1;
  311.  viewp->margin_right = 72;
  312.  viewp->margin_indent = 0;
  313.  viewp->margin_indent_offset_status = TRUE;
  314.  viewp->msgmode_status = TRUE;
  315.  viewp->position_status = TRUE;
  316.  viewp->newline_aligned = TRUE;
  317.  viewp->scale_base = POSITION_MIDDLE;
  318.  viewp->scale_off = 1;
  319.  viewp->scope_all = FALSE;
  320.  viewp->shadow = TRUE;
  321.  viewp->tab_base = POSITION_BOTTOM;
  322.  viewp->tab_on = FALSE;
  323.  viewp->numtabs = 32;
  324.  viewp->tabsinc = 0;
  325.  viewp->verify_start = 1;
  326.  viewp->verify_col = 1;
  327.  viewp->verify_end = max_line_length;
  328.  viewp->hexshow_on = FALSE;
  329.  viewp->hexshow_base = POSITION_TOP;
  330.  viewp->hexshow_off = 7;
  331.  viewp->word = 'N';
  332.  viewp->wordwrap = FALSE;
  333.  viewp->wrap = FALSE;
  334.  viewp->zone_start = 1;
  335.  viewp->zone_end = max_line_length;
  336.  
  337.  if (viewp->cmd_line == 'O')
  338.    {
  339.     viewp->current_window =     WINDOW_FILEAREA;
  340.     viewp->previous_window =    WINDOW_FILEAREA;
  341.    }
  342.  else
  343.    {
  344.     viewp->current_window =        WINDOW_COMMAND;
  345.     viewp->previous_window =       WINDOW_FILEAREA;
  346.    }
  347. /*---------------------------------------------------------------------*/
  348. /* Set defaults for individual environments next...                    */
  349. /*---------------------------------------------------------------------*/
  350.  switch(compatible_look)
  351.    {
  352.     case COMPAT_THE:
  353.          viewp->number = TRUE;
  354.          viewp->prefix = PREFIX_ON|PREFIX_LEFT;
  355.          viewp->prefix_width = 6;
  356.          viewp->prefix_gap = 0;
  357.          viewp->scale_on = FALSE;
  358.          viewp->tab_off = (-3);
  359.          viewp->msgline_base = POSITION_TOP;
  360.          viewp->msgline_off = 2;
  361.          viewp->msgline_rows = 5;
  362.          break;
  363.     case COMPAT_XEDIT:
  364.          viewp->number = FALSE;
  365.          viewp->prefix = PREFIX_ON|PREFIX_LEFT;
  366.          viewp->prefix_width = 6;
  367.          viewp->prefix_gap = 1;
  368.          viewp->scale_on = TRUE;
  369.          viewp->tab_off = (-3);
  370.          viewp->msgline_base = POSITION_TOP;
  371.          viewp->msgline_off = 2;
  372.          viewp->msgline_rows = 2;
  373.          break;
  374.     case COMPAT_KEDIT:
  375.          viewp->number = FALSE;
  376.          viewp->prefix = PREFIX_OFF;
  377.          viewp->prefix_width = 6;
  378.          viewp->prefix_gap = 1;
  379.          viewp->scale_on = FALSE;
  380.          viewp->tab_off = (-2);
  381.          viewp->msgline_base = POSITION_TOP;
  382.          viewp->msgline_off = 2;
  383.          viewp->msgline_rows = 5;
  384.          break;
  385.    }
  386.  switch(compatible_feel)
  387.    {
  388.     case COMPAT_THE:
  389.          viewp->case_enter = CASE_MIXED;
  390.          viewp->imp_macro = TRUE;
  391. #if defined(USE_XCURSES)
  392.          viewp->imp_os = FALSE;
  393. #else
  394.          viewp->imp_os = TRUE;
  395. #endif
  396.          viewp->linend_status = FALSE;
  397.          viewp->linend_value = '#';
  398.          viewp->stay = TRUE;
  399.          viewp->tab_off = (-3);
  400.          tabinc = 8;
  401.          break;
  402.     case COMPAT_XEDIT:
  403.          viewp->case_enter = CASE_UPPER;
  404.          viewp->imp_macro = TRUE;
  405. #if defined(USE_XCURSES)
  406.          viewp->imp_os = FALSE;
  407. #else
  408.          viewp->imp_os = TRUE;
  409. #endif
  410.          viewp->linend_status = TRUE;
  411.          viewp->linend_value = '#';
  412.          viewp->stay = FALSE;
  413.          viewp->tab_off = (-3);
  414.          tabinc = 3;
  415.          break;
  416.     case COMPAT_KEDIT:
  417.          viewp->case_enter = CASE_MIXED;
  418.          viewp->imp_macro = FALSE;
  419.          viewp->imp_os = FALSE;
  420.          viewp->linend_status = FALSE;
  421.          viewp->linend_value = '#';
  422.          viewp->stay = TRUE;
  423.          viewp->tab_off = (-2);
  424.          tabinc = 8;
  425.          break;
  426.    }
  427.  for (i=0;i<MAX_NUMTABS;i++)
  428.      viewp->tabs[i] = 1 + (i*tabinc);
  429. #ifdef TRACE
  430.  trace_return();
  431. #endif
  432.  return;
  433. }
  434. /***********************************************************************/
  435. #ifdef HAVE_PROTO
  436. short get_profile(CHARTYPE *prf_file,CHARTYPE *prf_arg)
  437. #else
  438. short get_profile(prf_file,prf_arg)
  439. CHARTYPE *prf_file,*prf_arg;
  440. #endif
  441. /***********************************************************************/
  442. {
  443. /*------------------------- external data -----------------------------*/
  444.  extern bool in_macro;
  445.  extern bool rexx_support;
  446. /*--------------------------- local data ------------------------------*/
  447.  FILE *fp=NULL;
  448.  short rc=RC_OK;
  449.  bool save_in_macro=in_macro;
  450.  short macrorc=0;
  451. /*--------------------------- processing ------------------------------*/
  452. #ifdef TRACE
  453.  trace_function("default.c: get_profile");
  454. #endif
  455. /*---------------------------------------------------------------------*/
  456. /* To get here, we either have a specified a valid profile name or we  */
  457. /* haven't specified a profile file at all.                            */
  458. /*---------------------------------------------------------------------*/
  459.  in_macro = TRUE;
  460. /*---------------------------------------------------------------------*/
  461. /* If REXX is supported, process the macro as a REXX macro...          */
  462. /*---------------------------------------------------------------------*/
  463.  if (rexx_support)
  464.    {
  465.     post_process_line(CURRENT_VIEW,CURRENT_VIEW->focus_line,(LINE *)NULL,TRUE);
  466.     rc = execute_macro_file(prf_file,prf_arg,¯orc);
  467.     if (rc != RC_OK)
  468.       {
  469.        display_error(54,(CHARTYPE *)"",FALSE);
  470.        rc = RC_SYSTEM_ERROR;
  471.       }
  472.    }
  473.  else
  474.    {
  475. /*---------------------------------------------------------------------*/
  476. /* ...otherwise, process the file as a non-REXX macro file...          */
  477. /*---------------------------------------------------------------------*/
  478.     if ((fp = fopen((DEFCHAR *)prf_file,"r")) == NULL)
  479.       {
  480.        rc = RC_ACCESS_DENIED;
  481.        display_error(8,prf_file,FALSE);
  482.       }
  483.     post_process_line(CURRENT_VIEW,CURRENT_VIEW->focus_line,(LINE *)NULL,TRUE);
  484.     if (rc == RC_OK)
  485.       {
  486.        rc = execute_command_file(fp);
  487.        fclose(fp);
  488.       }
  489.     if (rc == RC_SYSTEM_ERROR)
  490.        display_error(53,(CHARTYPE *)"",FALSE);
  491.     if (rc == RC_NOREXX_ERROR)
  492.        display_error(52,(CHARTYPE *)"",FALSE);
  493.    }
  494.  in_macro = save_in_macro;
  495. #ifdef TRACE
  496.  trace_return();
  497. #endif
  498. /* return(rc);*/
  499.  return(RC_OK);
  500. }
  501. /***********************************************************************/
  502. #ifdef HAVE_PROTO
  503. short defaults_for_first_file(void)
  504. #else
  505. short defaults_for_first_file()
  506. #endif
  507. /***********************************************************************/
  508. {
  509. /*------------------------- external data -----------------------------*/
  510.  extern VIEW_DETAILS *vd_first;
  511.  extern VIEW_DETAILS *vd_last;
  512.  extern CHARTYPE number_of_views;
  513. /*--------------------------- local data ------------------------------*/
  514.  register int i=0;
  515. /*--------------------------- processing ------------------------------*/
  516. #ifdef TRACE
  517.  trace_function("default.c: defaults_for_first_file");
  518. #endif
  519. /*---------------------------------------------------------------------*/
  520. /* Add to view linked list.                                            */
  521. /*---------------------------------------------------------------------*/
  522.  if ((CURRENT_VIEW = vll_add(vd_first,vd_current,sizeof(VIEW_DETAILS)))
  523.                    == (VIEW_DETAILS *)NULL)
  524.    {
  525. #ifdef TRACE
  526.     trace_return();
  527. #endif
  528.     return(RC_OUT_OF_MEMORY);
  529.    }
  530.  if (vd_first == (VIEW_DETAILS *)NULL)
  531.     vd_first = vd_last = CURRENT_VIEW;
  532.  
  533.  set_view_defaults(CURRENT_VIEW);
  534. /*---------------------------------------------------------------------*/
  535. /* We now have CURRENT_VIEW and real screen sizes set, we can          */
  536. /* calculate the CURLINE value.                                        */
  537. /*---------------------------------------------------------------------*/
  538.  CURRENT_VIEW->current_row = calculate_actual_row(CURRENT_VIEW->current_base,
  539.                                                   CURRENT_VIEW->current_off,
  540.                                                   CURRENT_SCREEN.rows[WINDOW_FILEAREA],TRUE);
  541.  
  542.  CURRENT_VIEW->mark_type = 0;
  543.  CURRENT_VIEW->marked_line = FALSE;
  544.  CURRENT_VIEW->marked_col = FALSE;
  545.  CURRENT_VIEW->mark_start_line = 0;
  546.  CURRENT_VIEW->mark_end_line = 0;
  547.  CURRENT_VIEW->mark_start_col = 0;
  548.  CURRENT_VIEW->mark_end_col = 0;
  549.  CURRENT_VIEW->focus_line = 0L;
  550.  CURRENT_VIEW->current_line = 0L;
  551.  CURRENT_VIEW->current_column = 1;
  552.  for (i=0;i<VIEW_WINDOWS;i++)
  553.     CURRENT_VIEW->x[i] = CURRENT_VIEW->y[i] = 0;
  554.  
  555.  CURRENT_FILE = (FILE_DETAILS *)NULL;
  556.  
  557.  CURRENT_SCREEN.screen_view = CURRENT_VIEW;
  558.  
  559.  number_of_views++;
  560.  if (CURRENT_VIEW->cmd_line == 'O')
  561.    {
  562.     CURRENT_VIEW->current_window =     WINDOW_FILEAREA;
  563.     CURRENT_VIEW->previous_window =    WINDOW_FILEAREA;
  564.    }
  565.  else
  566.    {
  567.     CURRENT_VIEW->current_window =        WINDOW_COMMAND;
  568.     CURRENT_VIEW->previous_window =       WINDOW_FILEAREA;
  569.    }
  570.  CURRENT_VIEW->preserved_view_details = (PRESERVED_VIEW_DETAILS *)NULL;
  571. #ifdef TRACE
  572.  trace_return();
  573. #endif
  574.  return(RC_OK);
  575. }
  576. /***********************************************************************/
  577. #ifdef HAVE_PROTO
  578. short defaults_for_other_files(VIEW_DETAILS *base_view)
  579. #else
  580. short defaults_for_other_files(base_view)
  581. VIEW_DETAILS *base_view;
  582. #endif
  583. /***********************************************************************/
  584. {
  585. /*------------------------- external data -----------------------------*/
  586.  extern VIEW_DETAILS *vd_first;
  587.  extern VIEW_DETAILS *vd_last;
  588.  extern CHARTYPE number_of_views;
  589. /*--------------------------- local data ------------------------------*/
  590.  register int i=0;
  591. /*--------------------------- processing ------------------------------*/
  592. #ifdef TRACE
  593.  trace_function("default.c: defaults_for_other_files");
  594. #endif
  595.  if ((CURRENT_VIEW = vll_add(vd_first,vd_current,sizeof(VIEW_DETAILS)))
  596.                    == (VIEW_DETAILS *)NULL)
  597.    {
  598. #ifdef TRACE
  599.     trace_return();
  600. #endif
  601.     return(RC_OUT_OF_MEMORY);
  602.    }
  603.  if (CURRENT_VIEW->next == (VIEW_DETAILS *)NULL)
  604.     vd_last = CURRENT_VIEW;
  605.  if (vd_first == (VIEW_DETAILS *)NULL)
  606.     vd_first = vd_last = CURRENT_VIEW;
  607.  
  608.  if (base_view)
  609.    {
  610.     CURRENT_VIEW->current_line =    base_view->current_line;
  611.     CURRENT_VIEW->current_column =  base_view->current_column;
  612.     CURRENT_VIEW->display_high =    base_view->display_high;
  613.     CURRENT_VIEW->display_low =     base_view->display_low;
  614.     CURRENT_VIEW->hex =             base_view->hex;
  615.     CURRENT_VIEW->highlight =       base_view->highlight;
  616.     CURRENT_VIEW->highlight_high =  base_view->highlight_high;
  617.     CURRENT_VIEW->highlight_low =   base_view->highlight_low;
  618.     CURRENT_VIEW->newline_aligned = base_view->newline_aligned;
  619.     CURRENT_VIEW->scope_all =       base_view->scope_all;
  620.     CURRENT_VIEW->shadow =          base_view->shadow;
  621.     CURRENT_VIEW->stay =            base_view->stay;
  622.     CURRENT_VIEW->hexshow_on =      base_view->hexshow_on;
  623.     CURRENT_VIEW->hexshow_base =    base_view->hexshow_base;
  624.     CURRENT_VIEW->hexshow_off =     base_view->hexshow_off;
  625.     CURRENT_VIEW->verify_start =    base_view->verify_start;
  626.     CURRENT_VIEW->verify_col =      base_view->verify_col;
  627.     CURRENT_VIEW->verify_end =      base_view->verify_end;
  628.     CURRENT_VIEW->zone_start =      base_view->zone_start;
  629.     CURRENT_VIEW->zone_end =        base_view->zone_end;
  630.     
  631.     for (i=0;i<VIEW_WINDOWS;i++)
  632.       {
  633.        CURRENT_VIEW->y[i] = base_view->y[i];
  634.        CURRENT_VIEW->x[i] = base_view->x[i];
  635.       }
  636.  
  637.     CURRENT_VIEW->inputmode  =      base_view->inputmode;
  638.     CURRENT_VIEW->focus_line =      base_view->focus_line;
  639.     CURRENT_VIEW->mark_type =       base_view->mark_type;
  640.     CURRENT_VIEW->marked_line =     base_view->marked_line;
  641.     CURRENT_VIEW->marked_col =      base_view->marked_col;
  642.     CURRENT_VIEW->mark_start_line = base_view->mark_start_line;
  643.     CURRENT_VIEW->mark_end_line =   base_view->mark_end_line;
  644.     CURRENT_VIEW->mark_start_col =  base_view->mark_start_col;
  645.     CURRENT_VIEW->mark_end_col =    base_view->mark_end_col;
  646.     CURRENT_VIEW->arbchar_status =  base_view->arbchar_status;
  647.     CURRENT_VIEW->arbchar_single =  base_view->arbchar_single;
  648.     CURRENT_VIEW->arbchar_multiple= base_view->arbchar_multiple;
  649.     CURRENT_VIEW->arrow_on =        base_view->arrow_on;
  650.     CURRENT_VIEW->case_enter =      base_view->case_enter;
  651.     CURRENT_VIEW->case_locate =     base_view->case_locate;
  652.     CURRENT_VIEW->case_change =     base_view->case_change;
  653.     CURRENT_VIEW->case_sort =       base_view->case_sort;
  654.     CURRENT_VIEW->cmd_line =        base_view->cmd_line;
  655.     CURRENT_VIEW->id_line =         base_view->id_line;
  656.     CURRENT_VIEW->current_base =    base_view->current_base;
  657.     CURRENT_VIEW->current_off =     base_view->current_off;
  658.     CURRENT_VIEW->current_row =     base_view->current_row;
  659.     CURRENT_VIEW->imp_macro =       base_view->imp_macro;
  660.     CURRENT_VIEW->imp_os =          base_view->imp_os;
  661.     CURRENT_VIEW->linend_status =   base_view->linend_status;
  662.     CURRENT_VIEW->linend_value =    base_view->linend_value;
  663.     CURRENT_VIEW->macro =           base_view->macro;
  664.     CURRENT_VIEW->margin_left =     base_view->margin_left;
  665.     CURRENT_VIEW->margin_right =    base_view->margin_right;
  666.     CURRENT_VIEW->margin_indent =   base_view->margin_indent;
  667.     CURRENT_VIEW->margin_indent_offset_status = base_view->margin_indent_offset_status;
  668.     CURRENT_VIEW->msgmode_status =  TRUE;
  669.     CURRENT_VIEW->position_status = base_view->position_status;
  670.     CURRENT_VIEW->msgline_base =    base_view->msgline_base;
  671.     CURRENT_VIEW->msgline_off =     base_view->msgline_off;
  672.     CURRENT_VIEW->msgline_rows =    base_view->msgline_rows;
  673.     CURRENT_VIEW->number =          base_view->number;
  674.     CURRENT_VIEW->prefix =          base_view->prefix;
  675.     CURRENT_VIEW->prefix_width =    base_view->prefix_width;
  676.     CURRENT_VIEW->prefix_gap =      base_view->prefix_gap;
  677.     CURRENT_VIEW->scale_base =      base_view->scale_base;
  678.     CURRENT_VIEW->scale_off =       base_view->scale_off;
  679.     CURRENT_VIEW->scale_on =        base_view->scale_on;
  680.     CURRENT_VIEW->tab_base =        base_view->tab_base;
  681.     CURRENT_VIEW->tab_off =         base_view->tab_off;
  682.     CURRENT_VIEW->tab_on =          base_view->tab_on;
  683.     CURRENT_VIEW->word =            base_view->word;
  684.     CURRENT_VIEW->wordwrap =        base_view->wordwrap;
  685.     CURRENT_VIEW->wrap =            base_view->wrap;
  686.     CURRENT_VIEW->numtabs =         base_view->numtabs;
  687.     CURRENT_VIEW->tabsinc =         base_view->tabsinc;
  688.     memcpy(CURRENT_VIEW->tabs,base_view->tabs,MAX_NUMTABS*sizeof(LENGTHTYPE));
  689.    }
  690.  else
  691.    {
  692.     set_view_defaults(CURRENT_VIEW);
  693.     CURRENT_VIEW->focus_line = 0L;
  694.     CURRENT_VIEW->current_line = 0L;
  695.     CURRENT_VIEW->current_column = 1;
  696.     CURRENT_VIEW->mark_type = 0;
  697.     CURRENT_VIEW->marked_line = FALSE;
  698.     CURRENT_VIEW->marked_col = FALSE;
  699.     CURRENT_VIEW->mark_start_line = 0;
  700.     CURRENT_VIEW->mark_end_line = 0;
  701.     CURRENT_VIEW->mark_start_col = 0;
  702.     CURRENT_VIEW->mark_end_col = 0;
  703.     for (i=0;i<VIEW_WINDOWS;i++)
  704.       {
  705.        CURRENT_VIEW->y[i] = CURRENT_VIEW->x[i] = 0;
  706.       }
  707.     CURRENT_VIEW->arbchar_status =  PREVIOUS_VIEW->arbchar_status;
  708.     CURRENT_VIEW->arbchar_single =  PREVIOUS_VIEW->arbchar_single;
  709.     CURRENT_VIEW->arbchar_multiple= PREVIOUS_VIEW->arbchar_multiple;
  710.     CURRENT_VIEW->arrow_on =        PREVIOUS_VIEW->arrow_on;
  711.     CURRENT_VIEW->case_enter =      PREVIOUS_VIEW->case_enter;
  712.     CURRENT_VIEW->case_locate =     PREVIOUS_VIEW->case_locate;
  713.     CURRENT_VIEW->case_change =     PREVIOUS_VIEW->case_change;
  714.     CURRENT_VIEW->case_sort =       PREVIOUS_VIEW->case_sort;
  715.     CURRENT_VIEW->cmd_line =        PREVIOUS_VIEW->cmd_line;
  716.     CURRENT_VIEW->id_line =         PREVIOUS_VIEW->id_line;
  717.     CURRENT_VIEW->current_base =    PREVIOUS_VIEW->current_base;
  718.     CURRENT_VIEW->current_off =     PREVIOUS_VIEW->current_off;
  719.     CURRENT_VIEW->current_row =     PREVIOUS_VIEW->current_row;
  720.     CURRENT_VIEW->imp_macro =       PREVIOUS_VIEW->imp_macro;
  721.     CURRENT_VIEW->imp_os =          PREVIOUS_VIEW->imp_os;
  722.     CURRENT_VIEW->inputmode  =      PREVIOUS_VIEW->inputmode;
  723.     CURRENT_VIEW->highlight =       PREVIOUS_VIEW->highlight;
  724.     CURRENT_VIEW->highlight_high =  PREVIOUS_VIEW->highlight_high;
  725.     CURRENT_VIEW->highlight_low =   PREVIOUS_VIEW->highlight_low;
  726.     CURRENT_VIEW->newline_aligned = PREVIOUS_VIEW->newline_aligned;
  727.     CURRENT_VIEW->linend_status =   PREVIOUS_VIEW->linend_status;
  728.     CURRENT_VIEW->linend_value =    PREVIOUS_VIEW->linend_value;
  729.     CURRENT_VIEW->macro =           PREVIOUS_VIEW->macro;
  730.     CURRENT_VIEW->margin_left =     PREVIOUS_VIEW->margin_left;
  731.     CURRENT_VIEW->margin_right =    PREVIOUS_VIEW->margin_right;
  732.     CURRENT_VIEW->margin_indent =   PREVIOUS_VIEW->margin_indent;
  733.     CURRENT_VIEW->margin_indent_offset_status = PREVIOUS_VIEW->margin_indent_offset_status;
  734.     CURRENT_VIEW->msgmode_status =  TRUE;
  735.     CURRENT_VIEW->position_status = PREVIOUS_VIEW->position_status;
  736.     CURRENT_VIEW->msgline_base =    PREVIOUS_VIEW->msgline_base;
  737.     CURRENT_VIEW->msgline_off =     PREVIOUS_VIEW->msgline_off;
  738.     CURRENT_VIEW->msgline_rows =    PREVIOUS_VIEW->msgline_rows;
  739.     CURRENT_VIEW->number =          PREVIOUS_VIEW->number;
  740.     CURRENT_VIEW->prefix =          PREVIOUS_VIEW->prefix;
  741.     CURRENT_VIEW->prefix_width =    PREVIOUS_VIEW->prefix_width;
  742.     CURRENT_VIEW->prefix_gap =      PREVIOUS_VIEW->prefix_gap;
  743.     CURRENT_VIEW->scale_base =      PREVIOUS_VIEW->scale_base;
  744.     CURRENT_VIEW->scale_off =       PREVIOUS_VIEW->scale_off;
  745.     CURRENT_VIEW->scale_on =        PREVIOUS_VIEW->scale_on;
  746.     CURRENT_VIEW->tab_base =        PREVIOUS_VIEW->tab_base;
  747.     CURRENT_VIEW->tab_off =         PREVIOUS_VIEW->tab_off;
  748.     CURRENT_VIEW->tab_on =          PREVIOUS_VIEW->tab_on;
  749.     CURRENT_VIEW->word =            PREVIOUS_VIEW->word;
  750.     CURRENT_VIEW->wordwrap =        PREVIOUS_VIEW->wordwrap;
  751.     CURRENT_VIEW->wrap =            PREVIOUS_VIEW->wrap;
  752.     CURRENT_VIEW->numtabs =         PREVIOUS_VIEW->numtabs;
  753.     CURRENT_VIEW->tabsinc =         PREVIOUS_VIEW->tabsinc;
  754.     memcpy(CURRENT_VIEW->tabs,PREVIOUS_VIEW->tabs,MAX_NUMTABS*sizeof(LENGTHTYPE));
  755.    }
  756.  
  757.  CURRENT_FILE = (FILE_DETAILS *)NULL;
  758.  
  759.  CURRENT_SCREEN.screen_view = CURRENT_VIEW;
  760.  
  761.  number_of_views++;
  762.  if (CURRENT_VIEW->cmd_line == 'O')
  763.    {
  764.     CURRENT_VIEW->current_window =     WINDOW_FILEAREA;
  765.     CURRENT_VIEW->previous_window =    WINDOW_FILEAREA;
  766.    }
  767.  else
  768.    {
  769.     CURRENT_VIEW->current_window =        WINDOW_COMMAND;
  770.     CURRENT_VIEW->previous_window =       WINDOW_FILEAREA;
  771.    }
  772.  CURRENT_VIEW->preserved_view_details = (PRESERVED_VIEW_DETAILS *)NULL;
  773. #ifdef TRACE
  774.  trace_return();
  775. #endif
  776.  return(RC_OK);
  777. }
  778. /***********************************************************************/
  779. #ifdef HAVE_PROTO
  780. short default_file_attributes(FILE_DETAILS *fd)
  781. #else
  782. short default_file_attributes(fd)
  783. FILE_DETAILS *fd;
  784. #endif
  785. /***********************************************************************/
  786. {
  787. /*------------------------- external data -----------------------------*/
  788. /*--------------------------- local data ------------------------------*/
  789.  RESERVED *curr=NULL;
  790.  short rc=RC_OK;
  791. /*--------------------------- processing ------------------------------*/
  792. #ifdef TRACE
  793.  trace_function("default.c: default_file_attributes");
  794. #endif
  795.  
  796.  set_file_defaults(CURRENT_FILE);
  797.  
  798.  CURRENT_FILE->fname =           (CHARTYPE *)NULL;
  799.  CURRENT_FILE->fpath =           (CHARTYPE *)NULL;
  800.  CURRENT_FILE->autosave_fname =  (CHARTYPE *)NULL;
  801.  CURRENT_FILE->file_views =      1;
  802.  CURRENT_FILE->first_line =      (LINE *)NULL;
  803.  CURRENT_FILE->last_line =       (LINE *)NULL;
  804.  CURRENT_FILE->editv =           (LINE *)NULL;
  805.  CURRENT_FILE->first_reserved  = (RESERVED *)NULL;
  806.  CURRENT_FILE->fmode =           0;
  807.  CURRENT_FILE->pseudo_file =     PSEUDO_REAL;
  808.  CURRENT_FILE->first_ppc = CURRENT_FILE->last_ppc = NULL;
  809.  CURRENT_FILE->preserved_file_details = NULL;
  810.  CURRENT_FILE->fp = NULL;
  811. /*---------------------------------------------------------------------*/
  812. /* Set defaults for the current file based on the settings for the     */
  813. /* previous file. The defaults to copy are:                            */
  814. /* - colours, reserved lines.                                          */
  815. /*---------------------------------------------------------------------*/
  816.  if (fd != NULL)
  817.    {
  818.     CURRENT_FILE->display_actual_filename = fd->display_actual_filename;
  819.     memcpy(CURRENT_FILE->attr,fd->attr,ATTR_MAX*sizeof(COLOUR_ATTR));
  820.     curr = fd->first_reserved;
  821.     while(curr!=NULL)
  822.       {
  823.        rc = add_reserved_line(curr->spec,curr->line,curr->base,curr->off,
  824.                         curr->attr);
  825.        if (rc != RC_OK)
  826.           break;
  827.        curr = curr->next;
  828.       }
  829.    }
  830. #ifdef TRACE
  831.  trace_return();
  832. #endif
  833.  return(rc);
  834. }
  835. /***********************************************************************/
  836. #ifdef HAVE_PROTO
  837. void set_screen_defaults(void)
  838. #else
  839. void set_screen_defaults()
  840. #endif
  841. /***********************************************************************/
  842. {
  843. /*------------------------- external data -----------------------------*/
  844.  extern CHARTYPE display_screens;
  845.  extern bool horizontal;
  846.  extern short terminal_lines;
  847.  extern short terminal_cols;
  848. /*--------------------------- local data ------------------------------*/
  849.  register int i=0;
  850.  register int j=0;
  851.  ROWTYPE cmdline=0;
  852.  CHARTYPE prefix=0;
  853.  ROWTYPE start_row=0,number_rows_less=0,idline_rows=0;
  854.  short my_prefix_width=0,my_prefix_gap=0;
  855.  bool my_arrow=TRUE;
  856. /*--------------------------- processing ------------------------------*/
  857. #ifdef TRACE
  858.  trace_function("default.c: set_screen_defaults");
  859. #endif
  860. /*---------------------------------------------------------------------*/
  861. /* Set values that affect the placement of each screen depending on    */
  862. /* the position of the status line...                                  */
  863. /*---------------------------------------------------------------------*/
  864.  switch(STATUSLINEx)
  865.    {
  866.     case 'B':
  867.          start_row = 0;
  868.          number_rows_less = 1;
  869.          break;
  870.     case 'T':
  871.          start_row = 1;
  872.          number_rows_less = 1;
  873.          break;
  874.     case 'O':
  875.     case 'G':
  876.          start_row = 0;
  877.          number_rows_less = 0;
  878.          break;
  879.    }
  880. /*---------------------------------------------------------------------*/
  881. /* Determine size of overall screen dimensions...                      */
  882. /*---------------------------------------------------------------------*/
  883.  if (horizontal)
  884.    {
  885.     screen[0].screen_rows = (terminal_lines - number_rows_less) / display_screens;
  886.     screen[0].screen_cols = terminal_cols;
  887.     screen[0].screen_start_row = start_row;
  888.     screen[0].screen_start_col = 0;
  889.     if (display_screens == 1)
  890.       {
  891.        screen[1].screen_rows = 0;
  892.        screen[1].screen_cols = 0;
  893.        screen[1].screen_start_row = 0;
  894.        screen[1].screen_start_col = 0;
  895.       }
  896.     else
  897.       {
  898.        screen[1].screen_rows = (terminal_lines - number_rows_less) - screen[0].screen_rows;
  899.        screen[1].screen_cols = terminal_cols;
  900.        screen[1].screen_start_row = screen[0].screen_rows + start_row;
  901.        screen[1].screen_start_col = 0;
  902.       }
  903.    }
  904.  else
  905.    {
  906.     screen[0].screen_rows = terminal_lines - number_rows_less;
  907.     screen[0].screen_cols = (terminal_cols / display_screens)-((display_screens == 1) ? 0 : 1);
  908.     screen[0].screen_start_row = start_row;
  909.     screen[0].screen_start_col = 0;
  910.     if (display_screens == 1)
  911.       {
  912.        screen[1].screen_rows = 0;
  913.        screen[1].screen_cols = 0;
  914.        screen[1].screen_start_row = 0;
  915.        screen[1].screen_start_col = 0;
  916.       }
  917.     else
  918.       {
  919.        screen[1].screen_rows = terminal_lines - number_rows_less;
  920.        screen[1].screen_cols = terminal_cols - screen[0].screen_cols - 2;
  921.        screen[1].screen_start_row = start_row;
  922.        screen[1].screen_start_col = screen[0].screen_cols + 2;
  923.       }
  924.    }
  925. /*---------------------------------------------------------------------*/
  926. /* Reset window sizes to zero...                                       */
  927. /*---------------------------------------------------------------------*/
  928.  for (i=0;i<MAX_SCREENS;i++)
  929.    {
  930.     for (j=0;j<VIEW_WINDOWS;j++)
  931.       {
  932.        screen[i].start_row[j] = 0;
  933.        screen[i].start_col[j] = 0;
  934.        screen[i].rows[j] = 0;
  935.        screen[i].cols[j] = 0;
  936.       }
  937.    }
  938. /*---------------------------------------------------------------------*/
  939. /* Determine size of each window for each screen...                    */
  940. /*---------------------------------------------------------------------*/
  941.  for (i=0;i<display_screens;i++)
  942.    {
  943.     if (screen[i].screen_view == (VIEW_DETAILS *)NULL)
  944.       {
  945.        cmdline = 'B';
  946.        idline_rows = 1;
  947.        prefix = PREFIXx;
  948.        my_prefix_width = DEFAULT_PREFIX_WIDTH;
  949.        my_prefix_gap = DEFAULT_PREFIX_GAP;
  950.        my_arrow = TRUE;
  951.       }
  952.     else
  953.       {
  954.        cmdline = screen[i].screen_view->cmd_line;
  955.        idline_rows = (screen[i].screen_view->id_line) ? 1 : 0;
  956.        prefix = screen[i].screen_view->prefix;
  957.        my_prefix_width = screen[i].screen_view->prefix_width;
  958.        my_prefix_gap = screen[i].screen_view->prefix_gap;
  959.        my_arrow = screen[i].screen_view->arrow_on;
  960.       }
  961.     switch(cmdline)
  962.       {
  963.        case 'T':                                   /* command line on top */
  964.             screen[i].start_row[WINDOW_FILEAREA] = screen[i].screen_start_row + 1 + idline_rows;
  965.             screen[i].rows[WINDOW_FILEAREA] = screen[i].screen_rows - 1 - idline_rows;
  966.             screen[i].start_row[WINDOW_COMMAND] = screen[i].screen_start_row + idline_rows;
  967.             screen[i].rows[WINDOW_COMMAND] = 1;
  968.             screen[i].cols[WINDOW_COMMAND] = screen[i].screen_cols-((my_arrow)?my_prefix_width:0);
  969.             screen[i].start_row[WINDOW_ARROW] = screen[i].start_row[WINDOW_COMMAND];
  970.             screen[i].rows[WINDOW_ARROW] = ((my_arrow)?1:0);
  971.             screen[i].cols[WINDOW_ARROW] = ((my_arrow)?my_prefix_width:0);
  972.             break;
  973.        case 'B':                                /* command line on bottom */
  974.             screen[i].start_row[WINDOW_FILEAREA] = screen[i].screen_start_row + idline_rows;
  975.             screen[i].rows[WINDOW_FILEAREA] = screen[i].screen_rows - 1 - idline_rows;
  976.             screen[i].start_row[WINDOW_COMMAND] = screen[i].screen_start_row + screen[i].screen_rows - 1;
  977.             screen[i].rows[WINDOW_COMMAND] = 1;
  978.             screen[i].cols[WINDOW_COMMAND] = screen[i].screen_cols-((my_arrow)?my_prefix_width:0);
  979.             screen[i].start_row[WINDOW_ARROW] = screen[i].start_row[WINDOW_COMMAND];
  980.             screen[i].rows[WINDOW_ARROW] = ((my_arrow)?1:0);
  981.             screen[i].cols[WINDOW_ARROW] = ((my_arrow)?my_prefix_width:0);
  982.             break;
  983.        case 'O':                                      /* command line off */
  984.             screen[i].start_row[WINDOW_FILEAREA] = screen[i].screen_start_row + idline_rows;
  985.             screen[i].rows[WINDOW_FILEAREA] = screen[i].screen_rows - idline_rows;
  986.             screen[i].start_row[WINDOW_COMMAND] = 0;
  987.             screen[i].rows[WINDOW_COMMAND] = 0;
  988.             screen[i].cols[WINDOW_COMMAND] = 0;
  989.             screen[i].start_row[WINDOW_ARROW] = 0;
  990.             screen[i].rows[WINDOW_ARROW] = 0;
  991.             screen[i].cols[WINDOW_ARROW] = 0;
  992.             break;
  993.       }
  994.     screen[i].start_col[WINDOW_ARROW] = screen[i].screen_start_col;
  995.     screen[i].start_col[WINDOW_COMMAND] = screen[i].screen_start_col+((my_arrow)?my_prefix_width:0);
  996.     if (idline_rows == 1)
  997.       {
  998.        screen[i].start_row[WINDOW_IDLINE] = screen[i].screen_start_row;
  999.        screen[i].start_col[WINDOW_IDLINE] = screen[i].screen_start_col;
  1000.        screen[i].rows[WINDOW_IDLINE] = 1;
  1001.        screen[i].cols[WINDOW_IDLINE] = screen[i].screen_cols;
  1002.       }
  1003.     if (prefix)
  1004.       {
  1005.        screen[i].start_row[WINDOW_PREFIX] = screen[i].start_row[WINDOW_FILEAREA];
  1006.        screen[i].start_row[WINDOW_GAP] = screen[i].start_row[WINDOW_FILEAREA];
  1007.        screen[i].rows[WINDOW_PREFIX] = screen[i].rows[WINDOW_FILEAREA];
  1008.        screen[i].rows[WINDOW_GAP] = screen[i].rows[WINDOW_FILEAREA];
  1009.        screen[i].cols[WINDOW_PREFIX] = my_prefix_width-my_prefix_gap;
  1010.        screen[i].cols[WINDOW_GAP] = my_prefix_gap;
  1011.        screen[i].cols[WINDOW_FILEAREA] = screen[i].screen_cols-my_prefix_width;
  1012.        if ((prefix&PREFIX_LOCATION_MASK) == PREFIX_LEFT)
  1013.          {
  1014.           screen[i].start_col[WINDOW_PREFIX] = screen[i].screen_start_col;
  1015.           screen[i].start_col[WINDOW_GAP] = screen[i].screen_start_col+(my_prefix_width-my_prefix_gap);
  1016.           screen[i].start_col[WINDOW_FILEAREA] = screen[i].screen_start_col+my_prefix_width;
  1017.          }
  1018.        else
  1019.          {
  1020.           screen[i].start_col[WINDOW_FILEAREA] = screen[i].screen_start_col;
  1021.           screen[i].start_col[WINDOW_PREFIX] = ((screen[i].screen_start_col+screen[i].screen_cols+my_prefix_gap)-my_prefix_width);
  1022.           screen[i].start_col[WINDOW_GAP] = (screen[i].screen_start_col+screen[i].screen_cols)-my_prefix_width;
  1023.          }
  1024.       }
  1025.     else
  1026.       {
  1027.        screen[i].cols[WINDOW_FILEAREA] = screen[i].screen_cols;
  1028.        screen[i].start_col[WINDOW_FILEAREA] = screen[i].screen_start_col;
  1029.        screen[i].rows[WINDOW_PREFIX] = 0;
  1030.        screen[i].cols[WINDOW_PREFIX] = 0;
  1031.        screen[i].rows[WINDOW_GAP] = 0;
  1032.        screen[i].cols[WINDOW_GAP] = 0;
  1033.       }
  1034.    }
  1035. /*---------------------------------------------------------------------*/
  1036. /* We now have the size of each screen, so we can allocate the display */
  1037. /* line arrays.                                                        */
  1038. /*---------------------------------------------------------------------*/
  1039.  if (screen[0].sl != NULL)
  1040.    {
  1041.     (*the_free)(screen[0].sl);
  1042.     screen[0].sl = NULL;
  1043.    }
  1044.  if (screen[1].sl != NULL)
  1045.    {
  1046.     (*the_free)(screen[1].sl);
  1047.     screen[1].sl = NULL;
  1048.    }
  1049.  if ((screen[0].sl = (SHOW_LINE *)(*the_malloc)(screen[0].rows[WINDOW_FILEAREA]*sizeof(SHOW_LINE))) == NULL)
  1050.    {
  1051.     cleanup();
  1052.     display_error(30,(CHARTYPE *)"",FALSE);
  1053.     exit(1);
  1054.    }
  1055.  if (display_screens > 1)
  1056.    {
  1057.     if ((screen[1].sl = (SHOW_LINE *)(*the_malloc)(screen[1].rows[WINDOW_FILEAREA]*sizeof(SHOW_LINE))) == NULL)
  1058.       {
  1059.        cleanup();
  1060.        display_error(30,(CHARTYPE *)"",FALSE);
  1061.        exit(1);
  1062.       }
  1063.    }
  1064. #ifdef TRACE
  1065.  trace_return();
  1066. #endif
  1067.  return;
  1068. }
  1069. /***********************************************************************/
  1070. #ifdef HAVE_PROTO
  1071. void set_defaults(void)
  1072. #else
  1073. void set_defaults()
  1074. #endif
  1075. /***********************************************************************/
  1076. {
  1077. /*------------------------- external data -----------------------------*/
  1078.  extern CHARTYPE *cmd_rec;
  1079.  extern LENGTHTYPE cmd_rec_len;
  1080. /*--------------------------- local data ------------------------------*/
  1081. /*--------------------------- processing ------------------------------*/
  1082. #ifdef TRACE
  1083.  trace_function("default.c: set_defaults");
  1084. #endif
  1085. /*---------------------------------------------------------------------*/
  1086. /* Set up screen default sizes.                                        */
  1087. /*---------------------------------------------------------------------*/
  1088.  set_screen_defaults();
  1089. /*---------------------------------------------------------------------*/
  1090. /* Allocate memory to cmd_rec and set it to blanks.                    */
  1091. /*---------------------------------------------------------------------*/
  1092.  if (cmd_rec != NULL)
  1093.     (*the_free)(cmd_rec);
  1094.  if ((cmd_rec = (CHARTYPE *)(*the_malloc)((COLS+1)*sizeof(CHARTYPE))) == NULL)
  1095.    {
  1096.     cleanup();
  1097.     display_error(30,(CHARTYPE *)"",FALSE);
  1098.     exit(1);
  1099.    }
  1100.  memset(cmd_rec,' ',max_line_length);
  1101.  cmd_rec_len = 0;
  1102.  
  1103. #ifdef TRACE
  1104.  trace_return();
  1105. #endif
  1106.  return;
  1107. }
  1108. /***********************************************************************/
  1109. #ifdef HAVE_PROTO
  1110. short set_THE_defaults(int prey,int prex)
  1111. #else
  1112. short set_THE_defaults(prey,prex)
  1113. int prey,prex;
  1114. #endif
  1115. /***********************************************************************/
  1116. {
  1117. /*------------------------- external data -----------------------------*/
  1118. /*--------------------------- local data ------------------------------*/
  1119.  short rc=RC_OK;
  1120. /*--------------------------- processing ------------------------------*/
  1121. #ifdef TRACE
  1122.  trace_function("default.c: set_THE_defaults");
  1123. #endif
  1124. /*---------------------------------------------------------------------*/
  1125. /* This function is for resetting all default values for THE           */
  1126. /* compatibility mode.                                                 */
  1127. /*---------------------------------------------------------------------*/
  1128.  Define((CHARTYPE *)"F2");
  1129.  Define((CHARTYPE *)"F3");
  1130.  Define((CHARTYPE *)"F4");
  1131.  Define((CHARTYPE *)"F6");
  1132.  Define((CHARTYPE *)"F7");
  1133.  Define((CHARTYPE *)"F8");
  1134.  Define((CHARTYPE *)"F9");
  1135.  Define((CHARTYPE *)"F11");
  1136.  Define((CHARTYPE *)"CURD");
  1137.  Define((CHARTYPE *)"CURL");
  1138.  Define((CHARTYPE *)"CURR");
  1139.  Define((CHARTYPE *)"CURU");
  1140. #if defined(UNIX) && !defined(USE_EXTCURSES) && !defined(USE_XCURSES)
  1141.  Define((CHARTYPE *)"C-M");
  1142.  Define((CHARTYPE *)"F16");
  1143. # if defined(KEY_TAB)
  1144.  Define((CHARTYPE *)"KEY_TAB");
  1145. # endif
  1146. # if defined(KEY_BTAB)
  1147.  Define((CHARTYPE *)"S-TAB");
  1148. # endif
  1149.  Define((CHARTYPE *)"C-I");
  1150. #else
  1151.  Define((CHARTYPE *)"TAB");
  1152.  Define((CHARTYPE *)"S-TAB");
  1153.  Define((CHARTYPE *)"ENTER");
  1154. #endif
  1155. #ifdef TRACE
  1156.  trace_return();
  1157. #endif
  1158.  return(rc);
  1159. }
  1160. /***********************************************************************/
  1161. #ifdef HAVE_PROTO
  1162. short set_XEDIT_defaults(int prey,int prex)
  1163. #else
  1164. short set_XEDIT_defaults(prey,prex)
  1165. int prey,prex;
  1166. #endif
  1167. /***********************************************************************/
  1168. {
  1169. /*------------------------- external data -----------------------------*/
  1170. /*--------------------------- local data ------------------------------*/
  1171.  short rc=RC_OK;
  1172. /*--------------------------- processing ------------------------------*/
  1173. #ifdef TRACE
  1174.  trace_function("default.c: set_XEDIT_defaults");
  1175. #endif
  1176. /*---------------------------------------------------------------------*/
  1177. /* This function is for resetting all default values for XEDIT         */
  1178. /* compatibility mode.                                                 */
  1179. /*---------------------------------------------------------------------*/
  1180.  Define((CHARTYPE *)"F2 sos lineadd");
  1181.  Define((CHARTYPE *)"F3 quit");
  1182.  Define((CHARTYPE *)"F4 sos tabf");
  1183.  Define((CHARTYPE *)"F6 ?");
  1184.  Define((CHARTYPE *)"F7 backward");
  1185.  Define((CHARTYPE *)"F8 forward");
  1186.  Define((CHARTYPE *)"F9 =");
  1187.  Define((CHARTYPE *)"F11 spltjoin");
  1188.  Define((CHARTYPE *)"CURD cursor screen down");
  1189.  Define((CHARTYPE *)"CURL cursor screen left");
  1190.  Define((CHARTYPE *)"CURR cursor screen right");
  1191.  Define((CHARTYPE *)"CURU cursor screen up");
  1192. #if defined(UNIX) && !defined(USE_EXTCURSES) && !defined(USE_XCURSES)
  1193.  Define((CHARTYPE *)"C-M sos doprefix execute");
  1194. # if defined(KEY_BTAB)
  1195.  Define((CHARTYPE *)"S-TAB sos tabfieldb");
  1196. # endif
  1197. # if defined(KEY_TAB)
  1198.  Define((CHARTYPE *)"KEY_TAB sos tabfieldf");
  1199. # endif
  1200.  Define((CHARTYPE *)"C-I sos tabfieldf");
  1201. #else
  1202.  Define((CHARTYPE *)"ENTER sos doprefix execute");
  1203.  Define((CHARTYPE *)"S-TAB sos tabfieldb");
  1204.  Define((CHARTYPE *)"TAB sos tabfieldf");
  1205. #endif
  1206. #ifdef TRACE
  1207.  trace_return();
  1208. #endif
  1209.  return(rc);
  1210. }
  1211. /***********************************************************************/
  1212. #ifdef HAVE_PROTO
  1213. short set_KEDIT_defaults(int prey,int prex)
  1214. #else
  1215. short set_KEDIT_defaults(prey,prex)
  1216. int prey,prex;
  1217. #endif
  1218. /***********************************************************************/
  1219. {
  1220. /*------------------------- external data -----------------------------*/
  1221. /*--------------------------- local data ------------------------------*/
  1222.  short rc=RC_OK;
  1223. /*--------------------------- processing ------------------------------*/
  1224. #ifdef TRACE
  1225.  trace_function("default.c: set_KEDIT_defaults");
  1226. #endif
  1227. /*---------------------------------------------------------------------*/
  1228. /* This function is for resetting all default values for KEDIT         */
  1229. /* compatibility mode.                                                 */
  1230. /*---------------------------------------------------------------------*/
  1231.  Define((CHARTYPE *)"F2 sos lineadd");
  1232.  Define((CHARTYPE *)"F3 quit");
  1233.  Define((CHARTYPE *)"F4 sos tab");
  1234.  Define((CHARTYPE *)"F5 sos makecurr");
  1235.  Define((CHARTYPE *)"F6 ?");
  1236.  Define((CHARTYPE *)"F7 ");
  1237.  Define((CHARTYPE *)"F8 dup");
  1238.  Define((CHARTYPE *)"F9 =");
  1239.  Define((CHARTYPE *)"F11 spltjoin");
  1240.  Define((CHARTYPE *)"F12 cursor home");
  1241.  Define((CHARTYPE *)"CURD");
  1242.  Define((CHARTYPE *)"CURL cursor kedit left");
  1243.  Define((CHARTYPE *)"CURR cursor kedit right");
  1244.  Define((CHARTYPE *)"CURU");
  1245. #if defined(UNIX) && !defined(USE_EXTCURSES) && !defined(USE_XCURSES)
  1246.  Define((CHARTYPE *)"C-M");
  1247. # if defined(KEY_TAB)
  1248.  Define((CHARTYPE *)"KEY_TAB");
  1249. # endif
  1250. # if defined(KEY_BTAB)
  1251.  Define((CHARTYPE *)"S-TAB");
  1252. # endif
  1253.  Define((CHARTYPE *)"C-I");
  1254. #else
  1255.  Define((CHARTYPE *)"ENTER");
  1256.  Define((CHARTYPE *)"TAB");
  1257.  Define((CHARTYPE *)"S-TAB");
  1258. #endif
  1259.  
  1260. #ifdef TRACE
  1261.  trace_return();
  1262. #endif
  1263.  return(rc);
  1264. }
  1265.