Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  unescape.c

  Sprache: C
 

/*++
/* NAME
/* unescape 3
/* SUMMARY
/* translate C-like escape sequences
/* SYNOPSIS
/* #include <stringops.h>
/*
/* VSTRING *unescape(result, input)
/* VSTRING *result;
/* const char *input;
/*
/* VSTRING *escape(result, input, len)
/* VSTRING *result;
/* const char *input;
/* ssize_t len;
/* DESCRIPTION
/* unescape() translates C-like escape sequences in the null-terminated
/* string \fIinput\fR and places the result in \fIresult\fR. The result
/* is null-terminated, and is the function result value.
/*
/* escape() does the reverse transformation.
/*
/* Escape sequences and their translations:
/* .IP \ea
/* Bell character.
/* .IP \eb
/* Backspace character.
/* .IP \ef
/* formfeed character.
/* .IP \en
/* newline character
/* .IP \er
/* Carriage-return character.
/* .IP \et
/* Horizontal tab character.
/* .IP \ev
/* Vertical tab character.
/* .IP \e\e
/* Backslash character.
/* .IP \e\fInum\fR
/* 8-bit character whose ASCII value is the 1..3 digit
/* octal number \fInum\fR.
/* .IP \e\fIother\fR
/* The backslash character is discarded.
/* LICENSE
/* .ad
/* .fi
/* The Secure Mailer license must be distributed with this software.
/* AUTHOR(S)
/* Wietse Venema
/* IBM T.J. Watson Research
/* P.O. Box 704
/* Yorktown Heights, NY 10598, USA
/*--*/


/* System library. */

#include <sys_defs.h>
#include <ctype.h>

/* Utility library. */

#include <vstring.h>
#include <stringops.h>

/* unescape - process escape sequences */

VSTRING *unescape(VSTRING *result, const char *data)
{
    int     ch;
    int     oval;
    int     i;

#define UCHAR(cp) ((unsigned char *) (cp))
#define ISOCTAL(ch) (ISDIGIT(ch) && (ch) != '8' && (ch) != '9')

    VSTRING_RESET(result);

    while ((ch = *UCHAR(data++)) != 0) {
 if (ch == '\\') {
     if ((ch = *UCHAR(data++)) == 0)
  break;
     switch (ch) {
     case 'a':    /* \a -> audible bell */
  ch = '\a';
  break;
     case 'b':    /* \b -> backspace */
  ch = '\b';
  break;
     case 'f':    /* \f -> formfeed */
  ch = '\f';
  break;
     case 'n':    /* \n -> newline */
  ch = '\n';
  break;
     case 'r':    /* \r -> carriagereturn */
  ch = '\r';
  break;
     case 't':    /* \t -> horizontal tab */
  ch = '\t';
  break;
     case 'v':    /* \v -> vertical tab */
  ch = '\v';
  break;
     case '0':    /* \nnn -> ASCII value */
     case '1':
     case '2':
     case '3':
     case '4':
     case '5':
     case '6':
     case '7':
  for (oval = ch - '0', i = 0;
       i < 2 && (ch = *UCHAR(data)) != 0 && ISOCTAL(ch);
       i++, data++) {
      oval = (oval << 3) | (ch - '0');
  }
  ch = oval;
  break;
     default:    /* \any -> any */
  break;
     }
 }
 VSTRING_ADDCH(result, ch);
    }
    VSTRING_TERMINATE(result);
    return (result);
}

/* escape - reverse transformation */

VSTRING *escape(VSTRING *result, const char *data, ssize_t len)
{
    int     ch;

    VSTRING_RESET(result);
    while (len-- > 0) {
 ch = *UCHAR(data++);
 if (ISASCII(ch)) {
     if (ISPRINT(ch)) {
  if (ch == '\\')
      VSTRING_ADDCH(result, ch);
  VSTRING_ADDCH(result, ch);
  continue;
     } else if (ch == '\a') {  /* \a -> audible bell */
  vstring_strcat(result, "\\a");
  continue;
     } else if (ch == '\b') {  /* \b -> backspace */
  vstring_strcat(result, "\\b");
  continue;
     } else if (ch == '\f') {  /* \f -> formfeed */
  vstring_strcat(result, "\\f");
  continue;
     } else if (ch == '\n') {  /* \n -> newline */
  vstring_strcat(result, "\\n");
  continue;
     } else if (ch == '\r') {  /* \r -> carriagereturn */
  vstring_strcat(result, "\\r");
  continue;
     } else if (ch == '\t') {  /* \t -> horizontal tab */
  vstring_strcat(result, "\\t");
  continue;
     } else if (ch == '\v') {  /* \v -> vertical tab */
  vstring_strcat(result, "\\v");
  continue;
     }
 }
 vstring_sprintf_append(result, "\\%03o", ch);
    }
    VSTRING_TERMINATE(result);
    return (result);
}

#ifdef TEST

#include <stdlib.h>
#include <string.h>
#include <msg.h>
#include <vstring_vstream.h>

int     main(int argc, char **argv)
{
    VSTRING *in = vstring_alloc(10);
    VSTRING *out = vstring_alloc(10);
    int     un_escape = 1;

    if (argc > 2 || (argc > 1 && (un_escape = strcmp(argv[1], "-e"))) != 0)
 msg_fatal("usage: %s [-e (escape)]", argv[0]);

    if (un_escape) {
 while (vstring_fgets_nonl(in, VSTREAM_IN)) {
     unescape(out, vstring_str(in));
     vstream_fwrite(VSTREAM_OUT, vstring_str(out), VSTRING_LEN(out));
     VSTREAM_PUTC('\n', VSTREAM_OUT);
 }
    } else {
 while (vstring_fgets_nonl(in, VSTREAM_IN)) {
     escape(out, vstring_str(in), VSTRING_LEN(in));
     vstream_fwrite(VSTREAM_OUT, vstring_str(out), VSTRING_LEN(out));
     VSTREAM_PUTC('\n', VSTREAM_OUT);
 }
    }
    vstream_fflush(VSTREAM_OUT);
    exit(0);
}

#endif

Messung V0.5 in Prozent
C=81 H=85 G=82

¤ Dauer der Verarbeitung: 0.12 Sekunden  (vorverarbeitet am  2026-08-09) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=277311
#Domains=752002