123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #include <lib.h>
- PUBLIC int _callm1(proc, syscallnr, int1, int2, int3, ptr1, ptr2, ptr3)
- int proc; /* FS or MM */
- int syscallnr; /* which system call */
- int int1; /* first integer parameter */
- int int2; /* second integer parameter */
- int int3; /* third integer parameter */
- char *ptr1; /* pointer parameter */
- char *ptr2; /* pointer parameter */
- char *ptr3; /* pointer parameter */
- {
- /* Send a message and get the response. The '_M.m_type' field of the
- * reply contains a value (>= 0) or an error code (<0). Use message format m1.
- */
- _M.m1_i1 = int1;
- _M.m1_i2 = int2;
- _M.m1_i3 = int3;
- _M.m1_p1 = ptr1;
- _M.m1_p2 = ptr2;
- _M.m1_p3 = ptr3;
- return _callx(proc, syscallnr);
- }
- PUBLIC int _callm3(proc, syscallnr, int1, name)
- int proc; /* FS or MM */
- int syscallnr; /* which system call */
- int int1; /* integer parameter */
- _CONST char *name; /* string */
- {
- /* This form of system call is used for those calls that contain at most
- * one integer parameter along with a string. If the string fits in the
- * message, it is copied there. If not, a pointer to it is passed.
- */
- register int k;
- register char *rp;
- k = _len(name);
- _M.m3_i1 = k;
- _M.m3_i2 = int1;
- _M.m3_p1 = (char *) name;
- rp = &_M.m3_ca1[0];
- if (k <= M3_STRING) while (k--)
- *rp++ = *name++;
- return _callx(proc, syscallnr);
- }
- PUBLIC int _callx(proc, syscallnr)
- int proc; /* FS or MM */
- int syscallnr; /* which system call */
- {
- /* Send a message and get the response. The '_M.m_type' field of the
- * reply contains a value (>= 0) or an error code (<0).
- */
- int k;
- _M.m_type = syscallnr;
- k = _sendrec(proc, &_M);
- if (k != 0) return(k); /* _send() itself failed */
- if (_M.m_type < 0) {
- errno = -_M.m_type;
- return(-1);
- }
- return(_M.m_type);
- }
- PUBLIC int _len(s)
- _CONST register char *s; /* character string whose length is needed */
- {
- /* Return the length of a character string, including the 0 at the end. */
- register int k;
- k = 0;
- while (*s++ != 0) k++;
- return(k + 1); /* return length including the 0-byte at end */
- }
|