Untitled

 avatar
unknown
plain_text
23 days ago
2.3 kB
2
Indexable
#include <dos.h> // Библиотека за работа с прекъсвания на BIOS
#include <string.h>

// Функция printetext за изпращане на текст към принтера
void printetext(const char *text, const char *font_code, int lpt_port) {
    // Изпраща управляващия код за шрифта
    while (*font_code) {
        union REGS regs;
        regs.h.ah = 0x00;          // Функция 00h: Изпраща байт към принтера
        regs.h.al = *font_code;    // Символ за печат (управляващ код)
        regs.x.dx = lpt_port;      // Номер на LPT порта (0 за LPT1, 1 за LPT2 и т.н.)
        int86(0x17, &regs, &regs); // Прекъсване 17h
        font_code++;
    }

    // Изпраща текста
    while (*text) {
        union REGS regs;
        regs.h.ah = 0x00;          // Функция 00h: Изпраща байт към принтера
        regs.h.al = *text;         // Символ за печат
        regs.x.dx = lpt_port;      // Номер на LPT порта
        int86(0x17, &regs, &regs); // Прекъсване 17h
        text++;
    }
}

// Основна програма
int main() {
    // Номер на LPT порта (0 за LPT1)
    int lpt_port = 0;

    // Управляващи кодове за шрифтове
    const char *large_font = "\x1B\x47";      // Уголемен шрифт (ESC G)
    const char *condensed_font = "\x1B\x4D";  // Кондензиран шрифт (ESC M)
    const char *normal_font = "\x1B\x50";     // Нормален шрифт (ESC P)

    // Данни за печат
    const char *student_name = "Иван Иванов\n";
    const char *student_number = "123456789\n";
    const char *date = "21.01.2025\n";

    // Печат на редовете с различни шрифтови настройки
    printetext(student_name, large_font, lpt_port);     // Име с уголемен шрифт
    printetext(student_number, condensed_font, lpt_port); // Факултетен номер с кондензиран шрифт
    printetext(date, normal_font, lpt_port);           // Дата с нормален шрифт

    return 0;
}
Leave a Comment