fax2modem.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <bio.h>
  4. #include "modem.h"
  5. int
  6. initfaxmodem(Modem *m)
  7. {
  8. m->fax = 1;
  9. m->phase = 'A';
  10. m->valid = 0;
  11. return Eok;
  12. }
  13. static int
  14. parameters(long a[], char *s)
  15. {
  16. char *p;
  17. int i;
  18. i = 0;
  19. if((p = strchr(s, ':')) == 0)
  20. return 0;
  21. p++;
  22. while(s = strchr(p, ',')){
  23. a[i++] = strtol(p, 0, 10);
  24. p = s+1;
  25. }
  26. if(p)
  27. a[i++] = strtol(p, 0, 10);
  28. return i;
  29. }
  30. int
  31. fcon(Modem *m)
  32. {
  33. verbose("fcon: %s", m->response);
  34. if(m->fax == 0 || m->phase != 'A')
  35. return Rrerror;
  36. m->phase = 'B';
  37. return Rcontinue;
  38. }
  39. int
  40. ftsi(Modem *m)
  41. {
  42. char *p, *q;
  43. verbose("ftsi: %s", m->response);
  44. if((p = strchr(m->response, '"')) == 0 || (q = strrchr(p+1, '"')) == 0)
  45. return Rrerror;
  46. while(*++p == ' ')
  47. ;
  48. *q = 0;
  49. if((m->valid & Vftsi) == 0){
  50. strncpy(m->ftsi, p, sizeof(m->ftsi)-1);
  51. m->valid |= Vftsi;
  52. }
  53. return Rcontinue;
  54. }
  55. int
  56. fdcs(Modem *m)
  57. {
  58. verbose("fdcs: %s", m->response);
  59. parameters(m->fdcs, m->response);
  60. m->valid |= Vfdcs;
  61. return Rcontinue;
  62. }
  63. int
  64. fcfr(Modem *m)
  65. {
  66. verbose("fcfr: %s", m->response);
  67. if(m->fax == 0)
  68. return Rrerror;
  69. /* ???? */
  70. return Rcontinue;
  71. }
  72. int
  73. fpts(Modem *m)
  74. {
  75. verbose("fpts: %s", m->response);
  76. if(m->fax == 0)
  77. return Rrerror;
  78. parameters(m->fpts, m->response);
  79. m->valid |= Vfpts;
  80. return Rcontinue;
  81. }
  82. int
  83. fet(Modem *m)
  84. {
  85. char *p;
  86. verbose("fet: %s", m->response);
  87. if(m->fax == 0 || (p = strchr(m->response, ':')) == 0)
  88. return Rrerror;
  89. m->fet = strtol(p+1, 0, 10);
  90. m->valid |= Vfet;
  91. return Rcontinue;
  92. }
  93. int
  94. fhng(Modem *m)
  95. {
  96. char *p;
  97. verbose("fhng: %s", m->response);
  98. if(m->fax == 0 || (p = strchr(m->response, ':')) == 0)
  99. return Rrerror;
  100. m->fhng = strtol(p+1, 0, 10);
  101. m->valid |= Vfhng;
  102. return Rhangup;
  103. }