Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Pascal/Object Pascal/Free Pascal (Delphi/Lazarus)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
void display(int l, int r, unsigned char *str)
{ /* функція виводу на екран тексту cp1251 */
    int i, j, sp, p; /* індекси в рядках, відстань до пробілу або кінця рядка, кількість виведених символів */
    char *newstr, *out; /* текст у cp1251, рядок для виведення */
    int len = strlen(str); /* довжина тексту */
    int w = 80 - l - r; /* ширина екрану */
    newstr = win2oem(str); /* cp1251 > cp866 */
    if (wherex() > l+1) gotoxy(l+1,wherey()+1);
    else gotoxy(l+1,wherey());
    out = calloc(w+1,sizeof(char)); /* виділяємо пам'ять */
    j = 0; /* індекс у рядку для виведення */
    p = 0; /* кількість виведених символів */
    for (i = 0; i < len; i++) { /* цикл перебору символів */
        if (newstr[i] != '\r' && newstr[i] != '\n') { /* якщо символ не \r' і не \n */
            out[j] = newstr[i]; /* копіюємо символ */
            j++; /* індекс у рядку для виведення + 1 */
        }
        sp = 0; /* відстань до пробілу або кінця рядка = 0 */
        while (newstr[i+sp+1] != ' ' && newstr[i+sp+1] != '\0' && newstr[i+sp+1] != '\n') sp++;
        if (sp >= w) { /* якщо відстань більше ширини екрану */
            strncpy(out,newstr+p,w); /* копіюємо частину тексту */
            out[w] = 0; /* дописуємо завершуючий 0 в рядок */
            j = w; /* індекс у рядку для виведення = ширина екрану */
            i += w - 1; /* індекс в тексті + ширина екрану - 1 */
        }
        if (j == w || newstr[i+1] == '\0' || newstr[i+1] == '\n' || sp > w - j) {
            j = 0; /* для циклу пропуску пробілів */
            while (out[j] == ' ') j++; /* пропускаємо пробіли на початку рядка */
            cprintf("%s",out+j); /* виводимо рядок */
            if (str[i+1] != '\0') gotoxy(l+1,wherey()+1); /* переводимо каретку на новий рядок */
            memset(out,0,w+1); /* заповнюємо нулями */
            p = i; /* оновлюємо кількість виведених символів */
            j = 0; /* індекс у рядку для виведення = 0 */
        }
    }
    free(newstr); /* звільняємо пам'ять */
    free(out); /* звільняємо пам'ять */
}

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 17:46 10-03-2012
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Pascal/Object Pascal/Free Pascal (Delphi/Lazarus)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru