Lines Matching refs:pk

35 #include "pk.h"
50 * pk -> line control unit
53 pkcntl(c, pk)
55 struct pack *pk;
73 pk->p_xsize = xpacksize = pksizes[val];
74 pk->p_lpsize = val;
75 pk->p_bits = 1;
76 if (pk->p_state & LIVE) {
77 pk->p_msg |= M_INITC;
80 pk->p_state |= INITb;
81 if ((pk->p_state & INITa)==0) {
84 pk->p_rmsg &= ~M_INITA;
85 pk->p_msg |= M_INITC;
89 if ((pk->p_state&INITab)==INITab) {
90 pk->p_state = LIVE;
91 pk->p_rmsg &= ~M_INITB;
93 pk->p_msg |= M_INITB;
95 pk->p_swindow = val;
98 if (val==0 && pk->p_state&LIVE) {
103 pk->p_state |= INITa;
104 pk->p_msg |= M_INITB;
105 pk->p_rmsg |= M_INITB;
106 pk->p_swindow = val;
110 pk->p_state |= RXMIT;
111 pk->p_msg |= M_RR;
115 pk->p_rpr = val;
116 (void) pksack(pk);
119 pk->p_state = DOWN+RCLOSE;
122 if (pk->p_msg)
123 pkoutput(pk);
129 struct pack *pk;
135 pk = Pk;
141 x = next[pk->p_pr];
142 while ((imask=pk->p_imap) == 0 && pk->p_rcount==0) {
143 pkgetpack(pk);
145 pk->p_imap = 0;
151 t = (~(-1<<pk->p_rwindow)) <<x;
164 if (((cntl=pk->p_is[x])&0200)==0) {
167 bp = (char **)pk->p_ib[x];
168 *bp = (char *)pk->p_ipool;
169 pk->p_ipool = bp;
170 pk->p_is[x] = 0;
174 pk->p_is[x] = (char) ~(B_COPY+B_MARK);
175 sum = (unsigned)chksum(pk->p_ib[x], pk->p_rsize) ^ (unsigned)(cntl&0377);
176 sum += pk->p_isum[x];
180 if (pk->p_is[seq] & (B_COPY | B_MARK)) {
182 pk->p_msg |= M_RR;
187 p = pk->p_ib[x];
188 pk->p_ib[x] = pk->p_ib[seq];
189 pk->p_is[x] = pk->p_is[seq];
190 pk->p_ib[seq] = p;
192 pk->p_is[seq] = B_MARK;
196 pk->p_is[seq] = B_MARK+B_SHORT;
197 p = pk->p_ib[seq];
204 pk->p_isum[seq] = pk->p_rsize - cc;
220 for(x=next[pk->p_pr],t= -1; m & mask[x]; x = next[x]) {
221 if (pk->p_is[x] & B_MARK)
222 pk->p_is[x] |= B_COPY;
224 if (pk->p_is[x] & B_COPY) {
226 bp = (char **)pk->p_ib[x];
227 *bp = (char *)pk->p_ipool;
228 pk->p_ipool = bp;
229 pk->p_is[x] = 0;
238 pk->p_msg |= M_RJ;
242 pk->p_msg |= M_RR;
245 pk->p_rcount = accept;
255 struct pack *pk;
260 pk = Pk;
270 x = next[pk->p_pr];
271 is = pk->p_is[x];
274 cc = MIN(pk->p_isum[x], icount);
279 cp = pk->p_rptr;
281 cp = pk->p_ib[x];
293 pk->p_isum[x] -= cc;
294 if (pk->p_isum[x] == 0) {
295 pk->p_pr = x;
296 bp = (char **)pk->p_ib[x];
297 *bp = (char *)pk->p_ipool;
298 pk->p_ipool = bp;
299 pk->p_is[x] = 0;
300 pk->p_rcount--;
301 pk->p_msg |= M_RR;
303 pk->p_rptr = cp+cc;
304 pk->p_is[x] |= B_RESID;
311 pkoutput(pk);
321 struct pack *pk;
327 pk = Pk;
328 if (pk->p_state&DOWN || !pk->p_state&LIVE) {
334 while (pk->p_xcount>=pk->p_swindow) {
335 pkoutput(pk);
336 pkgetpack(pk);
338 x = next[pk->p_pscopy];
339 while (pk->p_os[x]!=B_NULL) {
340 pkgetpack(pk);
342 pk->p_os[x] = B_MARK;
343 pk->p_pscopy = x;
344 pk->p_xcount++;
346 cp = pk->p_ob[x] = (caddr_t) malloc((unsigned) pk->p_xsize);
348 if ((int)icount < pk->p_xsize) {
350 fc = pk->p_xsize - cc;
359 cc = pk->p_xsize;
363 pk->p_osum[x] = chksum(pk->p_ob[x], pk->p_xsize);
364 pk->p_os[x] = B_READY+partial;
365 pkoutput(pk);
372 pksack(pk)
373 struct pack *pk;
378 for(x=pk->p_ps; x!=pk->p_rpr; ) {
380 if (pk->p_os[x]&B_SENT) {
383 pk->p_os[x] = B_NULL;
384 pk->p_state &= ~WAITO;
385 pk->p_xcount--;
386 free((char *) pk->p_ob[x]);
387 pk->p_ps = x;
395 pkoutput(pk)
396 struct pack *pk;
402 if (pk->p_obusy++) {
403 pk->p_obusy--;
412 if (pk->p_state&RXMIT)
413 pk->p_nxtps = next[pk->p_rpr];
414 x = pk->p_nxtps;
415 bstate = pk->p_os[x];
421 if (pk->p_msg) {
422 if (pk->p_msg & ~M_RR || !(bstate&B_READY) ) {
423 x = pk->p_msg;
436 x += pk->p_pr;
439 x += pksize(pk->p_rsize);
442 x += pk->p_rwindow;
445 x += pk->p_rwindow;
449 pk->p_msg &= ~mask[i];
450 pkxstart(pk, x, -1);
459 if (pk->p_state&DOWN) {
471 pk->p_nxtps = next[x];
473 x = 0200+pk->p_pr+(seq<<3);
476 pkxstart(pk, x, seq);
477 pk->p_os[seq] = bstate;
478 pk->p_state &= ~RXMIT;
479 pk->p_nout++;
487 if (pk->p_xcount) {
488 pk->p_timer = 2;
489 pk->p_state |= WAITO;
491 pk->p_state &= ~WAITO;
493 pk->p_obusy = 0;
504 struct pack *pk;
509 pk = Pk;
510 pk->p_state |= DRAINO;
516 pk->p_timer = 2;
517 while (pk->p_xcount && pk->p_state&LIVE) {
518 if (pk->p_state&(RCLOSE+DOWN) || ++i > 2)
520 pkoutput(pk);
522 pk->p_timer = 0;
523 pk->p_state |= DOWN;
529 while ((pk->p_state&RCLOSE)==0 && i<2) {
530 pk->p_msg = M_CLOSE;
531 pk->p_timer = 2;
532 pkoutput(pk);
541 if (pk->p_os[i]!=B_NULL) {
542 free((char *) pk->p_ob[i]);
543 pk->p_xcount--;
545 if (pk->p_is[i]!=B_NULL) {
546 free((char *) pk->p_ib[i]);
550 while (pk->p_ipool != NULL) {
551 bp = pk->p_ipool;
552 pk->p_ipool = (char **)*bp;
556 if (rcheck != pk->p_rwindow) {
559 free((char *) pk);
564 pkreset(pk)
565 struct pack *pk;
568 pk->p_ps = pk->p_pr = pk->p_rpr = 0;
569 pk->p_nxtps = 1;