File: misc.c

package info (click to toggle)
scilab 4.0-12
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 100,640 kB
  • ctags: 57,333
  • sloc: ansic: 377,889; fortran: 242,862; xml: 179,819; tcl: 42,062; sh: 10,593; ml: 9,441; makefile: 4,377; cpp: 1,354; java: 621; csh: 260; yacc: 247; perl: 130; lex: 126; asm: 72; lisp: 30
file content (167 lines) | stat: -rw-r--r-- 4,267 bytes parent folder | download | duplicates (2)
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
/* misc.c */
/* From GNUPLOT - util.c */
/*
 * Copyright (C) 1986 - 1993   Thomas Williams, Colin Kelley
 *
 * Permission to use, copy, and distribute this software and its
 * documentation for any purpose with or without fee is hereby granted, 
 * provided that the above copyright notice appear in all copies and 
 * that both that copyright notice and this permission notice appear 
 * in supporting documentation.
 *
 * Permission to modify the software is granted, but not the right to
 * distribute the modified code.  Modifications are to be distributed 
 * as patches to released version.
 *  
 * This software is provided "as is" without express or implied warranty.
 * 
 *
 * AUTHORS
 *
 *   Original Software:
 *     Thomas Williams,  Colin Kelley.
 *   Gnuplot 2.0 additions:
 *       Russell Lang, Dave Kotz, John Campbell.
 *   Gnuplot 3.0 additions:
 *       Gershon Elber and many others.
 *   Scilab-2.3 : changes for scilab 
 *       (1997) : Jean-Philippe Chancelier 
 */


#include <ctype.h>
#include <setjmp.h>
#include <errno.h>

#include <stdio.h>
#include <stdlib.h>		/* for malloc */
#include <string.h>
#include <math.h>

//#include "plot.h"
#ifndef STRICT
#define STRICT
#endif
/*#include <windows.h>
  #include "wgnuplib.h"*/
#include "wresource.h"
#include "wcommon.h"

#include "Messages.h"
#include "Warnings.h"
#include "Errors.h"

#include "../os_specific/win_mem_alloc.h" /* MALLOC */

extern char input_line[];
extern jmp_buf env;		/* from plot.c */
/****************************************************************
*alloc:
* allocate memory 
* This is a protected version of malloc. It causes an int_error 
* if there is not enough memory. If message is NULL, we 
* allow NULL return. Otherwise, we handle the error, using the
* message to create the int_error string. Note cp/sp_extend uses realloc,
* so it depends on this using malloc().
*****************************************************************/

char * alloc (unsigned long size, char *message)
/* unsigned long size;     # of bytes */
/* char *message;           description of what is being allocated */
{
	char *p;			/* the new allocation */
	char errbuf[100];		/* error message string */
	p = MALLOC ((size_t) size);	/* try again */
	if (p == (char *) NULL)
	{
		/* really out of memory */
		if (message != NULL)
		{
			(void) sprintf (errbuf, MSG_ERROR75, message);
			int_error (errbuf, NO_CARET);
			/* NOTREACHED */
		}
		/* else we return NULL */
	}
	return (p);
}
/******************************************************
 * find char c in string str; return p such that str[p]==c;
 * if c not in str then p=strlen(str)
 *****************************************************/

int instring (char *str, char c)
{
  int pos = 0;
  while (str != NULL && *str != '\0' && c != *str)
    {
      str++;
      pos++;
    }
  return (pos);
}



void 
int_error (char *str, int t_num)
{
  /* reprint line if screen has been written to */
  if (t_num != NO_CARET)
    {				/* put caret under error */
      sciprint ("\n%s%s\n", "-->", input_line);
    }
  sciprint ("\t%s\n\n", str);
  longjmp (env, TRUE);		/* bail out to command line */
}

/********************************************/
/* Lower-case the given string (DFK) */
/* Done in place. */
/********************************************/

void 
lower_case (char *s)
{
  register char *p = s;
  while (*p != '\0')
    {
      if (isupper ((int) *p))
	*p = tolower (*p);
      p++;
    }
}

/********************************************/
/* Squash spaces in the given string (DFK) */
/* That is, reduce all multiple white-space chars to single spaces */
/* Done in place. */
/********************************************/

void 
squash_spaces (char *s)
{
  register char *r = s;		/* reading point */
  register char *w = s;		/* writing point */
  int space = FALSE;		/* TRUE if we've already copied a space */

  for (w = r = s; *r != '\0'; r++)
    {
      if (isspace ((int) *r))
	{
	  /* white space; only copy if we haven't just copied a space */
	  if (!space)
	    {
	      space = TRUE;
	      *w++ = ' ';
	    }			/* else ignore multiple spaces */
	}
      else
	{
	  /* non-space character; copy it and clear flag */
	  *w++ = *r;
	  space = FALSE;
	}
    }
  *w = '\0';			/* null terminate string */
}