/*
* display.c - functions for controlling the display on the vending machine.
*
+ *
+ * XXX obsolted - with a backend on the server machine, we don't need to
+ * handle scrolling, etc here. Replaced by display_basic.[cho]
+ *
* Use set_msg(char*) to write a new message to the screen, replacing the
* previous one. The message can be at most 255 characters long. Use
* set_wrap_mode with one of the WRAP_* options in vend.h to set the scrolling
u8 msg_length; /* length of current_message */
u8 wrap_mode; /* whether to scroll or alternate between msgs */
u8 scroll_point; /* how far through the message we have scrolled */
+bool have_scrolled; /* true after one scroll (used for scroll_msg())*/
/* private prototypes */
void display_send_byte(char c);
void display_update();
void append_msg(char* newmsg, u8 wrap) {
- char* dest = current_message[msg_length];
+ char* dest = current_message+msg_length;
/* equivalent of a string copy */
while (newmsg) {
dest = newmsg;
display_update();
}
+void scroll_msg(char* newmsg) {
+ /* puts a message on display and does not return until the message has
+ * scrolled across once.
+ */
+ set_msg(newmsg, WRAP_SCROLL);
+ have_scrolled = 0;
+ while (!have_scrolled);
+}
+
void display_shift() {
/* update the display for WRAP_SCROLL or WRAP_ALTERNATE modes */
switch (wrap_mode) {
case WRAP_SCROLL:
case WRAP_ALTERNATE:
scroll_point++;
- if (scroll_point >= msg_length) scroll_point = 0;
+ if (scroll_point >= msg_length) {
+ scroll_point = 0;
+ have_scrolled = 1;
+ }
display_update();
break;
}