jcs's openbsd hax
openbsd
1#! /usr/bin/awk -f
2# $NetBSD: modelines2c.awk,v 1.5 2011/03/21 19:32:26 jdc Exp $
3# $OpenBSD: modelines2c.awk,v 1.3 2024/11/06 09:34:10 miod Exp $
4#
5# Copyright (c) 2006 Itronix Inc.
6# All rights reserved.
7#
8# Written by Garrett D'Amore for Itronix Inc.
9#
10# Redistribution and use in source and binary forms, with or without
11# modification, are permitted provided that the following conditions
12# are met:
13# 1. Redistributions of source code must retain the above copyright
14# notice, this list of conditions and the following disclaimer.
15# 2. Redistributions in binary form must reproduce the above copyright
16# notice, this list of conditions and the following disclaimer in the
17# documentation and/or other materials provided with the distribution.
18# 3. The name of Itronix Inc. may not be used to endorse
19# or promote products derived from this software without specific
20# prior written permission.
21#
22# THIS SOFTWARE IS PROVIDED BY ITRONIX INC. ``AS IS'' AND
23# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
24# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
25# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ITRONIX INC. BE LIABLE FOR ANY
26# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
27# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
29# ON ANY THEORY OF LIABILITY, WHETHER IN
30# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32# POSSIBILITY OF SUCH DAMAGE.
33#
34
35BEGIN {
36 nmodes = 0;
37}
38
39NR == 1 {
40 split($0,v,"$");
41
42 VERSION=v[2];
43
44 printf("/*\t$OpenBSD" "$\t*/\n\n");
45 printf("/*\n") ;
46 printf(" * THIS FILE AUTOMATICALLY GENERATED. DO NOT EDIT.\n");
47 printf(" *\n");
48 printf(" * generated from:\n");
49 printf(" *\t%s\n", VERSION);
50 printf(" */\n\n");
51
52 printf("#include <sys/types.h>\n");
53
54 printf("#include <dev/videomode/videomode.h>\n\n");
55
56 printf("/*\n");
57 printf(" * These macros help the modelines below fit on one line.\n");
58 printf(" */\n");
59 printf("#define HP VID_PHSYNC\n");
60 printf("#define HN VID_NHSYNC\n");
61 printf("#define VP VID_PVSYNC\n");
62 printf("#define VN VID_NVSYNC\n");
63 printf("#define I VID_INTERLACE\n");
64 printf("#define DS VID_DBLSCAN\n");
65 printf("\n");
66
67 printf("#define M(nm,hr,vr,clk,hs,he,ht,vs,ve,vt,f) \\\n");
68 printf("\t{ clk, hr, hs, he, ht, vr, vs, ve, vt, f, nm } \n\n");
69
70 printf("const struct videomode videomode_list[] = {\n");
71
72 next
73}
74
75(/^ModeLine/) {
76 dotclock = $3;
77
78 hdisplay = $4;
79 hsyncstart = $5;
80 hsyncend = $6;
81 htotal = $7;
82
83 vdisplay = $8;
84 vsyncstart = $9;
85 vsyncend = $10;
86 vtotal = $11;
87
88 macro = "MODE";
89 iflag = "";
90 iflags = "";
91 hflags = "HP";
92 vflags = "VP";
93
94 if ($12 ~ "^-")
95 hflags = "HN";
96
97 if ($13 ~ "^-")
98 vflags = "VN";
99
100 ifactor=1.0;
101 if ($14 ~ "[Ii][Nn][Tt][Ee][Rr][Ll][Aa][Cc][Ee]") {
102 iflag = "i";
103 iflags = "|I";
104 ifactor = 2.0;
105 }
106
107 # We truncate the vrefresh figure, but some mode descriptions rely
108 # on rounding, so we can't win here. Adding an additional .1
109 # compensates to some extent.
110
111 hrefresh= (dotclock * 1000000) / htotal;
112 vrefresh= int(((hrefresh * ifactor) / vtotal) + .1);
113
114 modestr = sprintf("%dx%dx%d%s", hdisplay, vdisplay, vrefresh, iflag);
115
116# printf("/* %dx%d%s refresh %d Hz, hsync %d kHz */\n",
117# hdisplay, vdisplay, iflag, vrefresh, hrefresh/1000);
118 printf("M(\"%s\",%d,%d,%d,%d,%d,%d,%d,%d,%d,%s),\n",
119 modestr,
120 hdisplay, vdisplay, dotclock * 1000,
121 hsyncstart, hsyncend, htotal,
122 vsyncstart, vsyncend, vtotal, hflags "|" vflags iflags);
123
124 modestr = sprintf("%dx%dx%d%s",
125 hdisplay/2 , vdisplay/2, vrefresh, iflag);
126
127 dmodes[nmodes]=sprintf("M(\"%s\",%d,%d,%d,%d,%d,%d,%d,%d,%d,%s),",
128 modestr,
129 hdisplay/2, vdisplay/2, dotclock * 1000 / 2,
130 hsyncstart/2, hsyncend/2, htotal/2,
131 vsyncstart/2, vsyncend/2, vtotal/2,
132 hflags "|" vflags "|DS" iflags);
133
134 nmodes = nmodes + 1
135
136}
137
138END {
139
140 printf("\n/* Derived Double Scan Modes */\n\n");
141
142 for ( i = 0; i < nmodes; i++ )
143 {
144 print dmodes[i];
145 }
146
147 printf("};\n\n");
148 printf("const int videomode_count = %d;\n", nmodes);
149}