|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T d
Length: 7257 (0x1c59)
Types: TextFile
Names: »data.c«
└─⟦8648bda34⟧ Bits:30007244 EUUGD5_II: X11R5
└─⟦87c3ac0e0⟧ »./contrib-3/contrib-3.00«
└─⟦de8ce1454⟧
└─⟦this⟧ »contrib/lib/iv/src/bin/dclock/data.c«
/*
* Copyright (c) 1987, 1988, 1989 Stanford University
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of Stanford not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. Stanford makes no representations about
* the suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*
* STANFORD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
* IN NO EVENT SHALL STANFORD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/*
* layout data and initializations for dclock
*/
#include "dclock.h"
#include "data.h"
#include "segment.h"
int Width = 175;
int Height = 30;
int XPos = 815;
int YPos = 65;
TMode TimeMode = CIVIL; // initial (default) values for options
CMode CreateMode = SWEPT;
boolean JohnsFlag = false;
boolean Invert = false;
boolean ShowDate = true;
boolean ShowBorder = false;
boolean ShowTime = true;
int SlantPC = 30;
int ThickPC = 15;
int FadeRate = 4;
int FadeStep = 1;
boolean SegCode[11][7] = { // segments to form various digits
{1,1,1,1,1,1,0}, // digit 0
{0,1,1,0,0,0,0},
{1,1,0,1,1,0,1},
{1,1,1,1,0,0,1},
{0,1,1,0,0,1,1},
{1,0,1,1,0,1,1},
{1,0,1,1,1,1,1},
{1,1,1,0,0,0,0},
{1,1,1,1,1,1,1},
{1,1,1,0,0,1,1}, // digit 9
{0,0,0,0,0,0,0} // blank digit
};
float HTx, HUx, MTx, MUx; // normalized digit x offsets
float COLx; // normalized colon x offset
float ALLy; // normalized digit y offsets
float DigitWidth; // normalized digit width with slant
float DigitHeight; // normalized digit height
SegLayout SegData[7]; // normalized segments, slanted, unshifted
SegLayout ColonData[2]; // normalized colon, slanted, shifted
CharLayout AData = { // character A
11, //count
{0.0,0.1,0.15,0.25,0.2,0.18,0.07,0.08,0.17,0.125,0.05}, // x
{0.0,0.3,0.3,0.0,0.0,0.05,0.05,0.1,0.1,0.22,0.0} // y
};
CharLayout PData = { // character P
12,
{0.0,0.0,0.2,0.25,0.25,0.2,0.05,0.05,0.2,0.2,0.05,0.05},
{0.0,0.3,0.3,0.25,0.15,0.1,0.1,0.15,0.15,0.25,0.25,0.0}
};
CharLayout MData = { // character M
12,
{0.0,0.0,0.05,0.2,0.35,0.4,0.4,0.35,0.35,0.2,0.05,0.05},
{0.0,0.3,0.3,0.1,0.3,0.3,0.0,0.0,0.2,0.0,0.2,0.0}
};
// these are variables so that a meta-view can potentially change them
float BorderWidth = 0.0; // digit relative border width
float LMargin = 0.3; // ... left margin
float RMargin = 0.3; // ... right margin
float TMargin = 0.1; // ... top margin
float BMargin = 0.1; // ... bottom margin
float DigitGap = 0.2; // ... interdigit spacing
float SepGap = 1.0; // ... separator spacing
float VThick = 0.2; // ... thickness of vertical segments
float HThick = 0.15; // ... thickness of horizontal segments
float Slant = 0.3; // ... rightwards slant of digit top
float width, height; // total dimensions, digit relative
void MakeSeg( Seg s, SegLayout& base, float Xoff, float Yoff ) {
for ( int i=0; i<base.count; i++ ) {
SegData[s].y[i] = base.y[i]+Yoff;
SegData[s].x[i] = base.x[i]+Xoff+SegData[s].y[i]*Slant/width;
}
SegData[s].count = base.count;
}
void InitData() {
FadeStep = FadeRate==0 ? 16 : 1;
SegCode[9][SegD] = (JohnsFlag)? true : false;
Slant = min( max( 0,SlantPC ), 100 )/100.0;
HThick = min( max( 5,ThickPC ), 25 )/100.0;
VThick = min( max( 5,ThickPC ), 25 )/100.0 * 3.0/2.0;
Width = Coord( min( max( 100,Width ), 1024));
Height = Coord( min( max( 25,Height ), 865));
YPos = YPos - Height + 1;// ypos is the TOP of clock; we need the bottom
width = 2*BorderWidth+LMargin+4.0+2*DigitGap+SepGap+RMargin+Slant;
height = 2*BorderWidth+BMargin+1.0+TMargin;
HTx = (BorderWidth + LMargin)/width; // hours tens digit x offset
HUx = HTx + (1.0 + DigitGap)/width; // hours units ...
MTx = HUx + (1.0 + SepGap)/width; // minutes tens ...
MUx = MTx + (1.0 + DigitGap)/width; // minutes units ...
COLx = HUx + (1.0 + SepGap/2.0)/width; // colon ...
ALLy = (BorderWidth + BMargin)/height;
DigitWidth = (1.0 + Slant)/width;
DigitHeight = 1.0/height;
SegLayout Colon; // generic normalized colon dot
Colon.count = 6;
Colon.x[0] = 0.0;
Colon.x[1] = ( - VThick/2.0)/width;
Colon.x[2] = ( - VThick/2.0)/width;
Colon.x[3] = 0.0;
Colon.x[4] = VThick/2.0/width;
Colon.x[5] = VThick/2.0/width;
Colon.y[0] = 0.0;
Colon.y[1] = 0.5*HThick/height;
Colon.y[2] = 1.0*HThick/height;
Colon.y[3] = 1.5*HThick/height;
Colon.y[4] = 1.0*HThick/height;
Colon.y[5] = 0.5*HThick/height;
ColonData[0].count = Colon.count;
ColonData[1].count = Colon.count;
for ( int i=0; i< Colon.count; i++ ) {
ColonData[0].y[i] = Colon.y[i]+(0.5-2.25*HThick)/height+ALLy;
ColonData[0].x[i] = Colon.x[i]+COLx+ColonData[0].y[i]*Slant/width;
ColonData[1].y[i] = Colon.y[i]+(0.5+0.25*HThick)/height+ALLy;
ColonData[1].x[i] = Colon.x[i]+COLx+ColonData[1].y[i]*Slant/width;
}
for ( i=0; i<12; i++ ) { // shift, scale, slant A, P, M
AData.y[i] = (AData.y[i]+0.7)/height + ALLy;
AData.x[i] = (AData.x[i])/width+HTx+AData.y[i]*Slant/width-0.15/width;
PData.y[i] = (PData.y[i]+0.7)/height + ALLy;
PData.x[i] = (PData.x[i])/width+HTx+PData.y[i]*Slant/width-0.15/width;
MData.y[i] = (MData.y[i]+0.7)/height + ALLy;
MData.x[i] = (MData.x[i]+0.3)/width+HTx+MData.y[i]*Slant/width-0.15/width;
}
SegLayout HSeg, VSeg; // generic normalized horiz and vert segments
HSeg.count = 6;
HSeg.x[0] = VThick/2.0/width;
HSeg.x[1] = VThick/width;
HSeg.x[2] = (1.0 - VThick)/width;
HSeg.x[3] = (1.0 - VThick/2.0)/width;
HSeg.x[4] = (1.0 - VThick)/width;
HSeg.x[5] = VThick/width;
HSeg.y[0] = HThick/2.0/height;
HSeg.y[1] = HThick/height;
HSeg.y[2] = HThick/height;
HSeg.y[3] = HThick/2.0/height;
HSeg.y[4] = 0.0;
HSeg.y[5] = 0.0;
VSeg.count = 6;
VSeg.x[0] = VThick/2.0/width;
VSeg.x[1] = 0.0;
VSeg.x[2] = 0.0;
VSeg.x[3] = VThick/2.0/width;
VSeg.x[4] = VThick/width;
VSeg.x[5] = VThick/width;
VSeg.y[0] = HThick/2.0/height;
VSeg.y[1] = HThick/height;
VSeg.y[2] = (0.5 - HThick/2.0)/height;
VSeg.y[3] = 0.5/height;
VSeg.y[4] = (0.5 - HThick/2.0)/height;
VSeg.y[5] = HThick/height;
MakeSeg( SegA, HSeg, 0.0, (1.0-HThick)/height );
MakeSeg( SegB, VSeg, (1.0-VThick)/width, (0.5-HThick/2.0)/height );
MakeSeg( SegC, VSeg, (1.0-VThick)/width, 0.0 );
MakeSeg( SegD, HSeg, 0.0, 0.0 );
MakeSeg( SegE, VSeg, 0.0, 0.0 );
MakeSeg( SegF, VSeg, 0.0, (0.5-HThick/2.0)/height );
MakeSeg( SegG, HSeg, 0.0, (0.5-HThick/2.0)/height );
}