diff --git a/Makefile b/Makefile index 0906675..0bccd36 100644 --- a/Makefile +++ b/Makefile @@ -5,13 +5,13 @@ clientobj = $(clientsrc:.c=.o) serversrc = $(wildcard src/misc/*.c) \ src/SilverMUDServer.c serverobj = $(serversrc:.c=.o) -CLIENTLDFLAGS= -lpthread - +CLIENTLDFLAGS= -lpthread -lncurses +SERVERLDFLAGS= -lncurses SilverMUDClient: $(clientobj) gcc -o $@ $^ $(CLIENTLDFLAGS) SilverMUDServer: $(serverobj) - gcc -o $@ $^ + gcc -o $@ $^ $(SERVERLDFLAGS) .PHONY: clean clean: diff --git a/src/SilverMUDClient.c b/src/SilverMUDClient.c index 9972908..6dc243e 100644 --- a/src/SilverMUDClient.c +++ b/src/SilverMUDClient.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include "misc/texteffects.h" @@ -20,8 +21,8 @@ void * messageSender(void * sockfd) while (1) { bzero(sendBuffer, MAX); - printf("COMM-LINK> "); - if(fgets(sendBuffer, MAX, stdin) == NULL) + wprintw(stdscr, "COMM-LINK> "); + if(wgetnstr(stdscr, sendBuffer, MAX) == ERR) { exit(0); } @@ -41,9 +42,9 @@ void * messageReceiver(void * sockfd) while (1) { read((long)sockfd, receiveBuffer, MAX); - slowPrint("\nUSER-MESSAGE: ", 8000); - slowPrint(receiveBuffer, 8000); - slowPrint("\nCOMM-LINK (CONT.)> ", 8000); + slowPrintNcurses("\nUSER-MESSAGE: ", 8000); + slowPrintNcurses(receiveBuffer, 8000); + slowPrintNcurses("\nCOMM-LINK (CONT.)> ", 8000); bzero(receiveBuffer, MAX); } } @@ -53,7 +54,6 @@ int main(int argc, char **argv) int sockfd, connfd; struct sockaddr_in servaddr, cli; pthread_t messagingThread; - // Give me a socket, and make sure it's working: sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd == -1) @@ -89,6 +89,11 @@ int main(int argc, char **argv) { slowPrint("Connected to the Silverkin Industries Comm-Link Server:\nHave a pleasant day.\n", 8000); } + usleep(100000); + + // Setup Ncurses: + initscr(); + scrollok(stdscr, true); // Run a thread to send messages, and use main to recieve. pthread_create(&messagingThread, NULL, messageSender, (void *)(long)sockfd); @@ -96,4 +101,7 @@ int main(int argc, char **argv) // Close the socket. close(sockfd); + + // Unsetup Ncurses: + endwin(); } diff --git a/src/SilverMUDServer.c b/src/SilverMUDServer.c index 0fb1c33..46d213c 100644 --- a/src/SilverMUDServer.c +++ b/src/SilverMUDServer.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include diff --git a/src/misc/texteffects.c b/src/misc/texteffects.c index a1b7afd..0078dc3 100644 --- a/src/misc/texteffects.c +++ b/src/misc/texteffects.c @@ -2,6 +2,7 @@ // Barry Kane, 2021. #include #include +#include void slowPrint(char * stringToPrint, int delay) { @@ -15,3 +16,16 @@ void slowPrint(char * stringToPrint, int delay) characterIndex++; } } + +void slowPrintNcurses(char * stringToPrint, int delay) +{ + int characterIndex = 0; + while(stringToPrint[characterIndex] != '\0') + { + addch(stringToPrint[characterIndex]); + // Refresh the ncurses screen. + refresh(); + usleep(delay); + characterIndex++; + } +} diff --git a/src/misc/texteffects.h b/src/misc/texteffects.h index daa4c7c..6cb6729 100644 --- a/src/misc/texteffects.h +++ b/src/misc/texteffects.h @@ -7,6 +7,9 @@ // A fancy, character by character print. Similar to a serial terminal with lower baud rate. void slowPrint(char * stringToPrint, int delay); +// The same, altered to work with Ncurses. +void slowPrintNcurses(char * stringToPrint, int delay); + // A string containing an ASCII art version of the Silverkin Industries logo. char * logostring = " ///////\n //////////////////////////////////////////\n ///////////////////////////////////////////////////////////\n ////////// ////////////////////////////\n ### # # # # ##### ### # # # # # /////////////////\n ### # # # # ## # # ## # ## # //////////////\n ## # # # # # ### # # # # # # /////////\n #### # ### # ##### # # # # # # ## ///////\n # ## # ##### # # ### ### ### # ##### ### ////// \n # # # # # # # # ## # # # # ## ## ////\n # # # # # # # # ## # ### # # ## //\n # # ### ##### ##### ### # # # # #### ### //\n";