getfields.c 500 B

1234567891011121314151617181920212223242526272829303132333435
  1. #include "lib9.h"
  2. int
  3. getfields(char *str, char **args, int max, int mflag, char *set)
  4. {
  5. Rune r;
  6. int nr, intok, narg;
  7. if(max <= 0)
  8. return 0;
  9. narg = 0;
  10. args[narg] = str;
  11. if(!mflag)
  12. narg++;
  13. intok = 0;
  14. for(;; str += nr) {
  15. nr = chartorune(&r, str);
  16. if(r == 0)
  17. break;
  18. if(utfrune(set, r)) {
  19. if(narg >= max)
  20. break;
  21. *str = 0;
  22. intok = 0;
  23. args[narg] = str + nr;
  24. if(!mflag)
  25. narg++;
  26. } else {
  27. if(!intok && mflag)
  28. narg++;
  29. intok = 1;
  30. }
  31. }
  32. return narg;
  33. }