+ case 'b':
+ printf("OK %sblanking display\n", blank ? "" : "un");
+ blank = atoi(args);
+ update_display();
+ break;
+
+ case 'm':
+ if(input[1] == 'c') {
+ printf("OK clock mode\n");
+ mode = MODE_CLOCK;
+ update_display();
+ } else if(input[1] == 'n') {
+ printf("OK number mode\n");
+ mode = MODE_NUM;
+ update_display();
+ } else {
+ printf("ERR invalid mode: '%s'\n", args);
+ }
+ break;
+
+ case 's':
+ sec = 0;
+ if(sscanf(args, "%d:%d.%d", &hr, &min, &sec) < 2) {
+ printf("ERR invalid time string: \"%s\"\n", args);
+ break;
+ }
+ setclock(hr, min, sec);
+ printf("OK clock set\n");
+ if(mode == MODE_CLOCK) {
+ update_display();
+ }
+ break;
+
+ case 'd':
+ if(sscanf(args, "%d/%d/%d", &day, &mon, &year) != 3 || day < 1 || day > 31 ||
+ mon < 1 || mon > 12 || year < 0) {
+ printf("ERR invalid date string: \"%s\"\n", args);
+ break;
+ }
+ if(year < 100) year += 2000;
+ setdate(day, mon, year);
+ printf("OK date set\n");
+ /* TODO */
+ break;
+
+ case 'x':
+ {
+ char *endp;
+ long num = strtol(args, &endp, 16);
+ if(endp == args) {
+ printf("ERR invalid hex number: \"%s\"\n", args);
+ break;
+ }
+ number = num;
+ if(mode == MODE_NUM) {
+ update_display();
+ }
+ }
+ break;
+