Skip to content

Commit b8a23c5

Browse files
committed
dev update
1 parent 45bbf15 commit b8a23c5

File tree

8 files changed

+146
-369
lines changed

8 files changed

+146
-369
lines changed

makefile

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,13 @@ _test: _build
88
$(CC) -o test/test.exe build/ascii.o test/test.c
99
./test/test.exe
1010

11-
table:
11+
renderer:
1212
$(CXX) -shared -o build/renderer.dll src/renderer.cpp
13-
$(CC) -o build/table.o -c src/table.c
1413

15-
_build: clean table
14+
_build: clean renderer
1615
if [ ! -d build ]; then mkdir build; fi
1716
$(CC) -o build/ascii.o -c src/ascii.c
18-
$(CC) -o build/ascii.exe build/ascii.o build/table.o src/main.c -Lbuild -lrenderer
17+
$(CC) -o build/ascii.exe build/ascii.o src/main.c -Lbuild -lrenderer
1918

2019
clean:
2120
rm -rf build/*.o

src/ascii.c

Lines changed: 45 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
* @param _hexadecimal char* (string)
88
* @return uint8_t
99
*/
10-
uint8_t isHex( char* _hexadecimal ){
11-
return strlen(_hexadecimal) >= 3 && _hexadecimal[0]=='0' && (_hexadecimal[1]=='x'||_hexadecimal[1]=='X');
10+
uint8_t isHex( wchar_t* _hexadecimal ){
11+
return wcslen(_hexadecimal) >= 3 && _hexadecimal[0]==L'0' && (_hexadecimal[1]==L'x'||_hexadecimal[1]==L'X');
1212
}
1313

1414
/**
@@ -18,10 +18,10 @@ uint8_t isHex( char* _hexadecimal ){
1818
* @param _octal char* (string)
1919
* @return uint8_t
2020
*/
21-
uint8_t isOct( char* _octal ){
22-
if(strlen(_octal) <= 1 || _octal[strlen(_octal)-1] != 'o') return 0;
21+
uint8_t isOct( wchar_t* _octal ){
22+
if(wcslen(_octal) <= 1 || _octal[wcslen(_octal)-1] != L'o') return 0;
2323

24-
for(uint8_t i = 0; i < strlen(_octal)-1; i++){
24+
for(uint8_t i = 0; i < wcslen(_octal)-1; i++){
2525
if(!(_octal[i] >= 48 && _octal[i] <= 55)) return 0;
2626
}
2727

@@ -35,10 +35,10 @@ uint8_t isOct( char* _octal ){
3535
* @param _binary char* (string)
3636
* @return uint8_t
3737
*/
38-
uint8_t isBin( char* _binary ){
39-
if(strlen(_binary) <= 1 || _binary[strlen(_binary)-1] != 'b') return 0;
38+
uint8_t isBin( wchar_t* _binary ){
39+
if(wcslen(_binary) <= 1 || _binary[wcslen(_binary)-1] != L'b') return 0;
4040

41-
for(uint8_t i = 0; i < strlen(_binary)-1; i++){
41+
for(uint8_t i = 0; i < wcslen(_binary)-1; i++){
4242
if(!(_binary[i] == 48 || _binary[i] == 49)) return 0;
4343
}
4444

@@ -52,10 +52,10 @@ uint8_t isBin( char* _binary ){
5252
* @param _binary char* (string)
5353
* @return uint8_t
5454
*/
55-
uint8_t isDec( char* _decimal ){
56-
if(strlen(_decimal) <= 1 || _decimal[strlen(_decimal)-1] != 'd') return 0;
55+
uint8_t isDec( wchar_t* _decimal ){
56+
if(wcslen(_decimal) <= 1 || _decimal[wcslen(_decimal)-1] != L'd') return 0;
5757

58-
for(uint8_t i = 0; i < strlen(_decimal)-1; i++){
58+
for(uint8_t i = 0; i < wcslen(_decimal)-1; i++){
5959
if(!(_decimal[i] >= 48 && _decimal[i] <= 57)) return 0;
6060
}
6161

@@ -70,7 +70,7 @@ uint8_t isDec( char* _decimal ){
7070
* @param args char** (string[])
7171
* @return asciiParams
7272
*/
73-
asciiParams parseParameter(int argv, char** args){
73+
asciiParams parseParameter(int argv, wchar_t** args){
7474
asciiParams params = {0};
7575
if(argv <= 1){
7676
params.order = 1;
@@ -79,44 +79,43 @@ asciiParams parseParameter(int argv, char** args){
7979

8080
for(uint8_t i = 1; i < argv; i++){
8181

82-
if(!(strlen(args[i]) >= 2 && args[i][0] == '-' && args[i][1] == '-')){
82+
if(!(wcslen(args[i]) >= 2 && args[i][0] == L'-' && args[i][1] == L'-')){
8383

8484
uint8_t base = 0;
8585
if( (base = isHex(args[i])) || (base = isOct(args[i])) || (base = isBin( args[i])) || (base = isDec( args[i])) ){
86-
uint8_t number = (uint8_t) strtol(args[i],NULL,isHex(args[i])?0:base);
86+
wchar_t number = (wchar_t) wcstol(args[i],NULL,isHex(args[i])?0:base);
8787

8888
free(args[i]);
89-
args[i] = (uint8_t*) calloc(2,sizeof(uint8_t));
89+
args[i] = (wchar_t*) calloc(2,sizeof(wchar_t));
9090

9191
args[i][0] = number;
92-
args[i][1] = '\0';
92+
args[i][1] = L'\0';
9393
params.contentSize++;
94-
}else params.contentSize += strlen(args[i]);
94+
}else params.contentSize += wcslen(args[i]);
95+
96+
if(params.content == NULL) params.content = (wchar_t*)args[i];
97+
else wcscat(params.content,(wchar_t*) args[i]);
9598

96-
if(params.content == NULL) params.content = (uint8_t*)args[i];
97-
else strcat(params.content,(uint8_t*) args[i]);
98-
9999
continue;
100100
}
101101

102-
if (strcmp(args[i],"--all") == 0) params.showAll = 128;
103-
else if(strcmp(args[i],"--digits") == 0) params.showAllDigits = 10;
104-
else if(strcmp(args[i],"--alphas") == 0) params.showAllAlphas = 52;
105-
106-
else if(strcmp(args[i],"--controls") == 0) params.showControlChars = 33;
107-
else if(strcmp(args[i],"--specials") == 0) params.showSpecialChars = 33;
102+
if (wcscmp(args[i],L"--all") == 0) params.showAll = 128;
103+
else if(wcscmp(args[i],L"--digits") == 0) params.showAllDigits = 10;
104+
else if(wcscmp(args[i],L"--alphas") == 0) params.showAllAlphas = 52;
108105

109-
else if(strcmp(args[i],"--octa") == 0) params.onlyOct = true;
110-
else if(strcmp(args[i],"--dec") == 0) params.onlyDec = true;
111-
else if(strcmp(args[i],"--hex") == 0) params.onlyHex = true;
112-
else if(strcmp(args[i],"--bin") == 0) params.onlyBin = true;
113-
// else if(strcmp(args[i],"--char") == 0) params.onlyChar = true;
106+
else if(wcscmp(args[i],L"--controls") == 0) params.showControlChars = 33;
107+
else if(wcscmp(args[i],L"--specials") == 0) params.showSpecialChars = 33;
114108

115-
else if(strcmp(args[i],"--asc")==0) params.order = 1;
116-
else if(strcmp(args[i],"--desc")==0) params.order = 2;
109+
else if(wcscmp(args[i],L"--octa") == 0) params.onlyOct = true;
110+
else if(wcscmp(args[i],L"--dec") == 0) params.onlyDec = true;
111+
else if(wcscmp(args[i],L"--hex") == 0) params.onlyHex = true;
112+
else if(wcscmp(args[i],L"--bin") == 0) params.onlyBin = true;
113+
// else if(wcscmp(args[i],L"--char") == 0) params.onlyChar = true;
117114

118-
else if(strcmp(args[i],"--vt100")==0) params.color = true;
115+
else if(wcscmp(args[i],L"--asc")==0) params.order = 1;
116+
else if(wcscmp(args[i],L"--desc")==0) params.order = 2;
119117

118+
else if(wcscmp(args[i],L"--vt100")==0) params.color = true;
120119
}
121120

122121
params.onlyChar = 1; //hardcoded;
@@ -140,9 +139,11 @@ asciiParams parseParameter(int argv, char** args){
140139
* @param params asciiParams*
141140
*/
142141
void removeDuplicateChars(asciiParams *params){
143-
uint8_t occur[256] = {0};int i;int idx = 0;
142+
wchar_t occur[256] = {0};int i;int idx = 0;
143+
144144
for(i = 0; i < params->contentSize; i++){
145145
if(!occur[params->content[i]]){
146+
146147
if(idx != i){
147148
params->content[idx] = params->content[i];
148149
}
@@ -154,16 +155,16 @@ void removeDuplicateChars(asciiParams *params){
154155

155156
if(idx == params->contentSize) return;
156157

157-
uint8_t* tmp = (uint8_t *)calloc(idx ,sizeof(uint8_t));
158+
wchar_t* tmp = (wchar_t *)calloc(idx ,sizeof(wchar_t));
158159
params->contentSize = idx;
159160

160-
strncpy(tmp, params->content, idx);tmp[idx] = '\0';
161+
wcsncpy(tmp, params->content, idx);tmp[idx] = '\0';
161162
// free(params->content);
162163
params->content = tmp;
163164
}
164165

165-
static int ascCmp(const void* a, const void* b){return *(uint8_t *)a - *(uint8_t *)b;}
166-
static int desCmp(const void* a, const void* b){return *(uint8_t *)b - *(uint8_t *)a;}
166+
static int ascCmp(const void* a, const void* b){return *(wchar_t *)a - *(wchar_t *)b;}
167+
static int desCmp(const void* a, const void* b){return *(wchar_t *)b - *(wchar_t *)a;}
167168

168169
/**
169170
* @brief sort the input content in ascending / descending order
@@ -173,8 +174,8 @@ static int desCmp(const void* a, const void* b){return *(uint8_t *)b - *(uint8_t
173174
*/
174175
void sortChars(asciiParams *params){
175176
if(params->order){
176-
if(params->order == 1) qsort(params->content, params->contentSize, sizeof(uint8_t), ascCmp);
177-
else qsort(params->content, params->contentSize, sizeof(uint8_t), desCmp);
177+
if(params->order == 1) qsort(params->content, params->contentSize, sizeof(wchar_t), ascCmp);
178+
else qsort(params->content, params->contentSize, sizeof(wchar_t), desCmp);
178179
}
179180
}
180181

@@ -185,17 +186,17 @@ void sortChars(asciiParams *params){
185186
* @param character
186187
* @return bool
187188
*/
188-
bool isPrintable(uint8_t character){
189+
bool isPrintable(wchar_t character){
189190
return !(character >= 0 && character <= 32 || character == 127);
190191
}
191192

192193
/**
193194
* @brief Get the printable custom value for non printable characters
194195
*
195196
* @param content
196-
* @return uint8_t*
197+
* @return wchar_t*
197198
*/
198-
wchar_t* getPrintable(uint8_t content){
199+
wchar_t* getPrintable(wchar_t content){
199200
if(!(content >= 0 && content <= 32 || content == 127)) return L" ";
200201

201202
switch (content){

src/ascii.h

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
1+
#ifndef _ASCII_H_
2+
#define _ASCII_H_
3+
14
#include <stdio.h>
25
#include <stdlib.h>
36

47
#include <stdbool.h>
58
#include <stdint.h>
69
#include <string.h>
10+
#include <locale.h>
711

8-
#ifndef _ASCII_H_
9-
#define _ASCII_H_
12+
#include <windows.h>
13+
#include <wchar.h>
1014

1115
#define MAX_COL 4
1216
#define MAX_ROW 32
@@ -31,24 +35,24 @@ typedef struct parameter{
3135
bool _onlyAll; // if all only* 3 are false this will be set to true
3236
bool onlyBin; //--bin shows Binary in output table
3337

34-
uint8_t* content; // " " content / data (user input)
38+
wchar_t* content; // " " content / data (user input)
3539
uint16_t contentSize; // content size
3640

3741
uint8_t order; //0 - default , (--asc)1 - ascending, (--des)2 - desending ordered output table
3842
bool color; //--vt100 register ansi vt100 escape sequence color to the terminal
3943
}asciiParams;
4044

41-
uint8_t isHex( char* _hexadecimal );
42-
uint8_t isOct( char* _octal );
43-
uint8_t isBin( char* _binary );
44-
uint8_t isDec( char* _decimal );
45+
uint8_t isHex( wchar_t* _hexadecimal );
46+
uint8_t isOct( wchar_t* _octal );
47+
uint8_t isBin( wchar_t* _binary );
48+
uint8_t isDec( wchar_t* _decimal );
4549

46-
asciiParams parseParameter(int argv, char** args);
50+
asciiParams parseParameter(int argv, wchar_t** args);
4751
void removeDuplicateChars(asciiParams *params);
4852
void sortChars(asciiParams *params);
4953

50-
bool isPrintable(uint8_t character);
51-
wchar_t* getPrintable(uint8_t content);
54+
bool isPrintable(wchar_t character);
55+
wchar_t* getPrintable(wchar_t content);
5256

5357
static int ascCmp(const void* a, const void* b);
5458
static int desCmp(const void* a, const void* b);

0 commit comments

Comments
 (0)