procinit.c 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include "u.h"
  2. #include "lib.h"
  3. #include "dat.h"
  4. #include "fns.h"
  5. #include "error.h"
  6. Rgrp *thergrp;
  7. void
  8. procinit0(void)
  9. {
  10. Proc *p;
  11. p = newproc();
  12. p->fgrp = dupfgrp(nil);
  13. p->rgrp = newrgrp();
  14. p->pgrp = newpgrp();
  15. _setproc(p);
  16. up->slash = namec("#/", Atodir, 0, 0);
  17. cnameclose(up->slash->name);
  18. up->slash->name = newcname("/");
  19. up->dot = cclone(up->slash);
  20. }
  21. Ref pidref;
  22. Proc*
  23. newproc(void)
  24. {
  25. Proc *p;
  26. p = mallocz(sizeof(Proc), 1);
  27. p->pid = incref(&pidref);
  28. strcpy(p->user, eve);
  29. p->syserrstr = p->errbuf0;
  30. p->errstr = p->errbuf1;
  31. strcpy(p->text, "drawterm");
  32. osnewproc(p);
  33. return p;
  34. }
  35. int
  36. kproc(char *name, void (*fn)(void*), void *arg)
  37. {
  38. Proc *p;
  39. p = newproc();
  40. p->fn = fn;
  41. p->arg = arg;
  42. p->slash = cclone(up->slash);
  43. p->dot = cclone(up->dot);
  44. p->rgrp = up->rgrp;
  45. if(p->rgrp)
  46. incref(&p->rgrp->ref);
  47. p->pgrp = up->pgrp;
  48. if(up->pgrp)
  49. incref(&up->pgrp->ref);
  50. p->fgrp = up->fgrp;
  51. if(p->fgrp)
  52. incref(&p->fgrp->ref);
  53. strecpy(p->text, p->text+sizeof p->text, name);
  54. osproc(p);
  55. return p->pid;
  56. }