slight edit
Code:
#include <acknex.h>
#include <default.c>

int int_logPos;
TEXT* txt_log = {
	layer = 10;
	strings = 10;
	flags = SHOW;
}

void logger(STRING* str){
	
	int i;
	
	if(int_logPos < txt_log.strings){
		str_cpy((txt_log.pstring)[int_logPos], str);
		int_logPos++;
	}else{
		
		for(i = 0; i < txt_log.strings-1; i++){
			str_cpy((txt_log.pstring)[i],(txt_log.pstring)[i+1]);
		}
		
		if(str){
			str_cpy((txt_log.pstring)[txt_log.strings-1],str);
		}else{
			str_cpy((txt_log.pstring)[0],"");
		}
	}
}

#define waiter -0.5
void logger_startup(){
	
	int i;
	for(i = 0; i < txt_log.strings; i++){
		(txt_log.pstring)[i] = str_create("");
	}
	
	wait(waiter);
	logger("THIS");
	wait(waiter);
	logger("IS");
	wait(waiter);
	logger("HOW");
	wait(waiter);
	logger("IT");
	wait(waiter);
	logger("WORKS");
	wait(waiter);
	
	logger("JUST");
	wait(waiter);
	logger("KEEP");
	wait(waiter);
	logger("SENDING");
	wait(waiter);
	logger("logger(\"input\")");
	wait(waiter);
	logger("UNTIL");
	wait(waiter);
	logger("YOU");
	wait(waiter);
	logger("GET");
	wait(waiter);
	logger("BORED");
	wait(waiter);
	logger(":)");
	wait(waiter);
}

will now start from line 1(0), then scroll

for everything else...
Code:
#define chattable skill80
void mouse_rightClick(){
  
  if(mouse_ent){ //if hit entity
    
    if(vec_dist(mouse_ent.x, player.x) < 100){ //if player in range of clicked target
      
      if(mouse_ent.chattable){ //skill set on entity so you can't talk to trees and terrain etc...
      	
      	set(pnl_chatBG, SHOW); //rename for your chat BG
      	logger("Pumpkin Pie sir?);
      	//do however you're handling chat here...
      }
    }
  }
}

void main(){
  //...
  on_mouse_right = mouse_rightClick;
  //...
}

*totally untested*