Blame view

tools/sctk-2.4.10/src/sclite/pad.c 4.2 KB
8dcb6dfcb   Yannick Estève   first commit
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
  /**********************************************************************/
  /*                                                                    */
  /*             FILENAME:  pad.c                                       */
  /*             BY:  Jonathan G. Fiscus                                */
  /*                  NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY    */
  /*                  SPEECH RECOGNITION GROUP                          */
  /*                                                                    */
  /*           DESC:  This is file contains routines to set 'pad' to    */
  /*                  a certain length.  `pad` is a character array used*/
  /*                  for centering output,  when it's set to a length, */
  /*                  n spaces are written into the array and terminated*/
  /*                  with a NULL_CHAR so when written to output, there */
  /*                  will be n spaces before the next formatted item   */
  /*                                                                    */
  /*              **  These functions make use of a static variable to  */
  /*                  tell the routines how long a single output line   */
  /*                  can be.                                           */
  /*                                                                    */
  /**********************************************************************/
  #include "sctk.h"
  
  static int pad_print_out_width=SCREEN_WIDTH;
  
  /*************************************************************/
  /*    init the utilities to the proper printout dimensions   */
  /*************************************************************/
  void init_pad_util(int pr_width)
  {
     pad_print_out_width = pr_width;
  }
  
  /*************************************************************/
  /*    return the value of the print_out_width                */
  /*************************************************************/
  int pad_pr_width(void)
  {
      return(pad_print_out_width);
  }
  
  /*************************************************************/
  /*     pad manipulating routines                             */
  /*************************************************************/
  /*  set the pad to center the passed in string               */
  void set_pad(char *pad, char *str, int max)
  {
      int i, len;
      
      len = (pad_print_out_width - strlen(str) )/2;
      for (i=0; i<MIN(len, max-1);i++)
          pad[i] = ' ';
      if (i>0)
         pad[i-1] = '\0';
      else
         pad[0] = '\0';
  }
  
  /*************************************************************/
  /*  set the pad to n spaces                                  */
  void set_pad_n(char *pad, int n, int max)
  {
      int i;
  
      for (i=0;i<MIN(n,max-1);i++)
          pad[i]=' ';
      pad[i] = '\0';
  }
  
  /*************************************************************/
  /*  set the pad to center a string of length `len`           */
  void set_pad_cent_n(char *pad, int len, int max)
  {
      int i;
  
      for (i=0;i<MIN(((pad_print_out_width - len) / 2),max-1);i++)
          pad[i]=' '; 
      if (i>0)
         pad[i-1] = '\0';
      else
         pad[0] = '\0';
  }
  
  /************************************************************/
  /* Return a pointer to a string with a centered version of  */
  /* str to len characters                                    */	
  /************************************************************/
  char *center(char *str, int len)
  {
      static char desc[2000], *ptr;
      int il, ft, bk, i;
      if (len >= 2000){
          fprintf(stderr,"Error: center utility in pad.c failed, buffer should be larger than %d
  ",
                         len);
          exit(1);
      }
  
      il = strlen(str);
      ft = (len - il) / 2;
      bk = len - (il+ft);
      ptr=desc;
      for (i=0; i<ft; i++)
          *ptr++ = ' ';
      for (i=0; i<il; i++)
          *ptr++ = str[i];
      for (i=0; i<bk; i++)
          *ptr++ = ' ';
      *ptr = '\0';
      return(desc);
  
  }
  
  /***************************************************************/
  /*  copy the string if the len of from<len, the pad with char  */
  /***************************************************************/
  void strncpy_pad(char *to, char *from, int len, int max, char chr)
  {
      int i;
      for (i=0; i<MIN(len,max-1); i++){
         if (*from != '\0')
            *(to++) = *(from++);
         else
            *(to++) = chr;
      }
      *to = '\0';
  }