view anagram/support/port.cpp @ 17:12171da8943f

Don't refer to CVS.
author David A. Holland
date Tue, 31 May 2022 01:56:37 -0400
parents 13d2b8934445
children
line wrap: on
line source

/*
 * AnaGram, A System for Syntax Directed Programming
 * Copyright 2006 David A. Holland. All rights reserved.
 * See the file COPYING for license and usage terms.
 *
 * port.cpp - portability file
 */

#include <ctype.h>
#include <stdio.h>
#include <stdarg.h>
#include "port.h"

#include "assert.h"

////////////////////////////////////////////////////////////
//
// OS issues
//

#ifdef AG_ON_UNIX

/*
 * This function is standard in most/all DOS compilers and C libraries;
 * I think it originated in Turbo C.
 */
char *strlwr(char *string) {
  for (char *s = string; *s; s++) {
    *s = tolower((unsigned char) *s);
  }
  return string;
}

#endif

////////////////////////////////////////////////////////////
//
// Compiler issues
//

#ifdef __IBMCPP__

/*
 * Obsolete compiler, no snprintf.
 *
 * Ignoring the maximum length is less than desirable but will have to
 * do. This is being used to replace unchecked sprintfs anyway.
 */
int snprintf(char *buf, unsigned maxlen, const char *fmt, ...) {
  va_list ap;
  int ret;

  va_start(ap, fmt);
  ret = vsprintf(buf, fmt, ap);
  va_end(ap);

  /* prevent catastrophe, hopefully */
  assert(ret < 0 || (unsigned)ret < maxlen);

  return ret;
}

#endif /* __IBMCPP__ */