rem: insertChunk(WMText *tPtr, void *v, InsertType type)
add: insertChunk(WMText *tPtr, void *v, Bool prepend)
context: insertChunk(WMText *tPtr, void *v, InsertType type){    Chunk *tmp;    Chunk *chunk = (Chunk *)v;    if(!tPtr || !chunk) return;    if(!tPtr->paragraphs) { /* i.e., first chunk via insertTextInteractively */        Paragraph *para = (tPtr->funcs.createParagraph) (0, 0, tPtr->visibleW,                                                         NULL, 0, WALeft);        (tPtr->funcs.insertParagraph) (tPtr, para, itAppend);    }    if(!tPtr->currentPara)        return;    if(!tPtr->currentChunk) { /* there is a current chunk */        tPtr->currentPara->chunks = chunk;    } else if(!tPtr->currentPara->chunks) {        /* but it's not of this paragraph */        tPtr->currentPara->chunks = chunk;    } else {        tmp = tPtr->currentPara->chunks;        if(type == itAppend) {            while(tmp->next && tmp != tPtr->currentChunk)                tmp = tmp->next;            chunk->next = tmp->next;            tmp->next = chunk;        } else { /* must be prepend */            /* this "prior" member is that "doing things the hard way"             I spoke of. See? it's not too bad afterall... */            Chunk *prior = NULL;            while(tmp->next && tmp != tPtr->currentChunk) {                prior = tmp;                tmp = tmp->next;            }            /* if this is the first */            if(tmp == tPtr->currentPara->chunks) {                chunk->next = tmp;                tPtr->currentPara->chunks = chunk;            } else {                prior->next = chunk;                chunk->next = tmp;            } } }    tPtr->currentChunk = chunk;    tPtr->tpos = chunk->chars;}