ratatoskr-messenger/zwgc/new_string.h

135 lines
3.9 KiB
C

/* This file is part of the Project Athena Zephyr Notification System.
* It is one of the source files comprising zwgc, the Zephyr WindowGram
* client.
*
* Created by: Marc Horowitz <marc@athena.mit.edu>
*
* $Id$
*
* Copyright (c) 1989 by the Massachusetts Institute of Technology.
* For copying and distribution information, see the file
* "mit-copyright.h".
*/
#ifndef string_TYPE
#define string_TYPE
#include <string.h>
#include "new_memory.h"
typedef char *string;
/*
* int string_Length(string s):
* Effects: Returns the number of non-null characters in s.
*/
#define string_Length(s) strlen(s)
/*
* int string_Eq(string a, b):
* Effects: Returns true iff strings a & b are equal. I.e., have the
* same character contents.
*/
#define string_Eq(a,b) (!strcmp(a,b))
/*
* int string_Neq(string a, b):
* Effects: Returns true iff strings a & b are not equal.
*/
#define string_Neq(a,b) (strcmp(a,b))
/*
* string string_CreateFromData(char *data, int length):
* Requires: data[0], data[1], ..., data[length-1] != 0
* Effects: Takes the first length characters at data and
* creates a string containing them. The returned string
* is on the heap & must be freed eventually.
* I.e., if passed "foobar" and 3, it would return
* string_Copy("foo").
*/
extern string string__CreateFromData(char *, int);
#ifdef DEBUG_MEMORY
#define string_CreateFromData(data,length) (set_module(__FILE__,__LINE__),\
string__CreateFromData(data,length))
#else
#define string_CreateFromData(data,length) string__CreateFromData(data,length)
#endif
/*
* string string_Copy(string s):
* Effects: Returns a copy of s on the heap. The copy must be
* freed eventually.
*/
extern string string__Copy(string);
#ifdef DEBUG_MEMORY
#define string_Copy(data) (set_module(__FILE__,__LINE__),\
string__Copy(data))
#else
#define string_Copy(data) string__Copy(data)
#endif
/*
* string string_Concat(string a, b):
* Effects: Returns a string equal to a concatenated to b.
* The returned string is on the heap and must be
* freed eventually. I.e., given "abc" and "def",
* returns string_Copy("abcdef").
*/
extern string string__Concat(string, string);
#ifdef DEBUG_MEMORY
#define string_Concat(a,b) (set_module(__FILE__,__LINE__),\
string__Concat(a,b))
#else
#define string_Concat(a,b) string__Concat(a,b)
#endif
/*
* string string_Concat2(string a, b):
* Modifies: a
* Requires: a is on the heap, b does not point into a.
* Effects: Equivalent to:
* string temp;
* temp = string_Concat(a,b);
* free(a);
* return(temp);
* only faster. I.e., uses realloc instead of malloc+bcopy.
*/
extern string string__Concat2(string, string);
#ifdef DEBUG_MEMORY
#define string_Concat2(a,b) (set_module(__FILE__,__LINE__),\
string__Concat2(a,b))
#else
#define string_Concat2(a,b) string__Concat2(a,b)
#endif
/*
* string string_Downcase(string s):
* Modifies: s
* Effects: Modifies s by changing every uppercase character in s
* to the corresponding lowercase character. Nothing else
* is changed. I.e., "FoObAr19." is changed to "foobar19.".
* S is returned as a convenience.
*/
extern string string_Downcase(string);
/*
* string string_Upcase(string s):
* Modifies: s
* Effects: Modifies s by changing every lowercase character in s
* to the corresponding uppercase character. Nothing else
* is changed. I.e., "FoObAr19." is changed to "FOOBAR19.".
* S is returned as a convenience.
*/
extern string string_Upcase(string);
#endif