Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include <stdlib.h> /* for calloc, free */
  2. #include "header.h"
  3. extern struct SN_env * SN_create_env(int S_size, int I_size, int B_size)
  4. {
  5. struct SN_env * z = (struct SN_env *) calloc(1, sizeof(struct SN_env));
  6. if (z == NULL) return NULL;
  7. z->p = create_s();
  8. if (z->p == NULL) goto error;
  9. if (S_size)
  10. {
  11. int i;
  12. z->S = (symbol * *) calloc(S_size, sizeof(symbol *));
  13. if (z->S == NULL) goto error;
  14. for (i = 0; i < S_size; i++)
  15. {
  16. z->S[i] = create_s();
  17. if (z->S[i] == NULL) goto error;
  18. }
  19. }
  20. if (I_size)
  21. {
  22. z->I = (int *) calloc(I_size, sizeof(int));
  23. if (z->I == NULL) goto error;
  24. }
  25. if (B_size)
  26. {
  27. z->B = (unsigned char *) calloc(B_size, sizeof(unsigned char));
  28. if (z->B == NULL) goto error;
  29. }
  30. return z;
  31. error:
  32. SN_close_env(z, S_size);
  33. return NULL;
  34. }
  35. extern void SN_close_env(struct SN_env * z, int S_size)
  36. {
  37. if (z == NULL) return;
  38. if (S_size)
  39. {
  40. int i;
  41. for (i = 0; i < S_size; i++)
  42. {
  43. lose_s(z->S[i]);
  44. }
  45. free(z->S);
  46. }
  47. free(z->I);
  48. free(z->B);
  49. if (z->p) lose_s(z->p);
  50. free(z);
  51. }
  52. extern int SN_set_current(struct SN_env * z, int size, const symbol * s)
  53. {
  54. int err = replace_s(z, 0, z->l, size, s, NULL);
  55. z->c = 0;
  56. return err;
  57. }