-
-
- // Leave
- endwin();
- return ret;
-}
-
-/**
- * \brief Show item \a Index at (\a Col, \a Row)
- * \note Part of the NCurses UI
- */
-void ShowItemAt(int Row, int Col, int Width, int Index)
-{
- int _x, _y, times;
- char *name;
- int price;
-
- move( Row, Col );
-
- if( Index < 0 || Index >= giNumItems ) {
- name = "OOR";
- price = 0;
- }
- else {
- name = gaItems[Index].Desc;
- price = gaItems[Index].Price;
- }
-
- printw("%02i %s", Index, name);
-
- getyx(stdscr, _y, _x);
- // Assumes max 4 digit prices
- times = Width - 4 - (_x - Col); // TODO: Better handling for large prices
- while(times--) addch(' ');
- printw("%4i", price);
-}
-
-/**
- * \brief Print a three-part string at the specified position (formatted)
- * \note NCurses UI Helper
- *
- * Prints \a Left on the left of the area, \a Right on the righthand side
- * and \a Mid in the middle of the area. These are padded with \a Pad1
- * between \a Left and \a Mid, and \a Pad2 between \a Mid and \a Right.
- *
- * ::printf style format codes are allowed in \a Left, \a Mid and \a Right,
- * and the arguments to these are read in that order.
- */
-void PrintAlign(int Row, int Col, int Width, const char *Left, char Pad1,
- const char *Mid, char Pad2, const char *Right, ...)
-{
- int lLen, mLen, rLen;
- int times;
-
- va_list args;
-
- // Get the length of the strings
- va_start(args, Right);
- lLen = vsnprintf(NULL, 0, Left, args);
- mLen = vsnprintf(NULL, 0, Mid, args);
- rLen = vsnprintf(NULL, 0, Right, args);
- va_end(args);
-
- // Sanity check
- if( lLen + mLen/2 > Width/2 || mLen/2 + rLen > Width/2 ) {
- return ; // TODO: What to do?
- }
-
- move(Row, Col);
-
- // Render strings
- va_start(args, Right);
- // - Left
- {
- char tmp[lLen+1];
- vsnprintf(tmp, lLen+1, Left, args);
- addstr(tmp);
- }
- // - Left padding
- times = Width/2 - mLen/2 - lLen;
- while(times--) addch(Pad1);
- // - Middle
- {
- char tmp[mLen+1];
- vsnprintf(tmp, mLen+1, Mid, args);
- addstr(tmp);
- }
- // - Right Padding
- times = Width/2 - mLen/2 - rLen;
- while(times--) addch(Pad2);
- // - Right
- {
- char tmp[rLen+1];
- vsnprintf(tmp, rLen+1, Right, args);
- addstr(tmp);
- }
-}
-
-// ---------------------
-// --- Coke Protocol ---
-// ---------------------
-int OpenConnection(const char *Host, int Port)
-{
- struct hostent *host;
- struct sockaddr_in serverAddr;
- int sock;
-
- host = gethostbyname(Host);
- if( !host ) {
- fprintf(stderr, "Unable to look up '%s'\n", Host);
- return -1;
- }
-
- memset(&serverAddr, 0, sizeof(serverAddr));
-
- serverAddr.sin_family = AF_INET; // IPv4
- // NOTE: I have a suspicion that IPv6 will play sillybuggers with this :)
- serverAddr.sin_addr.s_addr = *((unsigned long *) host->h_addr_list[0]);
- serverAddr.sin_port = htons(Port);
-
- sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
- if( sock < 0 ) {
- fprintf(stderr, "Failed to create socket\n");
- return -1;
- }
-
- #if USE_AUTOAUTH