#!/bin/sh
##########################################################################
# XF2XInside
#
# Этот скрипт преобразует строки определения видеорежимов XF86Config в
# формат XInside, необходимый для файла etc/Xtiming.
#
# Этот скрипт набросан в спешке, поэтому здесь нет жесткого контроля
# ошибок в значениях (не говоря уже о дружественности интерфейса).
#
# Если вы запустите его без параметров, то он напишет вам, что надо делать.
#
# ( Июль 1996, hcz@tazlwurm.bb.bawue.de)
#
# Кстати: новые видеорежимы, созданные при помощи этого HOWTO работают,
# но не появляются в меню Xsetup. Кто-нибудь знает причину?
#
##########################################################################
#----------------------------------------------- Итак:
# Измените эту строку, если ваш файл с видеорежимами находится в другом месте:
XF=/usr/X11/lib/X11/XF86Config
if [ $# -ne 1 ] ; then
echo "использование: ${0##*/} <mode>"
echo "пример: ${0##*/} 1024x764"
echo -e "Конвертирование строки видеорежима из $XF в формат Xinside"
exit 1
fi
egrep -i "^[\t ]*modeline.+\"$1\"" /usr/X11/lib/X11/XF86Config |
gawk '
NF < 11 { print "! неверная строка Modeline:\n! " $0 "\n!"; next }
{
print "//", $0 ":"
name = $2
DOT_CLK = $3;
A = $4;
B = $5;
C = $6;
D = $7;
a = $8;
b = $9;
c = $10;
d = $11;
VerFrequency = 1000000 / ((D / DOT_CLK) * d)
print "[PREADJUSTED_TIMING]"
printf " PreadjustedTimingName = \"%dx%d @ %.0dHz\";\n", A, a, VerFrequency
print " HorPixel\t\t= " A ";"
print " VerPixel\t\t= " a ";"
print " PixelWidthRatio\t= 4;\n PixelHeightRatio\t= 3;"
print " HorFrequency\t\t= " DOT_CLK / D * 1000 ";\t// kHz"
print " VerFrequency\t\t= " VerFrequency ";\t// Hz"
print " ScanType\t\t= NONINTERLACED;\t\t// *CHECK*"
print " HorSyncPolarity\t= NEGATIVE;\t\t\t// *CHECK*"
print " VerSyncPolarity\t= NEGATIVE;\t\t\t// *CHECK*"
print " CharacterWidth\t= 8;"
print " PixelClock\t\t= " DOT_CLK ";"
HorTotalTime = D / DOT_CLK
print " HorTotalTime\t\t= " HorTotalTime ";"
print " HorAddrTime \t\t= " A / DOT_CLK ";"
print " HorBlankStart\t\t= " A / DOT_CLK ";"
print " HorBlankTime\t\t= " D / DOT_CLK - A / DOT_CLK ";"
print " HorSyncStart\t\t= " B / DOT_CLK ";"
print " HorSyncTime\t\t= " C / DOT_CLK - B / DOT_CLK ";"
VerTotalTime = ( HorTotalTime * d ) / 1000
print " VerTotalTime\t\t= " VerTotalTime ";"
print " VerAddrTime\t\t= " ( HorTotalTime * a ) / 1000 ";"
VerBlankStart = ( HorTotalTime * a ) / 1000
print " VerBlankStart\t\t= " VerBlankStart ";"
print " VerBlankTime\t\t= " VerTotalTime - VerBlankStart ";"
print " VerSyncStart\t\t= " ( HorTotalTime * b ) / 1000 ";"
print " VerSyncTime\t\t= " ( HorTotalTime * ( c - b ) ) / 1000
print ""
}' |