terminal/func.c

96 lines
1.3 KiB
C

/*
* delay.c
*
* Created: 03.06.2023 12:34:55
* Author: Admin
*/
#include "func.h"
void delay() {
for(volatile long i = 0; i < 1000; i++){};
}
int count_digits(long number) {
int count = 0;
if (number == 0) {
return 1;
}
if (number < 0) {
number = -number;
}
while (number > 0) {
number /= 10;
count++;
}
return count;
}
void split_digits(long number, long* digits, int size) {
int digit;
int index = 0;
if (number == 0) {
digits[0] = 0;
return;
}
if (number < 0) {
number = -number;
}
while (number > 0 && index < size) {
digit = number % 10;
digits[index] = digit;
number /= 10;
index++;
}
}
static char map(char c) {
//if (c >= 0 && c <= 9)
//return c - 0x27;
//else
//return 0x01;
switch (c) {
case 0x30:
return 0x09;
case 0x31:
return 0x0a;
case 0x32:
return 0x0b;
case 0x33:
return 0x0c;
case 0x34:
return 0x0d;
case 0x35:
return 0x0e;
case 0x36:
return 0x0f;
case 0x37:
return 0x10;
case 0x38:
return 0x11;
case 0x39:
return 0x12;
case 0x2d:
return 0x06;
}
}
void map_digits(char* arr, char *digits, int size) {
int idx = 0;
for (int i = 0; i < size; i++) {
arr[idx] = map(digits[i]);
idx++;
}
}
void prepare_data(char *arr, long number, int size) {
long digits[12];
split_digits(number, digits, size);
map_digits(arr, digits, size);
}