summaryrefslogtreecommitdiff
path: root/support/asc2tex2/string2.c
blob: de3db58ccdb09994243caf6c30a340ffb769010c (plain)
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
/* Module: Strings2 */

#include <string2.h>

void strfill (char *Zeile, int Laenge, char Zeichen)
/* Fllt Zeile mit Laenge Zeichen */
{
  for (; Laenge; Laenge--, Zeile++)
    *Zeile = Zeichen;
  *Zeile = 0;
}


void strdel (char *Zeile)
/* Ein Zeichen (X) wird gelscht. Aufruf: &Zeile[X] */
{
  Zeile++;
  for (;*Zeile; Zeile++)
    *(Zeile - 1) = *Zeile;
  *(Zeile - 1) = 0;
} /* strdel */

void strins (char *Zeile, char Zeichen)
/* Ein Zeichen wird an die Stelle (X) eingefgt.
   Aufruf: &Zeile[X], Zeichen */
{
  char *Hilf = Zeile;

  for (;*Hilf; Hilf++); /* Hilf ans Ende der Zeile setzen */

  for (; (Hilf+1) != Zeile; Hilf--)
    *(Hilf + 1) = *Hilf;
  *Zeile = Zeichen;
} /* strins */

void strextend (char *Zeile, int n)
/* Der String Zeile wird auf "n" Zeichen ohne abschlieendes "\0"
   gestreckt; es werden Leerzeichen angehangen. Ist der String lnger,
   bleibt er dies auch. */
{
  char *Hilf = Zeile;

  for (;*Hilf; Hilf++); /* Hilf ans Ende der Zeile setzen */

  for (; Hilf - Zeile < n; Hilf++)
    *Hilf = ' ';
  *Hilf = '\0';
} /* strextend */

void strcut (char *Zeile)
/* Am Ende der Zeile stehende Leerzeichen werden abgeschnitten */
{
  char *Hilf = Zeile;

  for (;*Hilf; Hilf++); /* Hilf ans Ende der Zeile setzen */

  for (Hilf--;*Hilf == ' ';Hilf--);

  *(Hilf + 1) = '\0';
};


void strrpl ( char *Zeile, char z1, char z2 )
/* In der Zeichenfolge "Zeile" werden alle z1 durch z2 ersetzt */
{
  for ( ; *Zeile; Zeile++ )
  {
    if ( *Zeile == z1 )
      *Zeile = z2;
  };
}; /* strrpl */


char *strchri ( const char *zfolge, char zeichen )
/* Sucht solange rckwrts nach dem Zeichen, bis dieses gefunden wurde.
   Darum !Achtung!, das Zeichen mu vorkommen, Absturzgefahr.
   Ergebnis: Ein Zeiger zu diesem Zeichen */
{
  char *zeiger;

  for ( zeiger = (char *) zfolge; *zeiger == zeichen; zeiger-- );
  return zeiger;
}; /* strchri */


void strsort ( const unsigned char *zfolge, char *erg )
/* Konvertiert den String zfolge in einen sortierfhigen String.
   1. Alle Buchstaben werden in Kleinbuchstaben umgewandelt.
   2. Umlaute verlieren ihre Punkte ( z.B.  --> a )
   3.  --> s
   4. Alle anderen Zeichen werden gestrichen.
   5. erg mu mindestens so gro wie zfolge dimensioniert sein */
{
  int i;

  for ( ; *zfolge; *zfolge++ ) {
    if ( *zfolge >= 'a' && *zfolge <= 'z' ) {
      *erg = *zfolge; erg++; }
    else if ( *zfolge >= 'A' && *zfolge <= 'Z' ) {
      *erg = *zfolge + 32; erg++; }
    else if ( *zfolge == '' || *zfolge == '' ) {
      *erg = 'a'; erg++; }
    else if ( *zfolge == '' || *zfolge == '' ) {
      *erg = 'o'; erg++; }
    else if ( *zfolge == '' || *zfolge == '' ) {
      *erg = 'u'; erg++; }
    else if ( *zfolge == '' ) {
      *erg = 's'; erg++; }
  }; /* for */
  *erg = '\0';
} /* void strsort */