subr.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "rc.h"
  2. #include "exec.h"
  3. #include "io.h"
  4. #include "fns.h"
  5. void *
  6. emalloc(long n)
  7. {
  8. void *p = 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(void *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. }