Адрес: ул. Б. Очаковская 32 Москва Россия
Наши официальные канал и чат в telegram, группа в ВКонтакте

Системный календарь на yabasic: цвета, выходные и подсветка текущего дня

Умный календарь на yabasic: берет текущий год из системы, красит выходные в красный, а сегодняшнее число подсвечивает желтым

Скачать бесплатные программы для Yabasic на Windows, Linux, MacOS, PlayStation 2
Аватара пользователя
Anton
Site Admin
Сообщения: 261
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Системный календарь на yabasic: цвета, выходные и подсветка текущего дня

Сообщение Anton »

Системный календарь на yabasic: цвета, выходные и подсветка текущего дня
Полностью рабочий консольный календарь на yabasic. Программа сама определяет текущий год и месяц из системы, рисует сетку на 12 месяцев и выделяет важные дни прямо в терминале.

Что умеет программа:
  • Берет системную дату: год и день автоматически подтягиваются из date$.
  • Цветовое кодирование: названия месяцев — голубые, заголовок года — желтый.
  • Выходные: суббота и воскресенье (числа) выделены красным цветом.
  • Эффект «живого» календаря: сегодняшнее число автоматически подсвечивается черным текстом на желтом фоне.
Оптимизация: для центрирования текста используется встроенная быстрая функция string$ (создание строки-повторителя), чтобы не нагружать интерпретатор.

Управление: просто запустите скрипт, календарь на текущий год отрисуется автоматически. (Для выхода — Enter).

Листинг кода:

Код: Выделить всё

clear screen

sub center$(s$, width)
    local fill1
    fill1 = floor((width - len(s$)) / 2)
    // Используем быструю встроенную функцию string$ для пробелов
    return string$(fill1, " ") + s$ + string$(width - fill1 - len(s$), " ")
end sub

sub makeMonth(name, skip, days, cal$(), j)
    local cal, curday, line$, i, day$
    curday = 1 - skip
    
    cal$(j, 1) = center$(left$(months$(name), 3), 20)
    cal$(j, 2) = "MO TU WE TH FR SA SU"
    
    for cal = 3 to 8
        line$ = ""
        for i = 1 to 7
            day$ = "  "
            if curday >= 1 and curday <= days then
                if curday < 10 then
                    day$ = " " + str$(curday)
                else
                    day$ = str$(curday)
                end if
            end if
            line$ = line$ + day$
            if i < 7 then
                line$ = line$ + " "
            end if
            curday = curday + 1
        next
        cal$(j, cal) = line$
    next
end sub

// Вывод недели с выделением выходных (красный) и сегодняшнего дня (желтый фон)
sub print_week(week$, is_cur_month, cur_d)
    local i, day_str$, space_str$, txt_col$
    
    for i = 1 to 7
        day_str$ = mid$(week$, (i-1)*3 + 1, 2)
        
        // Определяем цвет: выходные красные, будни белые
        if i = 6 or i = 7 then
            txt_col$ = "red"
        else
            txt_col$ = "white"
        end if
        
        // Если это сегодняшний день - инвертируем цвета (желтый фон)
        if is_cur_month and val(day_str$) = cur_d and val(day_str$) <> 0 then
            print color("black", "yellow") day_str$;
        else
            print color(txt_col$, "black") day_str$;
        end if
        
        // Печатаем пробел между днями (он всегда черный)
        if i < 7 then
            space_str$ = mid$(week$, (i-1)*3 + 3, 1)
            print color("white", "black") space_str$;
        end if
    next i
end sub

dim months$(12)
n = token("JANUARY,FEBRUARY,MARCH,APRIL,MAY,JUNE,JULY,AUGUST,SEPTEMBER,OCTOBER,NOVEMBER,DECEMBER", months$(), ",")
dim daysPerMonth(12)
for n = 1 to 12
    read daysPerMonth(n)
next
data 31,28,31,30,31,30,31,31,30,31,30,31

sub print_cal(year, cur_m, cur_d)
    local q, l, m, i, startday, dpm, calendar$(12, 8)
    
    startday = mod((year-1)*365 + floor((year-1)/4) - floor((year-1)/100) + floor((year-1)/400), 7)
    if (mod(year, 4) = 0 and mod(year, 100) <> 0) or mod(year, 400) = 0 then
        daysPerMonth(2) = 29
    end if
    
    for i = 1 to 12
        dpm = daysPerMonth(i)
        makeMonth(i, startday, dpm, calendar$(), i)
        startday = mod(startday + dpm, 7)
    next
    
    // Заголовок года (Желтый)
    print color("yellow", "black") center$("--- " + str$(year) + " ---", 89)
    print
    
    for q = 0 to 2
        // Названия месяцев (Голубой)
        for m = 1 to 4
            print color("cyan", "black") calendar$(q * 4 + m, 1);
            if m < 4 then
                print color("white", "black") " | ";
            end if
        next
        print
        
        // Дни недели (Белый)
        for m = 1 to 4
            print color("white", "black") calendar$(q * 4 + m, 2);
            if m < 4 then
                print color("white", "black") " | ";
            end if
        next
        print
        
        // Недели
        for l = 3 to 8
            for m = 1 to 4
                print_week(calendar$(q * 4 + m, l), (q * 4 + m = cur_m), cur_d)
                if m < 4 then
                    print color("white", "black") " | ";
                end if
            next
            print
        next
        
        if q < 2 then
            print
        end if
    next
end sub

// Получаем текущую дату из системы
dim d$(6)
n = split(date$, d$(), "-")
current_year = val(d$(4))
current_month = val(d$(2))
current_day = val(d$(3))

print_cal(current_year, current_month, current_day)
file.webp
У вас нет необходимых прав для просмотра вложений в этом сообщении.