Ich habe das Herauskommen der neuen lib 2.7.1 zum Anlass und Übung genommen um damit Henks Programm mal als Quellcode nach zu vollziehen.
Code:
#include "asuro.h"

#define MAX 50

#define SPEED	10*reg[0]
#define DIST	10*reg[1]

void readLine(char *cmd, int max) {
	unsigned char len=0;
	char data;

	while(len<max-1) {
		SerRead(&data, 1, 0);
		switch (data){
			case 'k': // end of command sequence but first wait for any asuro key (change)
				StatusLED(YELLOW);
				PollSwitch();
				max=PollSwitch();
				while (PollSwitch()==max); // LOOP
				// FALL THRU
			case 'x': // end of command sequence
				cmd[len++]=data;
				max=len;
				break;
	  		case 'q':  // kills the entire input buffer
				StatusLED(RED);
				len=0;
				break;
			default:
				cmd[len++]=data;
				break;
		}
	}
	cmd[len]=0;
	StatusLED(GREEN);
}

void turtle(void) {
	int reg[]={10, 20};
	unsigned char i, r=0;
	char cmd[MAX];
	
	EncoderInit();
	
	while(1) {
		readLine(cmd, MAX);
		for(i=0; cmd[i]; i++) {
			switch(cmd[i]) {
				case 's': r=0; reg[0]=0; break;
				case 'd': r=1; reg[1]=0; break;
				case '0': case '1': case '2': case '3': case '4':
				case '5': case '6': case '7': case '8': case '9':
					reg[r]=10*reg[r]+cmd[i]-'0';
					break;
				case 'l': Turn( -90, SPEED); break;
				case 'r': Turn(  90, SPEED); break;
				case 'L': Turn( -45, SPEED); break;
				case 'R': Turn(  45, SPEED); break;
				case 'e': Turn(-180, SPEED); break;
				case 'i': Turn( 180, SPEED); break;
				case 'f': Go( DIST, SPEED); break;
				case 'b': Go(-DIST, SPEED); break;
			}
		}
	}
}

int main(void) {
	Init();
	turtle();
	return 0;
}
Ich hoffe, ich habe es damit im Wesentlichen getroffen Henk?