commit
412e69f85f
9 changed files with 498 additions and 0 deletions
@ -0,0 +1,12 @@ |
|||||||
|
#include <stdio.h> |
||||||
|
#include <stdbool.h> |
||||||
|
|
||||||
|
int main(int argc, char const *argv[]) |
||||||
|
{ |
||||||
|
bool mark[2] = {'X','O'}; |
||||||
|
int test = mark; |
||||||
|
printf("mark: %c", test); |
||||||
|
printf("\nnot-mark: %c", !test); |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
||||||
@ -0,0 +1,123 @@ |
|||||||
|
// System headers
|
||||||
|
#include <windows.h> |
||||||
|
|
||||||
|
// Standard library C-style
|
||||||
|
#include <wchar.h> |
||||||
|
#include <stdlib.h> |
||||||
|
#include <stdio.h> |
||||||
|
#include <stdbool.h> |
||||||
|
#include <conio.h> |
||||||
|
|
||||||
|
#define ESC "\x1b" |
||||||
|
#define CSI "\x1b[" |
||||||
|
|
||||||
|
bool EnableVTMode() |
||||||
|
{ |
||||||
|
// Set output mode to handle virtual terminal sequences
|
||||||
|
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); |
||||||
|
if (hOut == INVALID_HANDLE_VALUE) |
||||||
|
{ |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
DWORD dwMode = 0; |
||||||
|
if (!GetConsoleMode(hOut, &dwMode)) |
||||||
|
{ |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; |
||||||
|
if (!SetConsoleMode(hOut, dwMode)) |
||||||
|
{ |
||||||
|
return false; |
||||||
|
} |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
void gibberish() |
||||||
|
{ |
||||||
|
system("cls"); |
||||||
|
printf(CSI "1;32m"); |
||||||
|
printf("HELLO THERE\n"); |
||||||
|
printf("WHAT IF\n"); |
||||||
|
printf("YOU COULD\n"); |
||||||
|
printf("MOVE THE CURSOR\n"); |
||||||
|
} |
||||||
|
|
||||||
|
int get_key() |
||||||
|
{ |
||||||
|
int c = getch(); |
||||||
|
switch (c) |
||||||
|
{ |
||||||
|
case 0: |
||||||
|
return getch() + 256; |
||||||
|
case 224: |
||||||
|
return getch() + 512; |
||||||
|
} |
||||||
|
return c; |
||||||
|
} |
||||||
|
|
||||||
|
void printGrid() |
||||||
|
{ |
||||||
|
printf("%s", " _ _ _ \n"); |
||||||
|
printf("%s", "|_|_|_|\n"); |
||||||
|
printf("%s", "|_|_|_|\n"); |
||||||
|
printf("%s", "|_|_|_|\n"); |
||||||
|
} |
||||||
|
|
||||||
|
// int main()
|
||||||
|
// {
|
||||||
|
// system("clear");
|
||||||
|
// printf(CSI "1;32m");
|
||||||
|
// printf("HELLO THERE\n");
|
||||||
|
// printf("WHAT IF\n");
|
||||||
|
// printf("YOU COULD\n");
|
||||||
|
// printf("MOVE THE CURSOR\n");
|
||||||
|
// // printf(CSI "2;2H");
|
||||||
|
// printf(CSI "1C");
|
||||||
|
// _getch();
|
||||||
|
// }
|
||||||
|
|
||||||
|
// ┌─┬─┬─┐
|
||||||
|
// │
|
||||||
|
// └─┴─┴─┘
|
||||||
|
|
||||||
|
int main(int argc, char const *argv[]) |
||||||
|
{ |
||||||
|
EnableVTMode(); |
||||||
|
system("clear"); |
||||||
|
// gibberish();
|
||||||
|
printGrid(); |
||||||
|
printf(CSI "2;2H"); |
||||||
|
|
||||||
|
int key = 0; |
||||||
|
for (;;) |
||||||
|
{ |
||||||
|
if (kbhit()) |
||||||
|
{ |
||||||
|
key = get_key(); |
||||||
|
switch (key) |
||||||
|
{ |
||||||
|
case 584: |
||||||
|
printf(CSI "1A"); //up
|
||||||
|
break; |
||||||
|
case 592: |
||||||
|
printf(CSI "1B"); //down
|
||||||
|
break; |
||||||
|
case 589: |
||||||
|
printf(CSI "1C"); //right
|
||||||
|
break; |
||||||
|
case 587: |
||||||
|
printf(CSI "1D"); //left
|
||||||
|
break; |
||||||
|
case 32: |
||||||
|
printf("X"); |
||||||
|
break; |
||||||
|
|
||||||
|
default: |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
||||||
@ -0,0 +1,27 @@ |
|||||||
|
#include <stdio.h> |
||||||
|
|
||||||
|
int main() |
||||||
|
{ |
||||||
|
char ch; |
||||||
|
//infinite loop
|
||||||
|
while(1) |
||||||
|
{ |
||||||
|
printf("Enter any character: "); |
||||||
|
//read a single character
|
||||||
|
ch=fgetc(stdin); |
||||||
|
|
||||||
|
if(ch==0x0A) |
||||||
|
{ |
||||||
|
printf("ENTER KEY is pressed.\n"); |
||||||
|
break; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
printf("%c is pressed.\n",ch); |
||||||
|
} |
||||||
|
//read dummy character to clear
|
||||||
|
//input buffer, which inserts after character input
|
||||||
|
ch=getchar(); |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
||||||
@ -0,0 +1,182 @@ |
|||||||
|
// System headers
|
||||||
|
#include <windows.h> |
||||||
|
|
||||||
|
// Standard library C-style
|
||||||
|
#include <wchar.h> |
||||||
|
#include <stdlib.h> |
||||||
|
#include <stdio.h> |
||||||
|
#include <stdbool.h> |
||||||
|
|
||||||
|
#define ESC "\x1b" |
||||||
|
#define CSI "\x1b[" |
||||||
|
|
||||||
|
bool EnableVTMode() |
||||||
|
{ |
||||||
|
// Set output mode to handle virtual terminal sequences
|
||||||
|
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); |
||||||
|
if (hOut == INVALID_HANDLE_VALUE) |
||||||
|
{ |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
DWORD dwMode = 0; |
||||||
|
if (!GetConsoleMode(hOut, &dwMode)) |
||||||
|
{ |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; |
||||||
|
if (!SetConsoleMode(hOut, dwMode)) |
||||||
|
{ |
||||||
|
return false; |
||||||
|
} |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
void PrintVerticalBorder() |
||||||
|
{ |
||||||
|
printf(ESC "(0"); // Enter Line drawing mode
|
||||||
|
printf(CSI "104;93m"); // bright yellow on bright blue
|
||||||
|
printf("x"); // in line drawing mode, \x78 -> \u2502 "Vertical Bar"
|
||||||
|
printf(CSI "0m"); // restore color
|
||||||
|
printf(ESC "(B"); // exit line drawing mode
|
||||||
|
} |
||||||
|
|
||||||
|
void PrintHorizontalBorder(COORD const Size, bool fIsTop) |
||||||
|
{ |
||||||
|
printf(ESC "(0"); // Enter Line drawing mode
|
||||||
|
printf(CSI "104;93m"); // Make the border bright yellow on bright blue
|
||||||
|
printf(fIsTop ? "l" : "m"); // print left corner
|
||||||
|
|
||||||
|
for (int i = 1; i < Size.X - 1; i++) |
||||||
|
printf("q"); // in line drawing mode, \x71 -> \u2500 "HORIZONTAL SCAN LINE-5"
|
||||||
|
|
||||||
|
printf(fIsTop ? "k" : "j"); // print right corner
|
||||||
|
printf(CSI "0m"); |
||||||
|
printf(ESC "(B"); // exit line drawing mode
|
||||||
|
} |
||||||
|
|
||||||
|
void PrintStatusLine(const char* const pszMessage, COORD const Size) |
||||||
|
{ |
||||||
|
printf(CSI "%d;1H", Size.Y); |
||||||
|
printf(CSI "K"); // clear the line
|
||||||
|
printf(pszMessage); |
||||||
|
} |
||||||
|
|
||||||
|
int __cdecl wmain(int argc, WCHAR* argv[]) |
||||||
|
{ |
||||||
|
argc; // unused
|
||||||
|
argv; // unused
|
||||||
|
//First, enable VT mode
|
||||||
|
bool fSuccess = EnableVTMode(); |
||||||
|
if (!fSuccess) |
||||||
|
{ |
||||||
|
printf("Unable to enter VT processing mode. Quitting.\n"); |
||||||
|
return -1; |
||||||
|
} |
||||||
|
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); |
||||||
|
if (hOut == INVALID_HANDLE_VALUE) |
||||||
|
{ |
||||||
|
printf("Couldn't get the console handle. Quitting.\n"); |
||||||
|
return -1; |
||||||
|
} |
||||||
|
|
||||||
|
CONSOLE_SCREEN_BUFFER_INFO ScreenBufferInfo; |
||||||
|
GetConsoleScreenBufferInfo(hOut, &ScreenBufferInfo); |
||||||
|
COORD Size; |
||||||
|
Size.X = ScreenBufferInfo.srWindow.Right - ScreenBufferInfo.srWindow.Left + 1; |
||||||
|
Size.Y = ScreenBufferInfo.srWindow.Bottom - ScreenBufferInfo.srWindow.Top + 1; |
||||||
|
|
||||||
|
// Enter the alternate buffer
|
||||||
|
printf(CSI "?1049h"); |
||||||
|
|
||||||
|
// Clear screen, tab stops, set, stop at columns 16, 32
|
||||||
|
printf(CSI "1;1H"); |
||||||
|
printf(CSI "2J"); // Clear screen
|
||||||
|
|
||||||
|
int iNumTabStops = 4; // (0, 20, 40, width)
|
||||||
|
printf(CSI "3g"); // clear all tab stops
|
||||||
|
printf(CSI "1;20H"); // Move to column 20
|
||||||
|
printf(ESC "H"); // set a tab stop
|
||||||
|
|
||||||
|
printf(CSI "1;40H"); // Move to column 40
|
||||||
|
printf(ESC "H"); // set a tab stop
|
||||||
|
|
||||||
|
// Set scrolling margins to 3, h-2
|
||||||
|
printf(CSI "3;%dr", Size.Y - 2); |
||||||
|
int iNumLines = Size.Y - 4; |
||||||
|
|
||||||
|
printf(CSI "1;1H"); |
||||||
|
printf(CSI "102;30m"); |
||||||
|
printf("Windows 10 Anniversary Update - VT Example"); |
||||||
|
printf(CSI "0m"); |
||||||
|
|
||||||
|
// Print a top border - Yellow
|
||||||
|
printf(CSI "2;1H"); |
||||||
|
PrintHorizontalBorder(Size, true); |
||||||
|
|
||||||
|
// // Print a bottom border
|
||||||
|
printf(CSI "%d;1H", Size.Y - 1); |
||||||
|
PrintHorizontalBorder(Size, false); |
||||||
|
|
||||||
|
wchar_t wch; |
||||||
|
|
||||||
|
// draw columns
|
||||||
|
printf(CSI "3;1H"); |
||||||
|
int line = 0; |
||||||
|
for (line = 0; line < iNumLines * iNumTabStops; line++) |
||||||
|
{ |
||||||
|
PrintVerticalBorder(); |
||||||
|
if (line + 1 != iNumLines * iNumTabStops) // don't advance to next line if this is the last line
|
||||||
|
printf("\t"); // advance to next tab stop
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
PrintStatusLine("Press any key to see text printed between tab stops.", Size); |
||||||
|
wch = _getwch(); |
||||||
|
|
||||||
|
// Fill columns with output
|
||||||
|
printf(CSI "3;1H"); |
||||||
|
for (line = 0; line < iNumLines; line++) |
||||||
|
{ |
||||||
|
int tab = 0; |
||||||
|
for (tab = 0; tab < iNumTabStops - 1; tab++) |
||||||
|
{ |
||||||
|
PrintVerticalBorder(); |
||||||
|
printf("line=%d", line); |
||||||
|
printf("\t"); // advance to next tab stop
|
||||||
|
} |
||||||
|
PrintVerticalBorder();// print border at right side
|
||||||
|
if (line + 1 != iNumLines) |
||||||
|
printf("\t"); // advance to next tab stop, (on the next line)
|
||||||
|
} |
||||||
|
|
||||||
|
PrintStatusLine("Press any key to demonstrate scroll margins", Size); |
||||||
|
wch = _getwch(); |
||||||
|
|
||||||
|
printf(CSI "3;1H"); |
||||||
|
for (line = 0; line < iNumLines * 2; line++) |
||||||
|
{ |
||||||
|
printf(CSI "K"); // clear the line
|
||||||
|
int tab = 0; |
||||||
|
for (tab = 0; tab < iNumTabStops - 1; tab++) |
||||||
|
{ |
||||||
|
PrintVerticalBorder(); |
||||||
|
printf("line=%d", line); |
||||||
|
printf("\t"); // advance to next tab stop
|
||||||
|
} |
||||||
|
PrintVerticalBorder(); // print border at right side
|
||||||
|
if (line + 1 != iNumLines * 2) |
||||||
|
{ |
||||||
|
printf("\n"); //Advance to next line. If we're at the bottom of the margins, the text will scroll.
|
||||||
|
printf("\r"); //return to first col in buffer
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
PrintStatusLine("Press any key to exit", Size); |
||||||
|
wch = _getwch(); |
||||||
|
|
||||||
|
// Exit the alternate buffer
|
||||||
|
printf(CSI "?1049l"); |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,30 @@ |
|||||||
|
#include <stdio.h> |
||||||
|
#include <conio.h> |
||||||
|
|
||||||
|
int notmain() |
||||||
|
{ |
||||||
|
char c='N'; //N is assigned to c
|
||||||
|
|
||||||
|
for(;;) //infinite loop
|
||||||
|
{ |
||||||
|
printf("%c\t",c); //N is printed over and over
|
||||||
|
if(_kbhit()) //until a key is hit, the keyvalue is stored in the buffer
|
||||||
|
{ |
||||||
|
c=_getch(); //c is fed the value from the buffer. The program does not pause here
|
||||||
|
printf("%c",c); //print the key
|
||||||
|
break; //break the loop
|
||||||
|
} |
||||||
|
} |
||||||
|
_getch(); //yes, the program does pause here.
|
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
int main() |
||||||
|
{ |
||||||
|
/* Display message until key is pressed. */ |
||||||
|
while( !_kbhit() ) |
||||||
|
_cputs( "Hit me!! " ); |
||||||
|
|
||||||
|
/* Use _getch to throw key away. */ |
||||||
|
printf( "\nKey struck was '%c'\n", _getch() ); |
||||||
|
} |
||||||
@ -0,0 +1,45 @@ |
|||||||
|
#include <stdio.h> |
||||||
|
#include <conio.h> |
||||||
|
|
||||||
|
int get_key() |
||||||
|
{ |
||||||
|
int c=getch(); |
||||||
|
switch(c) |
||||||
|
{ |
||||||
|
case 0: return getch()+256; |
||||||
|
case 224: return getch()+512; |
||||||
|
} |
||||||
|
return c; |
||||||
|
} |
||||||
|
|
||||||
|
int main(int argc, char const *argv[]) |
||||||
|
{ |
||||||
|
int key = 0; |
||||||
|
for(;;) |
||||||
|
{ |
||||||
|
if (kbhit()) |
||||||
|
{ |
||||||
|
key = get_key(); |
||||||
|
printf("\n%d", key); |
||||||
|
switch (key) |
||||||
|
{ |
||||||
|
case 584: |
||||||
|
printf("\n↑"); |
||||||
|
break; |
||||||
|
case 592: |
||||||
|
printf("\n↓"); |
||||||
|
break; |
||||||
|
case 587: |
||||||
|
printf("\n←"); |
||||||
|
break; |
||||||
|
case 589: |
||||||
|
printf("\n→"); |
||||||
|
break; |
||||||
|
|
||||||
|
default: |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
||||||
@ -0,0 +1,38 @@ |
|||||||
|
#include <stdio.h> |
||||||
|
|
||||||
|
int charFunctions() |
||||||
|
{ |
||||||
|
char c; |
||||||
|
|
||||||
|
printf("Enter character: "); |
||||||
|
c = getchar(); |
||||||
|
|
||||||
|
printf("Character entered: "); |
||||||
|
if (c == '\n') |
||||||
|
printf("\\n\n"); |
||||||
|
else |
||||||
|
putchar(c); |
||||||
|
printf("\n"); |
||||||
|
|
||||||
|
return (0); |
||||||
|
} |
||||||
|
|
||||||
|
int renderKinda() |
||||||
|
{ |
||||||
|
char ender = 0; |
||||||
|
while (!ender) |
||||||
|
{ |
||||||
|
printf("%s", " _ _ _ \n"); |
||||||
|
printf("%s", "|_|_|_|\n"); |
||||||
|
printf("%s", "|_|_|_|\n"); |
||||||
|
printf("%s", "|_|_|_|\n"); |
||||||
|
printf("press ENTER to exit:"); |
||||||
|
ender = getchar(); |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
int main(int argc, char const *argv[]) |
||||||
|
{ |
||||||
|
return 0; |
||||||
|
} |
||||||
@ -0,0 +1,37 @@ |
|||||||
|
#include <stdio.h> |
||||||
|
#include <wchar.h> |
||||||
|
#include <windows.h> |
||||||
|
|
||||||
|
int main() |
||||||
|
{ |
||||||
|
// Set output mode to handle virtual terminal sequences
|
||||||
|
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); |
||||||
|
if (hOut == INVALID_HANDLE_VALUE) |
||||||
|
{ |
||||||
|
return GetLastError(); |
||||||
|
} |
||||||
|
|
||||||
|
DWORD dwMode = 0; |
||||||
|
if (!GetConsoleMode(hOut, &dwMode)) |
||||||
|
{ |
||||||
|
return GetLastError(); |
||||||
|
} |
||||||
|
|
||||||
|
dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; |
||||||
|
if (!SetConsoleMode(hOut, dwMode)) |
||||||
|
{ |
||||||
|
return GetLastError(); |
||||||
|
} |
||||||
|
|
||||||
|
// Try some Set Graphics Rendition (SGR) terminal escape sequences
|
||||||
|
wprintf(L"\x1b[31mThis text has a red foreground using SGR.31.\r\n"); |
||||||
|
wprintf(L"\x1b[1mThis text has a bright (bold) red foreground using SGR.1 to affect the previous color setting.\r\n"); |
||||||
|
wprintf(L"\x1b[mThis text has returned to default colors using SGR.0 implicitly.\r\n"); |
||||||
|
wprintf(L"\x1b[34;46mThis text shows the foreground and background change at the same time.\r\n"); |
||||||
|
wprintf(L"\x1b[0mThis text has returned to default colors using SGR.0 explicitly.\r\n"); |
||||||
|
wprintf(L"\x1b[31;32;33;34;35;36;101;102;103;104;105;106;107mThis text attempts to apply many colors in the same command. Note the colors are applied from left to right so only the right-most option of foreground cyan (SGR.36) and background bright white (SGR.107) is effective.\r\n"); |
||||||
|
wprintf(L"\x1b[39mThis text has restored the foreground color only.\r\n"); |
||||||
|
wprintf(L"\x1b[49mThis text has restored the background color only.\r\n"); |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
||||||
Loading…
Reference in new issue