home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume9 / xterm / part07 / tabs.c < prev    next >
Encoding:
C/C++ Source or Header  |  1987-04-21  |  1.5 KB  |  95 lines

  1. /*
  2.  *    $Source: /u1/X/xterm/RCS/tabs.c,v $
  3.  *    $Header: tabs.c,v 10.100 86/12/01 14:45:38 jg Rel $
  4.  */
  5.  
  6. #ifndef lint
  7. static char *rcsid_tabs_c = "$Header: tabs.c,v 10.100 86/12/01 14:45:38 jg Rel $";
  8. #endif    lint
  9.  
  10. #include <X/mit-copyright.h>
  11.  
  12. /* Copyright    Massachusetts Institute of Technology    1984    */
  13.  
  14. /* tabs.c */
  15.  
  16. #ifndef lint
  17. /* @(#)tabs.c       X10/6.6B 12/26/86 */
  18. #endif    lint
  19.  
  20. #include <X/Xlib.h>
  21. #include "scrollbar.h"
  22. #include "ptyx.h"
  23. /*
  24.  * This file presumes 32bits/word.  This is somewhat of a crock, and should
  25.  * be fixed sometime.
  26.  */
  27.  
  28. /*
  29.  * places tabstops at only every 8 columns
  30.  */
  31. TabReset(tabs)
  32. Tabs    tabs;
  33. {
  34.     register int i;
  35.  
  36.     for (i=0; i<TAB_ARRAY_SIZE; ++i)
  37.         tabs[i] = 0;
  38.  
  39.     for (i=0; i<MAX_TABS; i+=8)
  40.         TabSet(tabs, i);
  41. }    
  42.  
  43.  
  44. /*
  45.  * places a tabstop at col
  46.  */
  47. TabSet(tabs, col)
  48. Tabs    tabs;
  49. {
  50.     tabs[col >> 5] |= (1 << (col & 31));
  51. }
  52.  
  53. /*
  54.  * clears a tabstop at col
  55.  */
  56. TabClear(tabs, col)
  57. Tabs    tabs;
  58. {
  59.     tabs[col >> 5] &= ~(1 << (col & 31));
  60. }
  61.  
  62. /*
  63.  * returns the column of the next tabstop
  64.  * (or MAX_TABS - 1 if there are no more).
  65.  * A tabstop at col is ignored.
  66.  */
  67. TabNext (tabs, col)
  68. Tabs    tabs;
  69. {
  70.     extern Terminal term;
  71.     register Screen *screen = &term.screen;
  72.  
  73.     if(screen->curses && screen->do_wrap && (term.flags & WRAPAROUND)) {
  74.         Index(screen, 1);
  75.         col = screen->cur_col = screen->do_wrap = 0;
  76.     }
  77.     for (++col; col<MAX_TABS; ++col)
  78.         if (tabs[col >> 5] & (1 << (col & 31)))
  79.             return (col);
  80.  
  81.     return (MAX_TABS - 1);
  82. }
  83.  
  84. /*
  85.  * clears all tabs
  86.  */
  87. TabZonk (tabs)
  88. Tabs    tabs;
  89. {
  90.     register int i;
  91.  
  92.     for (i=0; i<TAB_ARRAY_SIZE; ++i)
  93.         tabs[i] = 0;
  94. }
  95.