home *** CD-ROM | disk | FTP | other *** search
- /***
- Stringroutinen
- (c) 1991 Elmar Warken
- ***/
-
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "interp.h"
-
- /* Benötigte Globalvariablen */
- extern PRGZEILE *FirstLine; /* erste Interpreterzeile */
- extern PRGZEILE *ActLine; /* aktuelle interpretierte Zeile */
- extern char *LinePos; /* Zeilenposition der aktuellen Zeile*/
- extern int Steuer; /* der aufrufenden Routine wird mit- */
- extern VAR *FirstVar; /* Zeiger auf die erste Variable */
- /* geteilt, um was es sich handelt. */
- extern char ScanBuffer[ZEILENLAENGE]; /* Ergebnisbuffer des Scanners */
-
- /** String setzen, Fehlermeldung, wenn zu lang **/
- int SetVarStr(char *name,char *str)
- {
- VAR *Variable;
-
- if ((Variable = IsVariable (name)) == NULL)
- {
- DefVarStr(name,80);
- Variable = IsVariable (name);
- }
- if (Variable->VarType==STRING)
- {
- if (Variable->VarWert.dim1 >= strlen(str))
- strcpy (Variable->VarWert.variable.text,str);
- else {
- serror("Zugewiesener String zu lang! ");
- return(FALSE);
- }
- }
- else {
- serror("Falscher Variablentyp ! ");
- return(FALSE);
- }
- return(OK);
- }
-
- /** String setzen, str wird abgeschnitten,
- wenn zu wenig Speicher reserviert ist. **/
- int SetVarStr2(char *name,char *str)
- {
- VAR *Variable;
-
- if ((Variable = IsVariable (name)) == NULL)
- {
- DefVarStr(name,80);
- Variable = IsVariable (name);
- }
- if (Variable->VarType==STRING)
- strncpy (Variable->VarWert.variable.text,str,Variable->VarWert.dim1);
- else {
- serror("Falscher Variablentyp! ");
- return(FALSE);
- }
- return(OK);
- }
-
- int DefVarStr (char *name, int size)
- {
- VAR *Variable;
-
- if ((Variable = IsVariable (name)) != NULL) {
- if (Variable->VarType==STRING)
- {
- free(Variable->VarWert.variable.text);
- Variable->VarWert.dim1 = size;
- if ((Variable->VarWert.variable.text=malloc(size+1))==NULL) {
- printf ("\n Kein Speicherplatz mehr für den String! ");
- return(FALSE);
- }
- return(OK);
- }
- else {
- serror(" Falscher Typ für Stringlängenänderung! ");
- return(FALSE);
- }
- }
- else if ((Variable = malloc(sizeof (VAR))) == NULL) {
- printf ("\n Kein Speicherplatz mehr für die Variable! ");
- return(FALSE);
- }
-
- if ((Variable->VarWert.variable.text=malloc(size+1))==NULL) {
- printf ("\n Kein Speicherplatz mehr für den String! ");
- return(FALSE);
- }
- strcpy (Variable->VarName,name);
- Variable->VarType = STRING;
- Variable->NextVar = FirstVar;
- Variable->VarWert.dim1 = size;
- FirstVar = Variable;
- return(OK);
- }
-
- /* cstrset() Zuweisen eines Strings einer Variablen */
- int cstrset(void)
- {
- char VarName[50];
- char *str;
-
- Scan();
- if (Steuer == ALPHA) {
- strcpy (VarName,ScanBuffer);
- Scan ();
- if ((Steuer == SONDER) && (*ScanBuffer == '=')) {
- if (GetStringParam(&str))
- SetVarStr(VarName,str);
- else serror ("String(variable) erwartet! ");
- } else serror ("Zuweisung erwartet! ");
- } else serror ("Variablenname erwartet! ");
-
- return (OK);
- }
-
- /* cstrdef() Speicherplatzreservierung für einen String
- opt. Parameter : Zeichenzahl, default : 300 */
-
- int cstrdef(void)
- {
- char VarName[50];
- int size;
-
- Scan();
- if (Steuer == ALPHA) {
- strcpy (VarName,ScanBuffer);
- Scan();
- if (Steuer==ZIFFER)
- size=atoi(ScanBuffer);
- else size=300;
- DefVarStr (VarName,size);
- } else serror("Variablenname erwartet! ");
-
- return(OK);
- }
-
- /* cstrtoi() String wird in Integer/Long (Flotype) umgewandelt.
- Syntax : strtoi STRVAR INTVAR */
-
- int cstrtoi(void)
- {
- char *s,str[20];
- long *val;
-
- if (GetStringParam(&s) && strcpy(str,s) &&
- GetNumbVarParam(&val))
- {
- *val=atol(str);
- return(OK);
- }
- serror(" bei 'strtoi' !" );
- return(FALSE);
- }
-
- /* citostr() Long (Flotype) in string umwandeln
- Syntax : itostr INTVAR STRVAR */
-
- int citostr(void)
- {
- char *str;
- long val;
- char help[10];
-
- if (GetIntegerParam(&val) &&
- GetVarNameParam(&str) )
- {
- ltoa(val,help,10);
- if (SetVarStr2(str,help))
- return(OK);
- }
- serror(" bei 'itostr' !" );
- return(FALSE);
-
- }
-
- int creadln(void)
- {
- char VarName[50],eingabe[300];
-
- Scan();
- if (Steuer == ALPHA) {
- strcpy (VarName,ScanBuffer);
- gets(eingabe);
-
- /*** ohne Längenüberprüfung: ***/
-
- SetVarStr(VarName,eingabe);
- } else serror ("Variablenname erwartet! ");
-
- return (OK);
- }
-