Вход на сайт
Заметки программиста
613
19.12.23 14:07
Программа bin2h.c:
#include <stdio.h> int main(int argc, char *argv[]) { FILE *i; /*Для чтения файла */ FILE *o; /* Для записи файла */ int is_begin = 0; /* Начало файла */ int buf; /* Переменная, в которую записывается значение текущего байта из файла */ /* Если мало аргументов, то показываем подсказку и выходим из программы*/ if(argc < 2) { printf("bin2h <binary> <output>"); return 0; } i = fopen(argv[1], "r+b"); /* Открываем файл для чтения бинарных данных*/ o = fopen(argv[2], "w"); /* Открываем файл для записи */ fprintf(o, "int buf[] = {"); /* Записываем в файл int buf[] = {*/ /* Циклиться до конца файла */ while(!feof(i)) { /* Если не начало файла, то записываем в файл запятую */ if(is_begin == 1) fprintf(o, ", "); buf = fgetc(i); /* Считываем текущий байт из файла */ fprintf(o, "%d", buf); /* Записываем в файл текущий байт, но в виде цифры */ /* Если начало файла, то устанавливаем что не начало файла */ if(is_begin == 0) is_begin = 1; } fprintf(o, "};"); /* Записываем в файл }; */ fclose(i); /* Закрываем файл */ fclose(o); /* Зарываем файл */ return 0; /* Завершаем программу */ }
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
NEW 19.12.23 14:19
Программа pnggen генерирует пустой файл png, а так-же bat файл и запускает программу MS Paint-
Код pnggen.c:
#include <stdio.h> #include <stdlib.h> #include <windows.h> /* Пустой png файл с размером 1x1 пикселей */ int buf[] = {137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 1, 0, 0, 0, 1, 8, 2, 0, 0, 0, 144, 119, 83, 222, 0, 0, 0, 1, 115, 82, 71, 66, 0, 174, 206, 28, 233, 0, 0, 0, 4, 103, 65, 77, 65, 0, 0, 177, 143, 11, 252, 97, 5, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 14, 195, 0, 0, 14, 195, 1, 199, 111, 168, 100, 0, 0, 0, 12, 73, 68, 65, 84, 24, 87, 99, 248, 255, 255, 63, 0, 5, 254, 2, 254, 167, 53, 129, 132, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130, -1}; int main(int argc, char *argv[]) { char counter[10]; /* Для счётчика */ char filename_bat[50]; /* Имя файла bat */ char filename_png[50]; /* Имя файла png */ int int_counter = 0; /* Инициализация счётчика */ FILE *o_bat; /* Для файла bat */ FILE *o_png; /* Для файла png */ FILE *i_counter; /* Для файла counter */ FILE *o_counter; /* Для файла counter */ SYSTEMTIME local_time; /* Текущее время */ /* Если аргументы не введены, выводим текст на экран pnggen.exe <prefix> и завершаем программу */ if(argc < 2) { printf("pnggen.exe <prefix>"); /* Вывод на экран pnggen <prefix> */ return 0; /* Завершение программы */ } i_counter = fopen("counter.", "r"); /* Открываем файл для чтения */ /* Если файла counter не существует, то создаём новый файл counter, и записываем в файл число 0*/ if(i_counter == NULL) { o_counter = fopen("counter.", "w"); /* Создаём новый файл counter */ fprintf(o_counter, "0"); /* Записываем в файл число 0 */ fclose(o_counter); /* Закрываем файл */ } else { fgets(counter, 10, i_counter); /* Если файл существует, то считываем из файла число */ int_counter = atoi(counter); /* Превращаем из текста в число */ int_counter++; /* Увеличиваем счётчик */ fclose(i_counter); /* Закрываем файл */ } o_counter = fopen("counter.", "w"); /* Открываем файл counter для записи */ fprintf(o_counter, "%d", int_counter); /* Записываем число в файл */ fclose(o_counter); /* Закрываем файл */ GetLocalTime(&local_time); /* Получаем текущую дату и текущее время */ sprintf(filename_bat, "%s_d_d_d_d_d_d_d.bat", argv[1], int_counter, local_time.wDay, local_time.wMonth, local_time.wYear, local_time.wHour, local_time.wMinute, local_time.wSecond); /* Имя файла bat */ sprintf(filename_png, "%s_d_d_d_d_d_d_d.png", argv[1], int_counter, local_time.wDay, local_time.wMonth, local_time.wYear, local_time.wHour, local_time.wMinute, local_time.wSecond); /* Имя файла png */ o_bat = fopen(filename_bat, "w"); /* Открываем bat файл для записи */ fprintf(o_bat, "@echo off\n"); /* Пишим в файл @echo off */ fprintf(o_bat, "mspaint %s", filename_png); /* Пишим в файл mspaint ...*/ fclose(o_bat); /* Закрываем файл */ o_png = fopen(filename_png, "w+b"); /* Открываем файл для записи пустого png файла с размером 1x1 пиксель */ /* Записываем в файл */ for(int j = 0; j<sizeof(buf); j++) fputc(buf[j], o_png); fclose(o_png); /* Закрываем файл */ system(filename_bat); /* Только что созданный bat файл запускаем */ return 0; /* Выходим из программы */ }
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
NEW 19.12.23 14:28
в ответ uscheswoi_82 19.12.23 14:19
Программа bin2h лишь нужна была для того, чтобы бинарные данные из пустого png файла превратить вот в такой массив:
/* Пустой png файл с размером 1x1 пикселей */ int buf[] = {137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 1, 0, 0, 0, 1, 8, 2, 0, 0, 0, 144, 119, 83, 222, 0, 0, 0, 1, 115, 82, 71, 66, 0, 174, 206, 28, 233, 0, 0, 0, 4, 103, 65, 77, 65, 0, 0, 177, 143, 11, 252, 97, 5, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 14, 195, 0, 0, 14, 195, 1, 199, 111, 168, 100, 0, 0, 0, 12, 73, 68, 65, 84, 24, 87, 99, 248, 255, 255, 63, 0, 5, 254, 2, 254, 167, 53, 129, 132, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130, -1};
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
NEW 19.12.23 14:37
Программа window_resizer.frm:
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, yVal cch As Long) As Long Private Const SWP_NOMOVE = &H2 Private Const HWND_TOPMOST = -1 'Конвертируем из HEX в длинное число, нужно для HWND Function Hex2Dbl(h As String) As Double Hex2Dbl = CDbl("&h0" & h) If Hex2Dbl < 0 Then Hex2Dbl = Hex2Dbl + 4294967296# End Function Private Sub Command1_Click() 'Меняем размер окна SetWindowPos CLng(Hex2Dbl(Me.Text3.Text)), HWND_TOPMOST, 0, 0, CLng(Me.Text1.Text), CLng(Me.Text2.Text), SWP_NOMOVE End Sub
Так выглядет форма:
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
NEW 19.12.23 14:42
в ответ uscheswoi_82 19.12.23 14:37
Программа tab2spc.py, заменяет табулятор на пробелы, нужна для форматирования кода, взял из своего форума тут - https://programming.mybb.ru/viewtopic.php?id=281:
import sys def convert(s, e): try: i = open(s, "r") #Открываем файл для чтения o = open(e, "w") #Открываем файл для записи #Читаем из файла строчки for l in i: nl = l.replace("\t", " ") #Заменяем табуляции на пробелы o.write(nl) #Записываем в строчку #Закрываем файлы i.close() o.close() #Обработчик ошибок except OSError as err: print("OS error: {0}".format(err)) except ValueError: print("Could not convert data to an integer.") except BaseException as err: print(f"Unexpected {err=}, {type(err)=}") raise
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
NEW 25.03.24 00:51
в ответ uscheswoi_82 19.12.23 15:01
Это как обратиться к x и y координате в буфере, формула такая buffer[(y * HEIGHT) + x]:
#define HEIGHT 23 #define WIDTH 80 #include <stdio.h> char buffer[WIDTH * HEIGHT]; //Установить байт в буфер, по x и y-координате void set_buffer(char ch, int x, int y) { buffer[(y * HEIGHT) + x] = ch; } //Получить байт из буфера, по x и y-координате char get_buffer(int x, int y) { return buffer[(y * HEIGHT) + x]; }
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение