[BACK]Return to term_tab.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/term_tab.c between version 1.6 and 1.7

version 1.6, 2020/06/22 19:20:40 version 1.7, 2021/10/04 18:56:31
Line 1 
Line 1 
 /* $Id$ */  /* $Id$ */
 /*  /*
  * Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2017, 2021 Ingo Schwarze <schwarze@openbsd.org>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above   * purpose with or without fee is hereby granted, provided that the above
Line 19 
Line 19 
 #include <sys/types.h>  #include <sys/types.h>
   
 #include <stddef.h>  #include <stddef.h>
   #include <stdlib.h>
   #include <string.h>
   
 #include "mandoc_aux.h"  #include "mandoc_aux.h"
 #include "out.h"  #include "out.h"
Line 33  struct tablist {
Line 35  struct tablist {
 static struct {  static struct {
         struct tablist   a;     /* All tab positions for lookup. */          struct tablist   a;     /* All tab positions for lookup. */
         struct tablist   p;     /* Periodic tab positions to add. */          struct tablist   p;     /* Periodic tab positions to add. */
           struct tablist  *r;     /* Tablist currently being recorded. */
         size_t           d;     /* Default tab width in units of n. */          size_t           d;     /* Default tab width in units of n. */
 } tabs;  } tabs;
   
Line 40  static struct {
Line 43  static struct {
 void  void
 term_tab_set(const struct termp *p, const char *arg)  term_tab_set(const struct termp *p, const char *arg)
 {  {
         static int       recording_period;  
   
         struct roffsu    su;          struct roffsu    su;
         struct tablist  *tl;          struct tablist  *tl;
         size_t           pos;          size_t           pos;
Line 51  term_tab_set(const struct termp *p, const char *arg)
Line 52  term_tab_set(const struct termp *p, const char *arg)
   
         if (arg == NULL) {          if (arg == NULL) {
                 tabs.a.n = tabs.p.n = 0;                  tabs.a.n = tabs.p.n = 0;
                 recording_period = 0;                  tabs.r = &tabs.a;
                 if (tabs.d == 0) {                  if (tabs.d == 0) {
                         a2roffsu(".8i", &su, SCALE_IN);                          a2roffsu(".8i", &su, SCALE_IN);
                         tabs.d = term_hen(p, &su);                          tabs.d = term_hen(p, &su);
Line 59  term_tab_set(const struct termp *p, const char *arg)
Line 60  term_tab_set(const struct termp *p, const char *arg)
                 return;                  return;
         }          }
         if (arg[0] == 'T' && arg[1] == '\0') {          if (arg[0] == 'T' && arg[1] == '\0') {
                 recording_period = 1;                  tabs.r = &tabs.p;
                 return;                  return;
         }          }
   
Line 75  term_tab_set(const struct termp *p, const char *arg)
Line 76  term_tab_set(const struct termp *p, const char *arg)
   
         /* Select the list, and extend it if it is full. */          /* Select the list, and extend it if it is full. */
   
         tl = recording_period ? &tabs.p : &tabs.a;          tl = tabs.r;
         if (tl->n >= tl->s) {          if (tl->n >= tl->s) {
                 tl->s += 8;                  tl->s += 8;
                 tl->t = mandoc_reallocarray(tl->t, tl->s, sizeof(*tl->t));                  tl->t = mandoc_reallocarray(tl->t, tl->s, sizeof(*tl->t));
Line 127  term_tab_next(size_t prev)
Line 128  term_tab_next(size_t prev)
                 if (prev < tabs.a.t[i])                  if (prev < tabs.a.t[i])
                         return tabs.a.t[i];                          return tabs.a.t[i];
         }          }
   }
   
   void
   term_tab_free(void)
   {
           free(tabs.a.t);
           free(tabs.p.t);
           memset(&tabs, 0, sizeof(tabs));
           tabs.r = &tabs.a;
 }  }

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.7

CVSweb