; Fill a packet to the maximum. Result goes in global data array (GDA), ; whose current length is indicated in A ; getpkt: mov dptr,#param + P_maxl movx a,@dptr mov r5,a ; r5 has maxlen mov p2,#high GDA ; global data array mov r0,#0 ; size ; copy any leftovers that didn't fit in the last packet mov dptr,#remain gpkt1: movx a,@dptr ; get a char from remain buffer jz gpkt2 ; all done movx @r0,a ; put in gda clr a movx @dptr,a ; clear remain buffer inc dptr inc r0 ; size++ sjmp gpkt1 ; get, encode and deposit the next character gpkt2: call fread ; get a character jc gpkt9 ; all done mov r3,0 ; osize = size call encode ; kermitize mov a,r0 ; get size cjne a,5,gpkt3 ; = maxlen ? sjmp gpkt9 ; yes, return gpkt3: jc gpkt2 ; if size < maxlen continue mov dptr,#remain mov r0,3 ; size = osize gpkt4: movx a,@r0 ; get char from gda jz gpkt5 ; done inc r0 ; osize++ movx @dptr,a ; put in remain buffer inc dptr sjmp gpkt4 gpkt5: mov r0,3 ; size = osize clr a movx @r0,a ; terminate gda gpkt9: clr runlite mov a,r0 ; return size ret ;