subr.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include "rc.h"
  2. #include "exec.h"
  3. #include "io.h"
  4. #include "fns.h"
  5. char*
  6. emalloc(long n)
  7. {
  8. char *p = (char *)Malloc(n);
  9. if(p==0)
  10. panic("Can't malloc %d bytes", n);
  11. /* if(err){ pfmt(err, "malloc %d->%p\n", n, p); flush(err); } /**/
  12. return p;
  13. }
  14. void
  15. efree(char *p)
  16. {
  17. /* pfmt(err, "free %p\n", p); flush(err); /**/
  18. if(p)
  19. free(p);
  20. else pfmt(err, "free 0\n");
  21. }
  22. extern int lastword, lastdol;
  23. void
  24. yyerror(char *m)
  25. {
  26. pfmt(err, "rc: ");
  27. if(runq->cmdfile && !runq->iflag)
  28. pfmt(err, "%s:%d: ", runq->cmdfile, runq->lineno);
  29. else if(runq->cmdfile)
  30. pfmt(err, "%s: ", runq->cmdfile);
  31. else if(!runq->iflag)
  32. pfmt(err, "line %d: ", runq->lineno);
  33. if(tok[0] && tok[0]!='\n')
  34. pfmt(err, "token %q: ", tok);
  35. pfmt(err, "%s\n", m);
  36. flush(err);
  37. lastword = 0;
  38. lastdol = 0;
  39. while(lastc!='\n' && lastc!=EOF) advance();
  40. nerror++;
  41. setvar("status", newword(m, (word *)0));
  42. }
  43. char *bp;
  44. static void
  45. iacvt(int n)
  46. {
  47. if(n<0){
  48. *bp++='-';
  49. n=-n; /* doesn't work for n==-inf */
  50. }
  51. if(n/10)
  52. iacvt(n/10);
  53. *bp++=n%10+'0';
  54. }
  55. void
  56. inttoascii(char *s, long n)
  57. {
  58. bp = s;
  59. iacvt(n);
  60. *bp='\0';
  61. }
  62. void
  63. panic(char *s, int n)
  64. {
  65. pfmt(err, "rc: ");
  66. pfmt(err, s, n);
  67. pchr(err, '\n');
  68. flush(err);
  69. Abort();
  70. }