- protdescr *ptr;
- procdescr *p;
- word i, tpd, ap, pd, prim, offset;
- char *cp;
- bool cflag, convert;
-
- p = &process[ pix ];
- ptr = prototype[ p->M[ am+PROTNUM ] ];
- cp = (char *) msg->params;
-
- for (i = 0; i < ptr->lthparlist; i++) /* loop through parameters */
- {
-
- offset = M[ ptr->parlist+i ];
- tpd = M[ ptr->pfdescr+i ]; /* type description of param */
- pd = M[ tpd ];
-
- if (par1 == PARIN)
- cflag = ( pd==PARIN || pd==PARINOUT || pd==FORMFUNC || pd==FORMPROC );
- else
- cflag = ( pd==PAROUT || pd==PARINOUT );
-
- if (cflag)
- {
- if (pd == FORMFUNC || pd == FORMPROC)
- {
- ap = APFMPROC;
- convert = TRUE;
- }
- else
- if (M[ M[ tpd+2 ] ] == CLASSTYPE)
- {
- ap = APREF;
- convert = TRUE;
- }
- else
- {
- prim = M[ tpd+2 ]-ipradr;
- ap = primapet[ prim ];
- convert = (prim == 4 || prim == 5); /* process or coroutine */
- }
-
- ap *= sizeof(word); /* param appetite in bytes */
-
- switch (dir) /* copy parameter in right direction */
- {
-
- case LOADPAR :
-
- /* we always load parameters from OUR process */
- assert(pix==thispix);
-
- if (convert){
- procaddr pa;
- {
- word ah=M[am+offset];
- if( !isprocess((virtaddr*)(M+am+offset)) &&
- M[ ah+1 ] == M[ am+offset+1 ]
- )
- if (prototype[ M[ M[ ah ]+PROTNUM ] ]->kind == PROCESS)
- {
- pa.node = ournode;
- pa.pix = pix;
- pa.mark = thisp->mark;
- }
- else
- /*pat errsignal(RTENONGL); */ /* only process may be global */
- /*pat*/ obj2mess(p->M,(virtaddr*)(p->M+am+offset),&pa);
- else
- obj2mess(M,(virtaddr*)(M+am+offset),&pa);
- }
+ protdescr *ptr;
+ procdescr *p;
+ word i, tpd, ap, pd, prim, offset;
+ char *cp;
+ bool cflag, convert;
+
+ p = &process[pix];
+ ptr = prototype[p->M[am + PROTNUM]];
+ cp = (char *) msg->params;
+
+ /* loop through parameters */
+ for (i = 0; i < ptr->lthparlist; i++) {
+
+ offset = M[ptr->parlist + i];
+ /* type description of param */
+ tpd = M[ptr->pfdescr + i];
+ pd = M[tpd];
+
+ if (par1 == PARIN)
+ cflag = (pd == PARIN || pd == PARINOUT || pd == FORMFUNC
+ || pd == FORMPROC);
+ else
+ cflag = (pd == PAROUT || pd == PARINOUT);
+
+ if (cflag) {
+ if (pd == FORMFUNC || pd == FORMPROC) {
+ ap = APFMPROC;
+ convert = TRUE;
+ }
+ else if (M[M[tpd + 2]] == CLASSTYPE) {
+ ap = APREF;
+ convert = TRUE;
+ }
+ else {
+ prim = M[tpd + 2] - ipradr;
+ ap = primapet[prim];
+ /* process or coroutine */
+ convert = (prim == 4 || prim == 5);
+ }
+
+ /* param appetite in bytes */
+ ap *= sizeof(word);
+
+ /* copy parameter in right direction */
+ switch (dir) {
+ case LOADPAR:
+ /* we always load parameters from OUR process */
+ assert(pix == thispix);
+
+ if (convert) {
+ procaddr pa;
+ {
+ word ah = M[am + offset];
+ if (!isprocess((virtaddr*)(M + am + offset)) &&
+ M[ah + 1] == M[am + offset + 1]) {
+ if (prototype[M[M[ah] + PROTNUM]]->kind == PROCESS) {
+ pa.node = ournode;
+ pa.pix = pix;
+ pa.mark = thisp->mark;
+ }
+ else {
+ /* only process may be global */
+ /*pat errsignal(RTENONGL); */
+ /*pat*/ obj2mess(p->M,(virtaddr*)(p->M+am+offset),&pa);
+ }
+ } else
+ obj2mess(M, (virtaddr*)(M + am + offset), &pa);
+ }