wmdots: Add version 0.2beta to repository.
From http://gentoo.osuosl.org/distfiles/wmdots-0.2beta.tar.gz
This commit is contained in:
parent
787c7e6848
commit
a33dd8bb92
23
wmdots/wmdots/Makefile
Executable file
23
wmdots/wmdots/Makefile
Executable file
|
@ -0,0 +1,23 @@
|
|||
LIBDIR = -L/usr/X11R6/lib
|
||||
LIBS = -lXpm -lXext -lX11
|
||||
OBJS = wmdots.o ../wmgeneral/wmgeneral.o
|
||||
|
||||
.c.o:
|
||||
cc -c -g -O2 -Wall $< -o $*.o
|
||||
|
||||
wmifs: $(OBJS)
|
||||
cc -o wmdots $^ -lXext $(LIBDIR) $(LIBS)
|
||||
|
||||
all:: wmdots
|
||||
|
||||
clean::
|
||||
for i in $(OBJS) ; do \
|
||||
rm $$i ; \
|
||||
done
|
||||
rm wmdots
|
||||
|
||||
install::
|
||||
cp -f wmdots /usr/local/bin/
|
||||
chmod 755 /usr/local/bin/wmdots
|
||||
chown root:root /usr/local/bin/wmdots
|
||||
|
87
wmdots/wmdots/master.xpm
Normal file
87
wmdots/wmdots/master.xpm
Normal file
|
@ -0,0 +1,87 @@
|
|||
/* XPM */
|
||||
static char * master_xpm[] = {
|
||||
"64 66 18 1",
|
||||
" c None",
|
||||
". c #000000",
|
||||
"+ c #C300FF",
|
||||
"@ c #B500F2",
|
||||
"# c #A800E5",
|
||||
"$ c #9E00D8",
|
||||
"% c #9200CC",
|
||||
"& c #8500BF",
|
||||
"* c #7900B2",
|
||||
"= c #6E00A5",
|
||||
"- c #660099",
|
||||
"; c #5D008C",
|
||||
"> c #52007F",
|
||||
", c #480072",
|
||||
"' c #3E0066",
|
||||
") c #37005B",
|
||||
"! c #2D004C",
|
||||
"~ c #25003F",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ...................................................... ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
"++@@##$$%%&&**==--;;>>,,''))!!~~ ",
|
||||
"++@@##$$%%&&**==--;;>>,,''))!!~~ "};
|
860
wmdots/wmdots/old_dos_demo/dow.a
Normal file
860
wmdots/wmdots/old_dos_demo/dow.a
Normal file
|
@ -0,0 +1,860 @@
|
|||
;Dogs of war demo by OnlyMe (now called I440r :)
|
||||
;-------------------------------------------------------------------------
|
||||
|
||||
;Assembles with A386.COM (Registered A86).
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;Equates
|
||||
|
||||
MaxPoints equ 125 ;Maximum number of points in an object
|
||||
BumpMap equ Bumps+320 ;Pointer to second scan line of bump map
|
||||
SpotX equ 160 ;Position of static bump map spotlight
|
||||
SpotY equ 80
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;A based structure (See A86 documentation for explanation)
|
||||
|
||||
struc [bx] ;Structure does NOT need a name
|
||||
Counter dw ? ;Countdown to change
|
||||
Reset dw ? ;Counter reset value
|
||||
Position dw ? ;Points to item being modified
|
||||
Delta dw ? ;Speed of change (also direction)
|
||||
Upper dw ? ;Upper limit for position
|
||||
Lower dw ? ;Lower limit for position
|
||||
ends
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;Un-Initialised data
|
||||
|
||||
data segment
|
||||
|
||||
XAngle dw ? ;Angles of rotation for each axis
|
||||
YAngle dw ? ; higher numbers rotate faster
|
||||
ZAngle dw ?
|
||||
|
||||
X dw ? ;Coordinates of point being calculated
|
||||
Y dw ?
|
||||
Z dw ?
|
||||
|
||||
XSin dw ? ;Sin and Cos for each axis angle of rotation
|
||||
YSin dw ?
|
||||
ZSin dw ?
|
||||
XCos dw ?
|
||||
YCos dw ?
|
||||
ZCos dw ?
|
||||
|
||||
NumPoints dw ? ;Number of points in current object
|
||||
|
||||
; V---MaxPoints
|
||||
Trail1: dw 125 dup ? ;Display address of previous 8 positions for
|
||||
Trail2: dw 125 dup ? ; each point being rotated. We only erase a
|
||||
Trail3: dw 125 dup ? ; points 8'th previous position. This makes
|
||||
Trail4: dw 125 dup ? ; the points leave a trail 7 pixles long
|
||||
Trail5: dw 125 dup ?
|
||||
Trail6: dw 125 dup ?
|
||||
Trail7: dw 125 dup ?
|
||||
Trail8: dw 125 dup ?
|
||||
|
||||
CharP dw ? ;Pointer to font def for scrollie char
|
||||
BumpX dw ? ;Bump map coordinates being calculated
|
||||
BumpY dw ?
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;A copy of the ROM font moved here so we can reference it using DS
|
||||
|
||||
Font: db 256*8 dup ?
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;Note:
|
||||
;
|
||||
; The following buffer is the whole of the bump map. There is 1 scan
|
||||
;line of ZERO data above and below the area that will contain the bumps.
|
||||
;
|
||||
;Therefore the bumpmap is at Bumps+320 (See Equates Above)
|
||||
|
||||
Bumps: db 320*18 dup ?
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;Da Beeph (moo)
|
||||
|
||||
code segment
|
||||
|
||||
Start:
|
||||
jmp Main ;Do it...
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;Pre initialised data...
|
||||
|
||||
Shape dw Cube ;Pointer to current object
|
||||
|
||||
HalfH dw 160 ;Screen coordinates for centre of object
|
||||
HalfV dw 100
|
||||
|
||||
XOff dw 150 ;Position of object in world space
|
||||
YOff dw 150
|
||||
ZOff dw 800
|
||||
|
||||
DeltaX dw 5 ;Rotational speeds on each axis
|
||||
DeltaY dw 4
|
||||
DeltaZ dw 7
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;Modifiers: Tables follows this format: (as per above based structure)
|
||||
;
|
||||
; Counter Count down to next speed/position change
|
||||
; Retet Value to reset counter to
|
||||
; Position Pointer to data item to modify
|
||||
; Delta Ammount to change item (also direction)
|
||||
; Upper Upper limit fot item
|
||||
; Lower Lower limit for item
|
||||
|
||||
W1: dw 30,30,offset DeltaX,2,15,2 ;Modifies X Rotational speed
|
||||
W2: dw 20,20,offset DeltaY,-2,12,4 ;Modifies Y Rotational speed
|
||||
W3: dw 40,40,offset DeltaZ,2,10,7 ;Modifies Z Rotational speed
|
||||
W4: dw 02,02,offset ZOff,-3,800,180 ;Zooms object in and out of screen
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;Bump mapped scrollie banner text stuffz
|
||||
|
||||
Bannerp dw Banner ;Points to next character
|
||||
CharColumn db 080 ;Mask for next colunn of font def
|
||||
|
||||
Banner:
|
||||
db ' *** The Dogs Of WAR demo by OnlyMe! *** '
|
||||
db 'Begin! '
|
||||
|
||||
Begin:
|
||||
db 'Oh the dogs they had a meeting '
|
||||
db 'They came from near and far '
|
||||
db 'And some dogs came by motor bus '
|
||||
db 'And some by motor car '
|
||||
|
||||
db 0
|
||||
dw Flies,Hall
|
||||
|
||||
Hall:
|
||||
db 'On entering the meeting hall '
|
||||
db 'Each dog could take a look '
|
||||
db 'Where he had to hang his asshole '
|
||||
db 'Up high upon a hook '
|
||||
|
||||
db 0
|
||||
dw Cross,Fire
|
||||
|
||||
Fire:
|
||||
db 'And when they were assembled '
|
||||
db 'Each canine son and sire '
|
||||
db 'Some dirty bulldog son of a bitch '
|
||||
db 'Jumped up and hollared FIRE '
|
||||
|
||||
db 0
|
||||
dw Square,Panic
|
||||
|
||||
Panic:
|
||||
db 'All was in a panic '
|
||||
db 'Twas hell upon to look '
|
||||
db 'Each doggie grabbed at random '
|
||||
db 'An asshole from a hook '
|
||||
|
||||
db 0
|
||||
dw Cube,Sore
|
||||
|
||||
Sore:
|
||||
db 'Now the assholes were all mixed up '
|
||||
db 'Which made each doggie sore '
|
||||
db 'To have to wear another dogs ass '
|
||||
db 'He''d never worn before '
|
||||
|
||||
db 0
|
||||
dw Star,Bone
|
||||
|
||||
Bone:
|
||||
db 'And that is why until this day '
|
||||
db 'A dog will drop a bone '
|
||||
db 'To go and smell another dogs ass '
|
||||
db 'To see if it''s his OWN! '
|
||||
|
||||
db '*** THE END *** ??? '
|
||||
db 'Now what have i forgotz ???? '
|
||||
db 'ERM..... Oh Yea.... '
|
||||
|
||||
db 'Greetings *** ROTATE *** Out To ~~~~~~ '
|
||||
|
||||
db 0
|
||||
dw Heart,Catgirl
|
||||
|
||||
Catgirl:
|
||||
db 'Catgirl - Jeg Elsker DEG - Purrrrrrrrrrrrr :) '
|
||||
db 'Myriaam - Cute Sexy BABE Princess DOLL :) - heheheheheh - '
|
||||
db 'okokokokokokokokokokokokokokokokokokokokokokokokokok '
|
||||
db 'LuvrsCrs - Manager''ess and savior''ess of UnderNUT #CODERS '
|
||||
db '--> '
|
||||
|
||||
db 0
|
||||
dw Square,Unf
|
||||
|
||||
Unf:
|
||||
db 'Unf - Fatar - Debonaire - Isomer - Hexsane & MrsHex - '
|
||||
db 'nop - mole - oreo - RatKing - \hatred\ - KBerg - '
|
||||
db 'RyanT - Mafia - Yosha - Jungle - Fid - Binary - '
|
||||
db 'PRIM8 - IiTM - Topanga - Tig2 - deRanged - RuneStar - '
|
||||
db '_RyAn_ - DaParasit - Spansh - CodeX - Wicked - '
|
||||
db 'Likwid - KingTroll - tpanther - ED_Lead - Reptile - '
|
||||
|
||||
db 0
|
||||
dw Cross,NoIdea
|
||||
|
||||
NoIdea:
|
||||
db 'Noidea - ^Para^ - Wh0is - Chiew - [QWORD] - LoneWolf - '
|
||||
db 'DaveDavis - PsYkOtIk - ^Ion^ - Weathros - LittleLoc - '
|
||||
db 'MissMilla - Centmo - Entlin - CreepGuy - eom - Xico - '
|
||||
db '^Axe^ & Sturnella - Almighty - o - Zyklon - hammr - '
|
||||
db '|Geo| - '
|
||||
db 'MarkIII (Hi Dad) - Diamond1 & Mermaid1 (Hi Sis1 and Sis2 :) - '
|
||||
|
||||
db 0
|
||||
dw Flies,Snoo
|
||||
|
||||
Snoo:
|
||||
db 'Snoo - Queen1 & Truely - Shama - Pink^Rose - Divebum - '
|
||||
db 'DEWDROP - KaDaM2 - Freakmama - mr007 - SIOK - Alih - '
|
||||
db 'Asterix - MoKie - Rats - RoadRoach - masdale - mystie - '
|
||||
|
||||
db 'e|ectricTom - Techa^ - TX-Cowboy - buch - luth - '
|
||||
|
||||
db 0
|
||||
dw Cross,Eche
|
||||
|
||||
Eche:
|
||||
db 'BaBs - Ratty - Lexzy - PJ - Blondii - dew - Kittie - '
|
||||
db '^Kristi - strawbery - grlafraid - Krystal1 - ortho - '
|
||||
db 'Danni_ - Anne^ - brokngrl - keldog - AnGelDevo - '
|
||||
db '^DE^ - Avantyful & Niece babe :) - mauddib - lil_miss - '
|
||||
db 'Eche & Godis^ hehehehe - lowlife - X & W - '
|
||||
db '******** And Everyone else OnlyMe! dun MISSED '
|
||||
db '*** THE END IS NOT NEIGH *** '
|
||||
db '---====*** Begin Again ---> ',0
|
||||
|
||||
dw Cube,Begin
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;Do IT!
|
||||
|
||||
Main:
|
||||
mov ax,013 ;VGA GFX mode = 320 x 200 x 256
|
||||
int 010
|
||||
|
||||
mov cx,(320*18)/2 ;Erase bump map buffer
|
||||
mov di,Bumps
|
||||
xor ax,ax
|
||||
rep stosw
|
||||
|
||||
call GetPalette ;Create shaded palette
|
||||
call GetFont ;Read font data out of ROM into current DS
|
||||
call InitScroll ;Point to font data for first char of banner
|
||||
|
||||
mov ax,0a000 ;Point ES at video segment
|
||||
mov es,ax
|
||||
|
||||
L0:
|
||||
call ChangeAngles ;Get next angle of rotation for all axis
|
||||
call GetSinCos ;Calculate Sin and Cos for all rotation angles
|
||||
call DoFrame ;Rotate all points of shape and display
|
||||
call DoScroll ;Scroll text through bump map buffer
|
||||
call DoBump ;Bump map scrolly text and display it
|
||||
call Retrace ;Wait for next raster frame
|
||||
call ErasePoints ;Erase all pixles that are 8 frames old
|
||||
call DoDeltas ;Modify rotational speeds etc
|
||||
|
||||
in al,060 ;Read keyboard port
|
||||
cmp al,081 ;Escape key released?
|
||||
jne L0
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;Exit nicely
|
||||
|
||||
mov ax,3 ;Back to textmode
|
||||
int 010
|
||||
mov ah,2 ;Place cursor at bottom left of display
|
||||
mov dx,01700
|
||||
xor bx,bx
|
||||
int 010
|
||||
mov dx,AuRevoir
|
||||
mov ah,9
|
||||
int 021
|
||||
mov ah,04c ;Return control to dos
|
||||
int 021
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;Do one frame of rotating object. Calculate and plot all points
|
||||
|
||||
;DI points to first trail buffer. We store the address of every pixle
|
||||
;we write into this buffer. When it comes time to erase these pixles we
|
||||
;do not need to recalculat them. We just collect the address!
|
||||
|
||||
DoFrame:
|
||||
xor ch,ch ;Clear hi byte of loop counter
|
||||
xor di,di ;Point to start of trail buffer
|
||||
mov si,[Shape] ;Point to object to be rotated
|
||||
mov cl,[si] ;Get number of points
|
||||
mov NumPoints,cx ;We need this count later too...
|
||||
inc si
|
||||
L0:
|
||||
movsx ax,[si] ;Get X coordinate of point
|
||||
mov [X],ax
|
||||
movsx ax,[si+1] ;Get Y coordinate
|
||||
mov [Y],ax
|
||||
movsx ax,[si+2] ;Get Z coordinate
|
||||
mov [Z],ax
|
||||
call Rotate ;Rotate point in 3d
|
||||
call Draw ;Draw this point
|
||||
add si,3 ;Point to next point
|
||||
add di,2 ;point to next slot of trail buffer
|
||||
dec cx
|
||||
jne L0
|
||||
ret
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;Project a single XYZ point into 2D space on screen
|
||||
|
||||
Draw:
|
||||
mov ax,[YOff] ;YOff * Y / Z+ZOff = Screen Y
|
||||
imul [Y]
|
||||
mov bx,[Z]
|
||||
add bx,[ZOff]
|
||||
idiv bx
|
||||
add ax,[HalfV] ;Centre object on screen
|
||||
|
||||
cmp dx,0 ;Clip this pixle if outside display area
|
||||
jb short ret
|
||||
cmp ax,200
|
||||
ja short ret
|
||||
|
||||
mov bx,320 ;Calculate 320 * Y...
|
||||
imul bx
|
||||
|
||||
mov bx,ax
|
||||
|
||||
mov ax,[XOff] ;XOff * X / Z+ ZOff = Screen X
|
||||
mov bp,[X]
|
||||
imul bp
|
||||
mov bp,[Z]
|
||||
add bp,[ZOff] ;Distance
|
||||
idiv bp
|
||||
add ax,[HalfH]
|
||||
|
||||
cmp dx,0 ;Clip pixle if outside display area
|
||||
jb short ret
|
||||
cmp ax,320
|
||||
ja short ret
|
||||
|
||||
add bx,ax
|
||||
|
||||
mov ax,-1 ;Generate colour for point based on X Y and Z axis
|
||||
sub ax,[Z] ; of dot
|
||||
xor ax,[X] ;Divides cube into 8 smaller cubes and alternates
|
||||
or ax,[Y] ; light/dark (opposite corners same shade)
|
||||
shr ax,4
|
||||
add ax,[X] ;This addition makes the cube stripey man :)
|
||||
add ax,[Y]
|
||||
|
||||
es mov [bx],al ;Place a dot with color al
|
||||
mov Trail8[di],bx ;Save address for erase
|
||||
ret
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;Erase pixles that are 8 frames old.
|
||||
|
||||
;Every time a pixles is drawn to the display we remember its video
|
||||
;offset (address). This saves time when we want to erase that dot
|
||||
;because we dont need to recalculate the address given an XYZ
|
||||
|
||||
ErasePoints:
|
||||
xor di,di
|
||||
mov cx,MaxPoints
|
||||
L0:
|
||||
mov bx,Trail8[di] ;Pixles added to display on THIS frame
|
||||
; es dec b[bx] ; Make them less bright
|
||||
xchg bx,Trail7[di] ;Pixles one frame old
|
||||
; es dec b[bx] ; Make them less bright
|
||||
xchg bx,Trail6[di] ;Etc...
|
||||
; es dec b[bx]
|
||||
xchg bx,Trail5[di]
|
||||
; es dec b[bx]
|
||||
xchg bx,Trail4[di]
|
||||
; es dec b[bx]
|
||||
xchg bx,Trail3[di]
|
||||
; es dec b[bx]
|
||||
xchg bx,Trail2[di]
|
||||
; es dec b[bx]
|
||||
xchg bx,Trail1[di] ;Pixles 8 frames old
|
||||
es mov b[bx],0 ;Erase them
|
||||
inc di,2
|
||||
dec cx
|
||||
jne L0
|
||||
ret
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;Rotate a single point in 3D space
|
||||
|
||||
Rotate:
|
||||
push cx ;Need to keep this....
|
||||
|
||||
;Rotate object about X axis (changes Y and Z)
|
||||
;
|
||||
;Y' = Y * Cos(Xang) - Z. Sin(Xang)
|
||||
;Z' = Y * Sin(Xang) + Z. Cos(Xang)
|
||||
|
||||
movsx eax,[Z] ;Get Z * Sin(X)
|
||||
movsx ebx,[XSin]
|
||||
mul ebx
|
||||
mov ecx,eax ;Save in cx...
|
||||
movsx eax,[Y] ;Get Y * Cos(x)
|
||||
movsx ebx,[XCos]
|
||||
imul ebx
|
||||
sub eax,ecx ;Get Y * Cos(X) - Z * Sin(X)
|
||||
sar eax,14 ;Sin and Cos Table values are scaled up
|
||||
mov bp,ax ; by 16384. SHR scales results back down
|
||||
|
||||
;We just calculated our new Y coordinate. We cant yet overwrite the old
|
||||
;Y because we still need it to calculated the new Z
|
||||
|
||||
movsx eax,[Z] ;Get Z * Cos(X) Exact opposite of above!
|
||||
movsx ebx,[XCos]
|
||||
imul ebx
|
||||
mov ecx,eax ;Save value...
|
||||
movsx eax,[Y] ;Get Y * Sin(X)
|
||||
movsx ebx,[XSin]
|
||||
imul ebx
|
||||
add eax,ecx ;Get Y * Sin(X) + Z * Cos(X)
|
||||
sar eax,14 ;Scale results down by 16384
|
||||
|
||||
mov [Y],bp ;Set newly calculated Y and Z coordinates
|
||||
mov [Z],ax
|
||||
|
||||
;Rotate point in Y axis
|
||||
;
|
||||
;X' = X * Cos(Yang) - Z * Sin(Yang)
|
||||
;Z' = X * Sin(Yang) + Z * Cos(Yang)
|
||||
|
||||
movsx eax,[Z] ;Following code is very similar to above.
|
||||
movsx ebx,[YSin] ;It rotates the point in the Y axis
|
||||
imul ebx ;I.E. It calculates new X and Z
|
||||
mov ecx,eax
|
||||
movsx eax,[X]
|
||||
movsx ebx,[YCos]
|
||||
imul ebx
|
||||
sub eax,ecx
|
||||
sar eax,14
|
||||
mov bp,ax ;Save new X coord
|
||||
|
||||
movsx eax,[Z] ;Calculate Z
|
||||
movsx ebx,[YCos]
|
||||
imul ebx
|
||||
mov ecx,eax
|
||||
movsx eax,[X]
|
||||
movsx ebx,[YSin]
|
||||
imul ebx
|
||||
add eax,ecx
|
||||
sar eax,14
|
||||
|
||||
mov [X],bp ;Set new X and Z for point
|
||||
mov [Z],ax
|
||||
|
||||
;Rotate objecct along Z axis
|
||||
;
|
||||
;X' = X * Cos(Zang) - Y * Sin(Zang)
|
||||
;Y' = X * Sin(Zang) + Y * Cos(Zang)
|
||||
|
||||
movsx eax,[Y] ;Hmmm isnt this... the same, arent we just
|
||||
movsx ebx,[ZSin] ;doing the same, calculations on in exactly
|
||||
imul ebx ;The same, way but using different
|
||||
mov ecx,eax ;Variables? Couldnt we optimise here ???
|
||||
movsx eax,[X]
|
||||
movsx ebx,[ZCos] ;Answer...
|
||||
imul ebx ;
|
||||
sub eax,ecx ;Yes! But that is a space optimisation
|
||||
sar eax,14 ;Not a speed optimisation. The INLINE
|
||||
mov bp,ax ;method is faster
|
||||
|
||||
movsx eax,[Y] ;There is also a much better way to do this
|
||||
movsx ebx,[ZCos] ;that is both smaller and faster.
|
||||
imul ebx
|
||||
mov ecx,eax ;I.E. Use a Matrix to rotates points
|
||||
movsx eax,[X] ;This however is much easier to follow
|
||||
movsx ebx,[ZSin] ;and MAFFZ wuzz never my strong suit :)
|
||||
imul ebx
|
||||
add eax,ecx ;Maybe if this gets too.. slow ill use
|
||||
sar eax,14 ;matricies tho :)
|
||||
|
||||
mov [X],bp
|
||||
mov [Y],ax
|
||||
pop cx
|
||||
ret
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;calculate new angles of rotation for all points (to angles)
|
||||
|
||||
;We do NOT rotate a point by 1 degree on one frame and then rotate that
|
||||
;rotated point by 1 degree in the next. We rotate by 1 degree in the
|
||||
;first frame, by 2 in the next, by 3 in the next etc.
|
||||
|
||||
;Every time a point is rotated there is a slight ammount of error in our
|
||||
;calculation. If we rotated previously rotated points we would accumulate
|
||||
;errors on each rotation of the point and our object would distort.
|
||||
|
||||
;By rotating the SAME points (i.e the original shape) on every frame but
|
||||
;by different ammounts each time, we never distort our shape by more
|
||||
;than ONE rotations worth of error (which u cant see :)
|
||||
|
||||
ChangeAngles:
|
||||
mov ax,[DeltaX] ;Adjust X angles of rotation
|
||||
add [XAngle],ax
|
||||
mov ax,[DeltaY] ;And Y
|
||||
add [YAngle],ax
|
||||
mov ax,[DeltaZ] ;And Z
|
||||
add [ZAngle],ax
|
||||
ret
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;Get Sin and Cos of all 3 angles of rotation.
|
||||
|
||||
GetSinCos:
|
||||
mov ax,[XAngle] ;Get angle
|
||||
call SinCos ;Get Sin and Cos
|
||||
mov [XSin],ax ;Save em!
|
||||
mov [XCos],bx
|
||||
|
||||
mov ax,[YAngle] ;Same but different :)
|
||||
call SinCos
|
||||
mov [YSin],ax
|
||||
mov [YCos],bx
|
||||
|
||||
mov ax,[ZAngle] ;Same but different :)
|
||||
call SinCos
|
||||
mov [ZSin],ax
|
||||
mov [ZCos],bx
|
||||
ret
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;This moves a value between two limits at a specific rate.
|
||||
|
||||
;This code uses the structure defined at the top of the source file.
|
||||
|
||||
;The structure is defined as...
|
||||
;
|
||||
; struc [bx]
|
||||
;
|
||||
;This makes the address in BX the base of the structure. A86 now allows
|
||||
;us to just name the structure element without reference to BX, This makes
|
||||
;the code easier to read if you understand the mechanism but impossible to
|
||||
;follow if you dont :)
|
||||
|
||||
;Where you see a something like
|
||||
;
|
||||
; dec Counter
|
||||
;
|
||||
;read....
|
||||
;
|
||||
; dec Counter[bx]
|
||||
;
|
||||
|
||||
DoDeltas:
|
||||
mov bx,W1 ;Modify X rotation
|
||||
call >L0
|
||||
mov bx,W2 ;Modify Y rotation
|
||||
call >L0
|
||||
mov bx,W3 ;Modify Z rotation
|
||||
call >L0
|
||||
mov bx,W4 ;Zoom in and out
|
||||
|
||||
L0:
|
||||
dec Counter ;Count down to next change
|
||||
jne ret
|
||||
mov ax,Reset ;Counter hit ZERO. Reset it
|
||||
mov Counter,ax
|
||||
mov ax,Delta ;Get rate. of change (also direction)
|
||||
mov si,Position ;Get pointer to variable to modify
|
||||
add ax,[si] ;Add delta to variable
|
||||
mov [si],ax ;Store back
|
||||
cmp ax,Upper ;Did variable reach upper limit?
|
||||
jl >L2
|
||||
L1:
|
||||
neg Delta ;Change direction!
|
||||
ret
|
||||
L2:
|
||||
cmp ax,Lower ;Did variable reach lower limit?
|
||||
jl L1
|
||||
ret
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;MOA's bump mapping routine. (Yea im uzing this again hehe I like it :)
|
||||
;-------------------------------------------------------------------------
|
||||
|
||||
DoBump:
|
||||
mov ax,0a000 ;Point to video
|
||||
mov es,ax
|
||||
|
||||
mov si,BumpMap+320*16 ;Point to end of last line of bumpmap
|
||||
|
||||
mov di,16 ;16 scan lines
|
||||
mov ax,di
|
||||
sub ax,SpotY
|
||||
mov BumpY,ax
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
|
||||
L0:
|
||||
mov ax,320-2 ;320 Pels per scan
|
||||
mov cx,ax
|
||||
sub ax,SpotX
|
||||
mov BumpX,ax
|
||||
|
||||
L1:
|
||||
mov ax,-1[si] ;Look... No spotlight :) (Addition by OnlyMe)
|
||||
or al,1[si]
|
||||
or ax,-321[si]
|
||||
or al,321[si]
|
||||
test ax
|
||||
jz >L9
|
||||
|
||||
xor ah,ah ;Clear scratch registers
|
||||
xor bh,bh
|
||||
mov al,[si+1] ;Read bump heights to left and right of this bump
|
||||
mov bl,[si-1]
|
||||
sub ax,bx ;Compute differenct
|
||||
sub ax,BumpX ;I think this gets a 2D normal (erm)
|
||||
cwd
|
||||
xor ax,dx
|
||||
sub ax,dx ;But Maff izznt my strong suit
|
||||
mov bx,07f
|
||||
sub bx,ax
|
||||
mov ax,bx
|
||||
cwd
|
||||
not dx
|
||||
and bx,dx
|
||||
push bx
|
||||
|
||||
xor ah,ah ;When i understand how this code actually
|
||||
xor bh,bh ; works ill add propper comments. Maybe someone
|
||||
mov al,[si+0141] ; can fill me in eh
|
||||
mov bl,[si-0140]
|
||||
sub ax,bx
|
||||
sub ax,BumpY
|
||||
cwd
|
||||
xor ax,dx
|
||||
sub ax,dx
|
||||
mov bx,07F
|
||||
sub bx,ax
|
||||
mov ax,bx
|
||||
cwd
|
||||
not dx
|
||||
and bx,dx
|
||||
|
||||
pop ax
|
||||
mul bl
|
||||
shr ax,6+2
|
||||
|
||||
L9:
|
||||
; shr ax,2
|
||||
; add ax,5
|
||||
es mov 0e600-BumpMap[si],al
|
||||
|
||||
dec BumpX
|
||||
dec si
|
||||
loop L1
|
||||
|
||||
dec BumpY
|
||||
sub si,2
|
||||
dec di
|
||||
jnz L0
|
||||
ret
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
|
||||
DoScroll:
|
||||
xor si,si ;First pixle row in current column
|
||||
|
||||
mov bx,BumpMap ;Erm... Actually.... This is wrong... hehehe
|
||||
mov bp,[CharP] ;Point to characters font data
|
||||
mov dh,b[CharColumn] ;Get column mask
|
||||
L0:
|
||||
xor cx,cx ;Assume no bumps (0 pixle)
|
||||
mov al,[bp+si] ;Get character row from font
|
||||
and al,dh ;Mask out all but current column
|
||||
if nz mov cx,03030 ;Raise bumps
|
||||
mov [bx],cx ;Write double width pixle
|
||||
mov 320[bx],cx ;Double height too!
|
||||
add bx,2*320
|
||||
inc si ;Add 1 to row
|
||||
cmp si,8 ;Font is 8 by 8
|
||||
jne L0
|
||||
|
||||
mov ax,ds
|
||||
mov es,ax
|
||||
|
||||
mov si,BumpMap ;Scroll bumpmap 2 pixles left
|
||||
mov di,si ;pixles at far left move to far right hehehe
|
||||
add si,2
|
||||
mov cx,320*16/2
|
||||
rep movsw
|
||||
|
||||
ror CharColumn,1 ;Shift row mask 1
|
||||
jnc short ret ;Wrap round and compute next char
|
||||
|
||||
InitScroll:
|
||||
mov si,[BannerP] ;Get pointer to next char in banner
|
||||
test b[si] ;End of text?
|
||||
jnz >L0
|
||||
|
||||
inc si
|
||||
lodsw
|
||||
mov [Shape],ax
|
||||
lodsw
|
||||
mov si,ax
|
||||
|
||||
L0:
|
||||
xor ah,ah
|
||||
lodsb ;Get text character
|
||||
mov [BannerP],si
|
||||
shl ax,3 ;Compute chars ROM offset
|
||||
add ax,Font
|
||||
mov CharP,ax ;Points to font data for character
|
||||
ret
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;Get a copy of the font data out of ROM into default DS
|
||||
|
||||
GetFont:
|
||||
mov ax,0f000 ;Point to ROM
|
||||
mov ds,ax
|
||||
mov si,0fa6e ;Offset to font data in ROM
|
||||
mov di,Font
|
||||
mov cx,256*2
|
||||
rep movsw
|
||||
mov ax,cs
|
||||
mov ds,ax
|
||||
ret
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;Write a KEWL purple palette (Shut Up! I like PuRplE :P)
|
||||
|
||||
GetPalette:
|
||||
mov dx,03C8 ;Write new palette
|
||||
xor cx,cx
|
||||
xor ax,ax
|
||||
out dx,al
|
||||
inc dx
|
||||
L0:
|
||||
mov al,cl ;Select colour number to updata
|
||||
out dx,al ;Write Red
|
||||
xchg ah,al
|
||||
out dx,al ;Write Green (Zero)
|
||||
xchg ah,al
|
||||
out dx,al ;Write Blue
|
||||
inc cl
|
||||
jnz L0
|
||||
ret
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;Shape structure defined as....
|
||||
;
|
||||
; db number-of-points
|
||||
; db x,y,z of first point
|
||||
; db x,y,z ... of rest
|
||||
|
||||
Cube:
|
||||
db 125
|
||||
db -35,-35,-35,-35,-35,-15,-35,-35, 05,-35,-35, 25,-35,-35, 45
|
||||
db -35,-15,-35,-35,-15,-15,-35,-15, 05,-35,-15, 25,-35,-15, 45
|
||||
db -35, 05,-35,-35, 05,-15,-35, 05, 05,-35, 05, 25,-35, 05, 45
|
||||
db -35, 25,-35,-35, 25,-15,-35, 25, 05,-35, 25, 25,-35, 25, 45
|
||||
db -35, 45,-35,-35, 45,-15,-35, 45, 05,-35, 45, 25,-35, 45, 45
|
||||
db -15,-35,-35,-15,-35,-15,-15,-35, 05,-15,-35, 25,-15,-35, 45
|
||||
db -15,-15,-35,-15,-15,-15,-15,-15, 05,-15,-15, 25,-15,-15, 45
|
||||
db -15, 05,-35,-15, 05,-15,-15, 05, 05,-15, 05, 25,-15, 05, 45
|
||||
db -15, 25,-35,-15, 25,-15,-15, 25, 05,-15, 25, 25,-15, 25, 45
|
||||
db -15, 45,-35,-15, 45,-15,-15, 45, 05,-15, 45, 25,-15, 45, 45
|
||||
db 05,-35,-35, 05,-35,-15, 05,-35, 05, 05,-35, 25, 05,-35, 45
|
||||
db 05,-15,-35, 05,-15,-15, 05,-15, 05, 05,-15, 25, 05,-15, 45
|
||||
db 05, 05,-35, 05, 05,-15, 05, 05, 05, 05, 05, 25, 05, 05, 45
|
||||
db 05, 25,-35, 05, 25,-15, 05, 25, 05, 05, 25, 25, 05, 25, 45
|
||||
db 05, 45,-35, 05, 45,-15, 05, 45, 05, 05, 45, 25, 05, 45, 45
|
||||
db 25,-35,-35, 25,-35,-15, 25,-35, 05, 25,-35, 25, 25,-35, 45
|
||||
db 25,-15,-35, 25,-15,-15, 25,-15, 05, 25,-15, 25, 25,-15, 45
|
||||
db 25, 05,-35, 25, 05,-15, 25, 05, 05, 25, 05, 25, 25, 05, 45
|
||||
db 25, 25,-35, 25, 25,-15, 25, 25, 05, 25, 25, 25, 25, 25, 45
|
||||
db 25, 45,-35, 25, 45,-15, 25, 45, 05, 25, 45, 25, 25, 45, 45
|
||||
db 45,-35,-35, 45,-35,-15, 45,-35, 05, 45,-35, 25, 45,-35, 45
|
||||
db 45,-15,-35, 45,-15,-15, 45,-15, 05, 45,-15, 25, 45,-15, 45
|
||||
db 45, 05,-35, 45, 05,-15, 45, 05, 05, 45, 05, 25, 45, 05, 45
|
||||
db 45, 25,-35, 45, 25,-15, 45, 25, 05, 45, 25, 25, 45, 25, 45
|
||||
db 45, 45,-35, 45, 45,-15, 45, 45, 05, 45, 45, 25, 45, 45, 45
|
||||
|
||||
Star:
|
||||
db 65
|
||||
db -35,-35, 05,-35,-15, 05,-35, 05, 05,-35, 25, 05,-35, 45, 05
|
||||
db -15,-35, 05,-15,-15, 05,-15, 05, 05,-15, 25, 05,-15, 45, 05
|
||||
db 05,-35, 05, 05,-15, 05, 05, 05, 05, 05, 25, 05, 05, 45, 05
|
||||
db 25,-35, 05, 25,-15, 05, 25, 05, 05, 25, 25, 05, 25, 45, 05
|
||||
db 45,-35, 05, 45,-15, 05, 45, 05, 05, 45, 25, 05, 45, 45, 05
|
||||
db 05,-35,-35, 05,-35,-15, 05,-35, 25, 05,-35, 45,-35, 05,-35
|
||||
db 05,-15,-35, 05,-15,-15, 05,-15, 25, 05,-15, 45,-15, 05,-35
|
||||
db 05, 05,-35, 05, 05,-15, 05, 05, 25, 05, 05, 45, 05, 05,-35
|
||||
db 05, 25,-35, 05, 25,-15, 05, 25, 25, 05, 25, 45, 25, 05,-35
|
||||
db 05, 45,-35, 05, 45,-15, 05, 45, 25, 05, 45, 45, 45, 05,-35
|
||||
db -35, 05,-15,-35, 05, 25,-35, 05, 45,-15, 05,-15,-15, 05, 25
|
||||
db -15, 05, 45, 05, 05,-15, 05, 05, 25, 05, 05, 45, 25, 05,-15
|
||||
db 25, 05, 25, 25, 05, 45, 45, 05,-15, 45, 05, 25, 45, 05, 45
|
||||
|
||||
Flies:
|
||||
db 6
|
||||
db -35,-35,-35,-35,-35, 45, 45, 45,-35, 45, 45, 45, 5,-35, 5
|
||||
db 5, 45, 5
|
||||
|
||||
Square:
|
||||
db 25
|
||||
db -35,-35,-35,-35,-15,-35,-35, 05,-35,-35, 25,-35,-35, 45,-35
|
||||
db -15,-35,-35,-15,-15,-35,-15, 05,-35,-15, 25,-35,-15, 45,-35
|
||||
db 05,-35,-35, 05,-15,-35, 05, 05,-35, 05, 25,-35, 05, 45,-35
|
||||
db 25,-35,-35, 25,-15,-35, 25, 05,-35, 25, 25,-35, 25, 45,-35
|
||||
db 45,-35,-35, 45,-15,-35, 45, 05,-35, 45, 25,-35, 45, 45,-35
|
||||
|
||||
Heart:
|
||||
db 32
|
||||
db -35,-15,-35,-35, 25,-35,-15,-35,-35,-15,-15,-35,-15, 05,-35
|
||||
db -15, 25,-35,-15, 45,-35, 05,-35,-35, 05,-15,-35, 05, 05,-35
|
||||
db 05, 25,-35, 05, 45,-35, 25,-15,-35, 25, 05,-35, 25, 25,-35
|
||||
db 45, 05,-35
|
||||
db -30,-10,-30,-30, 20,-30,-10,-30,-30,-10,-10,-30,-10, 00,-30
|
||||
db -10, 20,-30,-10, 40,-30, 00,-30,-30, 00,-10,-30, 00, 00,-30
|
||||
db 00, 20,-30, 00, 40,-30, 20,-10,-30, 20, 00,-30, 20, 20,-30
|
||||
db 40, 00,-30
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
;I discovered this one completely by accident. I moved a table from the
|
||||
;end of this file to somewhere up there... but forgot to move the label
|
||||
;(hehehe). I was therfor referencing a table that is INCLUDED here by my
|
||||
;assembler. It had lotsa junk in with it at first but i cleaned that out
|
||||
;and this was the result. I love this object :) its KEWKL hehehe!
|
||||
|
||||
Cross:
|
||||
db 75
|
||||
db 000,000,019,000,005,019,000,014,001,000,032,000,000,07D,000
|
||||
db 000,0C9,000,001,05F,001,001,0AB,001,001,0F6,001,002,041,002
|
||||
db 002,08D,002,002,0D8,002,003,023,003,003,005,004,003,06F,003
|
||||
db 003,0BA,003,004,051,004,004,09C,004,004,0E7,004,005,013,006
|
||||
db 005,032,005,005,07D,005,005,0C8,005,006,05E,006,006,0A9,006
|
||||
db 006,0F4,006,007,03F,007,007,08A,007,007,0D5,007,008,000,009
|
||||
db 008,020,008,008,06B,008,008,0B5,008,009,04B,009,009,095,009
|
||||
db 009,0E0,009,00A,009,00B,00A,02A,00A,00A,075,00A,00A,0BF,00A
|
||||
db 00B,054,00B,00D,007,026,00F,002,028,019,009,032,01E,004,037
|
||||
db 022,00B,03B,02C,006,045,02D,001,046,039,008,052,03D,003,056
|
||||
db 043,00A,05C,04B,000,064,04B,005,064,058,007,071,05B,002,074
|
||||
db 064,009,07C,084,008,09C,088,003,0A1,08D,00A,0A6,096,000,0AF
|
||||
db 096,005,0AF,0A3,007,0BC,0A6,002,0BF,0AE,009,0C7,0B5,004,0CE
|
||||
db 0C2,006,0DB,0C4,001,0DD,0CE,008,0E7,0D3,003,0EC,0D8,00A,0F1
|
||||
db 0E1,005,0FA,0E2,000,0FB,0EE,007,007,0F1,002,00A,0F9,009,011
|
||||
|
||||
;=========================================================================
|
||||
|
BIN
wmdots/wmdots/old_dos_demo/dow.com
Normal file
BIN
wmdots/wmdots/old_dos_demo/dow.com
Normal file
Binary file not shown.
528
wmdots/wmdots/old_dos_demo/sintab.s
Normal file
528
wmdots/wmdots/old_dos_demo/sintab.s
Normal file
|
@ -0,0 +1,528 @@
|
|||
;Sin and Cos tables based on 4096 degree circle.
|
||||
;-------------------------------------------------------------------------
|
||||
|
||||
;Does not extend table by a right angle to account for COS...
|
||||
; Code takes care of this!
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
|
||||
even 2
|
||||
|
||||
SinTab:
|
||||
dw 00000,00019,00032,0004b,00064,0007d,00096,000af ;000
|
||||
dw 000c9,000e2,000fb,00114,0012d,00146,0015f,00178 ;008
|
||||
dw 00192,001ab,001c4,001dd,001f6,0020f,00228,00241 ;010
|
||||
dw 0025b,00274,0028d,002a6,002bf,002d8,002f1,0030a ;018
|
||||
dw 00323,0033d,00356,0036f,00388,003a1,003ba,003d3 ;020
|
||||
dw 003ec,00405,0041e,00437,00451,0046a,00483,0049c ;028
|
||||
dw 004b5,004ce,004e7,00500,00519,00532,0054b,00564 ;030
|
||||
dw 0057d,00596,005af,005c8,005e1,005fa,00613,0062c ;038
|
||||
dw 00645,0065e,00677,00690,006a9,006c2,006db,006f4 ;040
|
||||
dw 0070d,00726,0073f,00758,00771,0078a,007a3,007bc ;048
|
||||
dw 007d5,007ee,00807,00820,00839,00852,0086b,00884 ;050
|
||||
dw 0089c,008b5,008ce,008e7,00900,00919,00932,0094b ;058
|
||||
dw 00964,0097c,00995,009ae,009c7,009e0,009f9,00a11 ;060
|
||||
dw 00a2a,00a43,00a5c,00a75,00a8d,00aa6,00abf,00ad8 ;068
|
||||
dw 00af1,00b09,00b22,00b3b,00b54,00b6c,00b85,00b9e ;070
|
||||
dw 00bb6,00bcf,00be8,00c01,00c19,00c32,00c4b,00c63 ;078
|
||||
dw 00c7c,00c95,00cad,00cc6,00cde,00cf7,00d10,00d08 ;080
|
||||
dw 00d41,00d59,00d72,00d8b,00da3,00dbc,00dd4,00ded ;088
|
||||
dw 00e05,00e1e,00e36,00e4f,00e67,00e80,00e98,00eb1 ;090
|
||||
dw 00ec9,00ee2,00efa,00f12,00f2b,00f43,00f5c,00f74 ;098
|
||||
dw 00f8c,00fa5,00fbd,00fd6,00fee,01006,0101f,01037 ;0a0
|
||||
dw 0104f,01068,01080,01098,010b0,010c9,010e1,010f9 ;0a8
|
||||
dw 01111,0112a,01142,0115a,01172,0118a,011a2,011bb ;0b0
|
||||
dw 011d3,011eb,01203,0121b,01233,0124b,01263,0127b ;0b8
|
||||
dw 01294,012ac,012c4,012dc,012f4,0130c,01324,0133c ;0c0
|
||||
dw 01354,0136c,01383,0139b,013b3,013cb,013e3,013fb ;0c8
|
||||
dw 01413,0142b,01443,0145a,01472,0148a,014a2,014ba ;0d0
|
||||
dw 014d1,014e9,01501,01519,01530,01548,01560,01577 ;0d8
|
||||
dw 0158f,015a7,015be,015d6,015ee,01605,0161d,01634 ;0e0
|
||||
dw 0164c,01664,0167b,01693,016aa,016c2,016d9,016f1 ;0e8
|
||||
dw 01708,0171f,01737,0174e,01766,0177d,01794,017ac ;0f0
|
||||
dw 017c3,017da,017f2,01809,01820,01838,0184f,01866 ;0f8
|
||||
dw 0187d,01895,018ac,018c3,018da,018f1,01908,01920 ;100
|
||||
dw 01937,0194e,01965,0197c,01993,019aa,019c1,019d8 ;108
|
||||
dw 019ef,01a06,01a1d,01a34,01a4b,01a62,01a79,01a8f ;110
|
||||
dw 01aa6,01abd,01ad4,01aeb,01b02,01b18,01b2f,01b46 ;118
|
||||
dw 01b5d,01b73,01b8a,01ba1,01bb7,01bce,01be5,01bfb ;120
|
||||
dw 01c12,01c28,01c3f,01c55,01c6c,01c83,01c99,01caf ;128
|
||||
dw 01cc6,01cdc,01cf3,01d09,01d20,01d36,01d4c,01d63 ;130
|
||||
dw 01d79,01d8f,01da6,01dbc,01dd2,01de8,01dfe,01e15 ;138
|
||||
dw 01e2b,01e41,01e57,01e6d,01e83,01e99,01eb0,01ec6 ;140
|
||||
dw 01edc,01ef2,01f08,01f1e,01f34,01f49,01f5f,01f75 ;148
|
||||
dw 01f8b,01fa1,01fb7,01fcd,01fe2,01ff8,0200e,02024 ;150
|
||||
dw 02039,0204f,02065,0207b,02090,020a6,020bb,020d1 ;158
|
||||
dw 020e7,020fc,02112,02127,0213d,02152,02168,0217d ;160
|
||||
dw 02192,021a8,021bd,021d2,021e8,021fd,02212,02228 ;168
|
||||
dw 0223d,02252,02267,0227d,02292,022a7,022bc,022d1 ;170
|
||||
dw 022e6,022fb,02310,02325,0233a,0234f,02364,02379 ;178
|
||||
dw 0238e,023a3,023b8,023cd,023e1,023f6,0240b,02420 ;180
|
||||
dw 02434,02449,0245e,02473,02487,0249c,024b0,024c5 ;188
|
||||
dw 024da,024ee,02503,02517,0252c,02540,02554,02569 ;190
|
||||
dw 0257d,02592,025a6,025ba,025cf,025e3,025f7,0260b ;198
|
||||
dw 0261f,02634,02648,0265c,02670,02684,02698,026ac ;1a0
|
||||
dw 026c0,026d4,026e8,026fc,02710,02724,02738,0274c ;1a8
|
||||
dw 0275f,02773,02787,0279b,027af,027c2,027d6,027ea ;1b0
|
||||
dw 027fd,02811,02824,02838,0284b,0285f,02872,02886 ;1b8
|
||||
dw 02899,028ad,028c0,028d4,028e7,028fa,0290e,02921 ;1c0
|
||||
dw 02934,02947,0295a,0296e,02981,02994,029a7,029ba ;1c8
|
||||
dw 029cd,029e0,029f3,02a06,02a19,02a2c,02a3f,02a52 ;1d0
|
||||
dw 02a65,02a77,02a8a,02a9d,02ab0,02ac2,02ad5,02ae8 ;1d8
|
||||
dw 02afa,02b0d,02b20,02b32,02b45,02b57,02b6a,02b7c ;1e0
|
||||
dw 02b8e,02ba1,02bb3,02bc6,02bd8,02bea,02bfc,02c0f ;1e8
|
||||
dw 02c21,02c33,02c45,02c57,02c6a,02c7c,02c8e,02ca0 ;1f0
|
||||
dw 02cb2,02cc4,02cd6,02ce8,02cf9,02d0b,02d1d,02d2f ;1f8
|
||||
dw 02d41,02d52,02d64,02d76,02d88,02d99,02dab,02dbc ;200
|
||||
dw 02dce,02de0,02df1,02e03,02e14,02e25,02e37,02e48 ;208
|
||||
dw 02e5a,02e6b,02e7c,02e8d,02e9f,02eb0,02ec1,02ed2 ;210
|
||||
dw 02ee3,02ef4,02f05,02f16,02f28,02f38,02f49,02f5a ;218
|
||||
dw 02f6b,02f7c,02f8d,02f9e,02faf,02fbf,02fd0,02fe1 ;220
|
||||
dw 02ff1,03002,03013,03023,03034,03044,03055,03065 ;228
|
||||
dw 03076,03086,03096,030a7,030b7,030c7,030d8,030e8 ;230
|
||||
dw 030f8,03108,03118,03128,03138,03149,03159,03169 ;238
|
||||
dw 03179,03188,03198,031a8,031b8,031c8,031d8,031e7 ;240
|
||||
dw 031f7,03207,03216,03226,03236,03245,03255,03264 ;248
|
||||
dw 03274,03283,03293,032a2,032b1,032c1,032d0,032df ;250
|
||||
dw 032ee,032fe,0330d,0331c,0332b,0333a,03349,03358 ;258
|
||||
dw 03367,03376,03385,03394,033a3,033b2,033c1,033cf ;260
|
||||
dw 033de,033ed,033fb,0340a,03419,03427,03436,03444 ;268
|
||||
dw 03453,03461,03470,0347e,0348c,0349b,034a9,034b7 ;270
|
||||
dw 034c6,034d4,034e2,034f0,034fe,0350c,0351a,03528 ;278
|
||||
dw 03536,03544,03552,03560,0356e,0357c,03589,03597 ;280
|
||||
dw 035a5,035b3,035c0,035ce,035dc,035e9,035f7,03604 ;288
|
||||
dw 03612,0361f,0362c,0363a,03647,03654,03662,0366f ;290
|
||||
dw 0367c,03689,03696,036a4,036b1,036be,036cb,036d8 ;298
|
||||
dw 036e5,036f1,036fe,0370b,03718,03725,03731,0373e ;2a0
|
||||
dw 0374b,03757,03764,03771,0377d,0378a,03796,037a3 ;2a8
|
||||
dw 037af,037bb,037c8,037d4,037e0,037ed,037f9,03805 ;2b0
|
||||
dw 03811,0381d,03829,03835,03841,0384d,03859,03865 ;2b8
|
||||
dw 03871,0387d,03889,03894,038a0,038ac,038b7,038c3 ;2c0
|
||||
dw 038cf,038da,038e6,038f1,038fd,03908,03913,0391f ;2c8
|
||||
dw 0392a,03935,03941,0394c,03957,03962,0396d,03978 ;2d0
|
||||
dw 03983,0398e,03999,039a4,039af,039ba,039c5,039d0 ;2d8
|
||||
dw 039da,039e5,039f0,039fb,03a05,03a10,03a1a,03a25 ;2e0
|
||||
dw 03a2f,03a3a,03a44,03a4f,03a59,03a63,03a6d,03a78 ;2e0
|
||||
dw 03a82,03a8c,03a96,03aa0,03aaa,03ab4,03abe,03ac8 ;2f0
|
||||
dw 03ad2,03adc,03ae6,03af0,03afa,03b03,03b0d,03b17 ;2f8
|
||||
dw 03b20,03b2a,03b34,03b3d,03b47,03b50,03b59,03b63 ;300
|
||||
dw 03b6c,03b75,03b7f,03b88,03b91,03b9a,03ba3,03bad ;308
|
||||
dw 03bb6,03bbf,03bc8,03bd1,03bda,03be2,03beb,03bf4 ;310
|
||||
dw 03bfd,03c06,03c0e,03c17,03c20,03c28,03c31,03c39 ;318
|
||||
dw 03c42,03c4a,03c53,03c5b,03c63,03c6c,03c74,03c7c ;320
|
||||
dw 03c84,03c8c,03c95,03c9d,03ca5,03cad,03cb5,03cbd ;328
|
||||
dw 03cc5,03ccc,03cd4,03cdc,03ce4,03cec,03cf3,03cfb ;320
|
||||
dw 03d02,03d0a,03d12,03d19,03d21,03d28,03d2f,03d37 ;338
|
||||
dw 03d3e,03d45,03d4d,03d54,03d5b,03d62,03d69,03d70 ;340
|
||||
dw 03d77,03d7e,03d85,03d8c,03d93,03d9a,03da1,03da7 ;348
|
||||
dw 03dae,03db5,03dbb,03dc2,03dc9,03dcf,03dd6,03ddc ;350
|
||||
dw 03de2,03de9,03def,03df5,03dfc,03e02,03e08,03e0e ;358
|
||||
dw 03e14,03e1b,03e21,03e27,03e2d,03e33,03e38,03e3e ;360
|
||||
dw 03e44,03e4a,03e50,03e55,03e5b,03e61,03e66,03e6c ;368
|
||||
dw 03e71,03e77,03e7c,03e82,03e87,03e8c,03e92,03e97 ;370
|
||||
dw 03e9c,03ea1,03ea7,03eac,03eb1,03eb6,03ebb,03ec0 ;378
|
||||
dw 03ec5,03eca,03ece,03ed3,03ed8,03edd,03ee1,03ee6 ;380
|
||||
dw 03eeb,03eef,03ef4,03ef8,03efd,03f01,03f06,03f0a ;388
|
||||
dw 03f0e,03f13,03f17,03f1b,03f1f,03f23,03f27,03f2b ;390
|
||||
dw 03f2f,03f33,03f37,03f3b,03f3f,03f43,03f47,03f4a ;398
|
||||
dw 03f4e,03f52,03f55,03f59,03f5d,03f60,03f64,03f67 ;3a0
|
||||
dw 03f6a,03f6e,03f71,03f74,03f78,03f7b,03f7e,03f81 ;3a8
|
||||
dw 03f84,03f87,03f8a,03f8d,03f90,03f93,03f96,03f99 ;3b0
|
||||
dw 03f9c,03f9e,03fa1,03fa4,03fa6,03fa9,03fac,03fae ;3b8
|
||||
dw 03fb1,03fb3,03fb5,03fb8,03fba,03fbc,03fbf,03fc1 ;3c0
|
||||
dw 03fc3,03fc5,03fc7,03fc9,03fcb,03fcd,03fcf,03fd1 ;3c8
|
||||
dw 03fd3,03fd5,03fd7,03fd8,03fda,03fdc,03fde,03fdf ;3d0
|
||||
dw 03fe1,03fe2,03fe4,03fe5,03fe7,03fe8,03fe9,03feb ;3d8
|
||||
dw 03fec,03fed,03fee,03fef,03ff0,03ff1,03ff2,03ff3 ;3e0
|
||||
dw 03ff4,03ff5,03ff6,03ff7,03ff8,03ff9,03ff9,03ffa ;3e8
|
||||
dw 03ffb,03ffb,03ffc,03ffc,03ffd,03ffd,03ffe,03ffe ;3f0
|
||||
dw 03ffe,03fff,03fff,03fff,03fff,03fff,03fff,03fff ;3f8
|
||||
|
||||
dw 03fff,03fff,03fff,03fff,03fff,03fff,03fff,03fff ;400
|
||||
dw 03ffe,03ffe,03ffe,03ffd,03ffd,03ffc,03ffc,03ffb ;408
|
||||
dw 03ffb,03ffa,03ff9,03ff9,03ff8,03ff7,03ff6,03ff5 ;410
|
||||
dw 03ff4,03ff3,03ff2,03ff1,03ff0,03fef,03fee,03fed ;418
|
||||
dw 03fec,03feb,03fe9,03fe8,03fe7,03fe5,03fe4,03fe2 ;420
|
||||
dw 03fe1,03fdf,03fde,03fdc,03fda,03fd8,03fd7,03fd5 ;428
|
||||
dw 03fd3,03fd1,03fcf,03fcd,03fcb,03fc9,03fc7,03fc5 ;430
|
||||
dw 03fc3,03fc1,03fbf,03fbc,03fba,03fb8,03fb5,03fb3 ;438
|
||||
dw 03fb1,03fae,03fac,03fa9,03fa6,03fa4,03fa1,03f9e ;440
|
||||
dw 03f9c,03f99,03f96,03f93,03f90,03f8d,03f8a,03f87 ;448
|
||||
dw 03f84,03f81,03f7e,03f7b,03f78,03f74,03f71,03f6e ;450
|
||||
dw 03f6a,03f67,03f64,03f60,03f5d,03f59,03f55,03f52 ;458
|
||||
dw 03f4e,03f4a,03f47,03f43,03f3f,03f3b,03f37,03f33 ;460
|
||||
dw 03f2f,03f2b,03f27,03f23,03f1f,03f1b,03f17,03f13 ;468
|
||||
dw 03f0e,03f0a,03f06,03f01,03efd,03ef8,03ef4,03eef ;470
|
||||
dw 03eeb,03ee6,03ee1,03edd,03ed8,03ed3,03ece,03eca ;478
|
||||
dw 03ec5,03ec0,03ebb,03eb6,03eb1,03eac,03ea7,03ea1 ;480
|
||||
dw 03e9c,03e97,03e92,03e8c,03e87,03e82,03e7c,03e77 ;488
|
||||
dw 03e71,03e6c,03e66,03e61,03e5b,03e55,03e50,03e4a ;490
|
||||
dw 03e44,03e3e,03e38,03e33,03e2d,03e27,03e21,03e1b ;498
|
||||
dw 03e14,03e0e,03e08,03e02,03dfc,03df5,03def,03de9 ;4a0
|
||||
dw 03de2,03ddc,03dd6,03dcf,03dc9,03dc2,03dbb,03db5 ;4a8
|
||||
dw 03dae,03da7,03da1,03d9a,03d93,03d8c,03d85,03d7e ;4b0
|
||||
dw 03d77,03d70,03d69,03d62,03d5b,03d54,03d4d,03d45 ;4b8
|
||||
dw 03d3e,03d37,03d2f,03d28,03d21,03d19,03d12,03d0a ;4c0
|
||||
dw 03d02,03cfb,03cf3,03cec,03ce4,03cdc,03cd4,03ccc ;4c8
|
||||
dw 03cc5,03cbd,03cb5,03cad,03ca5,03c9d,03c95,03c8c ;4d0
|
||||
dw 03c84,03c7c,03c74,03c6c,03c63,03c5b,03c53,03c4a ;4d8
|
||||
dw 03c42,03c39,03c31,03c28,03c20,03c17,03c0e,03c06 ;4e0
|
||||
dw 03bfd,03bf4,03beb,03be2,03bda,03bd1,03bc8,03bbf ;4e8
|
||||
dw 03bb6,03bad,03ba3,03b9a,03b91,03b88,03b7f,03b75 ;4f0
|
||||
dw 03b6c,03b63,03b59,03b50,03b47,03b3d,03b34,03b2a ;4f8
|
||||
dw 03b20,03b17,03b0d,03b03,03afa,03af0,03ae6,03adc ;500
|
||||
dw 03ad2,03ac8,03abe,03ab4,03aaa,03aa0,03a96,03a8c ;508
|
||||
dw 03a82,03a78,03a6d,03a63,03a59,03a4f,03a44,03a3a ;510
|
||||
dw 03a2f,03a25,03a1a,03a10,03a05,039fb,039f0,039e5 ;518
|
||||
dw 039da,039d0,039c5,039ba,039af,039a4,03999,0398e ;520
|
||||
dw 03983,03978,0396d,03962,03957,0394c,03941,03935 ;528
|
||||
dw 0392a,0391f,03913,03908,038fd,038f1,038e6,038da ;530
|
||||
dw 038cf,038c3,038b7,038ac,038a0,03894,03889,0387d ;538
|
||||
dw 03871,03865,03859,0384d,03841,03835,03829,0381d ;540
|
||||
dw 03811,03805,037f9,037ed,037e0,037d4,037c8,037bb ;548
|
||||
dw 037af,037a3,03796,0378a,0377d,03771,03764,03757 ;550
|
||||
dw 0374b,0373e,03731,03725,03718,0370b,036fe,036f1 ;558
|
||||
dw 036e5,036d8,036cb,036be,036b1,036a4,03696,03689 ;560
|
||||
dw 0367c,0366f,03662,03654,03647,0363a,0362c,0361f ;568
|
||||
dw 03612,03604,035f7,035e9,035dc,035ce,035c0,035b3 ;570
|
||||
dw 035a5,03597,03589,0357c,0356e,03560,03552,03544 ;578
|
||||
dw 03536,03528,0351a,0350c,034fe,034f0,034e2,034d4 ;580
|
||||
dw 034c6,034b7,034a9,0349b,0348c,0347e,03470,03461 ;588
|
||||
dw 03453,03444,03436,03427,03419,0340a,033fb,033ed ;590
|
||||
dw 033de,033cf,033c1,033b2,033a3,03394,03385,03376 ;598
|
||||
dw 03367,03358,03349,0333a,0332b,0331c,0330d,032fe ;5a0
|
||||
dw 032ee,032df,032d0,032c1,032b1,032a2,03293,03283 ;5a8
|
||||
dw 03274,03264,03255,03245,03236,03226,03216,03207 ;5b0
|
||||
dw 031f7,031e7,031d8,031c8,031b8,031a8,03198,03188 ;5b8
|
||||
dw 03179,03169,03159,03149,03138,03128,03118,03108 ;5c0
|
||||
dw 030f8,030e8,030d8,030c7,030b7,030a7,03096,03086 ;5c8
|
||||
dw 03076,03065,03055,03044,03034,03023,03013,03002 ;5d0
|
||||
dw 02ff1,02fe1,02fd0,02fbf,02faf,02f9e,02f8d,02f7c ;5d8
|
||||
dw 02f6b,02f5a,02f49,02f38,02f27,02f16,02f05,02ef4 ;5e0
|
||||
dw 02ee3,02ed2,02ec1,02eb0,02e9f,02e8d,02e7c,02e6b ;5e8
|
||||
dw 02e5a,02e48,02e37,02e25,02e14,02e03,02df1,02de0 ;5f0
|
||||
dw 02dce,02dbc,02dab,02d99,02d88,02d76,02d64,02d52 ;5f8
|
||||
dw 02d41,02d2f,02d1d,02d0b,02cf9,02ce8,02cd6,02cc4 ;600
|
||||
dw 02cb2,02ca0,02c8e,02c7c,02c6a,02c57,02c45,02c33 ;608
|
||||
dw 02c21,02c0f,02bfc,02bea,02bd8,02bc6,02bb3,02ba1 ;610
|
||||
dw 02b8e,02b7c,02b6a,02b57,02b45,02b32,02b20,02b0d ;618
|
||||
dw 02afa,02ae8,02ad5,02ac2,02ab0,02a9d,02a8a,02a77 ;620
|
||||
dw 02a65,02a52,02a3f,02a2c,02a19,02a06,029f3,029e0 ;628
|
||||
dw 029cd,029ba,029a7,02994,02981,0296e,0295a,02947 ;630
|
||||
dw 02934,02921,0290e,028fa,028e7,028d4,028c0,028ad ;638
|
||||
dw 02899,02886,02872,0285f,0284b,02838,02824,02811 ;640
|
||||
dw 027fd,027ea,027d6,027c2,027af,0279b,02787,02773 ;648
|
||||
dw 0275f,0274c,02738,02724,02710,026fc,026e8,026d4 ;650
|
||||
dw 026c0,026ac,02698,02684,02670,0265c,02648,02634 ;658
|
||||
dw 0261f,0260b,025f7,025e3,025cf,025ba,025a6,02592 ;660
|
||||
dw 0257d,02569,02554,02540,0252c,02517,02503,024ee ;668
|
||||
dw 024da,024c5,024b0,0249c,02487,02473,0245e,02449 ;670
|
||||
dw 02434,02420,0240b,023f6,023e1,023cd,023b8,023a3 ;678
|
||||
dw 0238e,02379,02364,0234f,0233a,02325,02310,022fb ;680
|
||||
dw 022e6,022d1,022bc,022a7,02292,0227d,02267,02252 ;688
|
||||
dw 0223d,02228,02212,021fd,021e8,021d2,021bd,021a8 ;690
|
||||
dw 02192,0217d,02168,02152,0213d,02127,02112,020fc ;698
|
||||
dw 020e7,020d1,020bb,020a6,02090,0207b,02065,0204f ;6a0
|
||||
dw 02039,02024,0200e,01ff8,01fe2,01fcd,01fb7,01fa1 ;6a8
|
||||
dw 01f8b,01f75,01f5f,01f49,01f34,01f1e,01f08,01ef2 ;6b0
|
||||
dw 01edc,01ec6,01eb0,01e99,01e83,01e6d,01e57,01e41 ;6b8
|
||||
dw 01e2b,01e15,01dfe,01de8,01dd2,01dbc,01da6,01d8f ;6c0
|
||||
dw 01d79,01d63,01d4c,01d36,01d20,01d09,01cf3,01cdc ;6c8
|
||||
dw 01cc6,01caf,01c99,01c83,01c6c,01c55,01c3f,01c28 ;6d0
|
||||
dw 01c12,01bfb,01be5,01bce,01bb7,01ba1,01b8a,01b73 ;6d8
|
||||
dw 01b5d,01b46,01b2f,01b18,01b02,01aeb,01ad4,01abd ;6e0
|
||||
dw 01aa6,01a8f,01a79,01a62,01a4b,01a34,01a1d,01a06 ;6e8
|
||||
dw 019ef,019d8,019c1,019aa,01993,0197c,01965,0194e ;6f0
|
||||
dw 01937,01920,01908,018f1,018da,018c3,018ac,01895 ;6f8
|
||||
dw 0187d,01866,0184f,01838,01820,01809,017f2,017da ;700
|
||||
dw 017c3,017ac,01794,0177d,01766,0174e,01737,0171f ;708
|
||||
dw 01708,016f1,016d9,016c2,016aa,01693,0167b,01664 ;710
|
||||
dw 0164c,01634,0161d,01605,015ee,015d6,015be,015a7 ;718
|
||||
dw 0158f,01577,01560,01548,01530,01519,01501,014e9 ;720
|
||||
dw 014d1,014ba,014a2,0148a,01472,0145a,01443,0142b ;728
|
||||
dw 01413,013fb,013e3,013cb,013b3,0139b,01383,0136c ;730
|
||||
dw 01354,0133c,01324,0130c,012f4,012dc,012c4,012ac ;738
|
||||
dw 01294,0127b,01263,0124b,01233,0121b,01203,011eb ;740
|
||||
dw 011d3,011bb,011a2,0118a,01172,0115a,01142,0112a ;748
|
||||
dw 01111,010f9,010e1,010c9,010b0,01098,01080,01068 ;750
|
||||
dw 0104f,01037,0101f,01006,00fee,00fd6,00fbd,00fa5 ;758
|
||||
dw 00f8c,00f74,00f5c,00f43,00f2b,00f12,00efa,00ee2 ;760
|
||||
dw 00ec9,00eb1,00e98,00e80,00e67,00e4f,00e36,00e1e ;768
|
||||
dw 00e05,00ded,00dd4,00dbc,00da3,00d8b,00d72,00d59 ;770
|
||||
dw 00d41,00d28,00d10,00cf7,00cde,00cc6,00cad,00c94 ;778
|
||||
dw 00c7c,00c63,00c4b,00c32,00c19,00c01,00be8,00bcf ;780
|
||||
dw 00bb6,00b9e,00b85,00b6c,00b54,00b3b,00b22,00b09 ;788
|
||||
dw 00af1,00ad8,00abf,00aa6,00a8d,00a75,00a5c,00a43 ;790
|
||||
dw 00a2a,00a11,009f9,009e0,009c7,009ae,00995,0097c ;798
|
||||
dw 00964,0094b,00932,00919,00900,008e7,008ce,008b5 ;7a0
|
||||
dw 0089c,00884,0086b,00852,00839,00820,00807,007ee ;7a8
|
||||
dw 007d5,007bc,007a3,0078a,00771,00758,0073f,00726 ;7b0
|
||||
dw 0070d,006f4,006db,006c2,006a9,00690,00677,0065e ;7b8
|
||||
dw 00645,0062c,00613,005fa,005e1,005c8,005af,00596 ;7c0
|
||||
dw 0057d,00564,0054b,00532,00519,00500,004e7,004ce ;7c8
|
||||
dw 004b5,0049c,00483,0046a,00450,00437,0041e,00405 ;7d0
|
||||
dw 003ec,003d3,003ba,003a1,00388,0036f,00356,0033d ;7d8
|
||||
dw 00323,0030a,002f1,002d8,002bf,002a6,0028d,00274 ;7e0
|
||||
dw 0025b,00241,00228,0020f,001f6,001dd,001c4,001ab ;7e8
|
||||
dw 00192,00178,0015f,00146,0012d,00114,000fb,000e2 ;7f0
|
||||
dw 000c9,000af,00096,0007d,00064,0004b,00032,00019 ;7f8
|
||||
|
||||
dw 00000,0ffe7,0ffce,0ffb5,0ff9c,0ff83,0ff6a,0ff51 ;800
|
||||
dw 0ff37,0ff1e,0ff05,0feec,0fed3,0feba,0fea1,0fe88 ;808
|
||||
dw 0fe6e,0fe55,0fe3c,0fe23,0fe0a,0fdf1,0fdd8,0fdbf ;810
|
||||
dw 0fda5,0fd8c,0fd73,0fd5a,0fd41,0fd28,0fd0f,0fcf6 ;818
|
||||
dw 0fcdd,0fcc3,0fcaa,0fc91,0fc78,0fc5f,0fc46,0fc2d ;820
|
||||
dw 0fc14,0fbfb,0fbe2,0fbc9,0fbaf,0fb96,0fb7d,0fb64 ;828
|
||||
dw 0fb4b,0fb32,0fb19,0fb00,0fae7,0face,0fab5,0fa9c ;830
|
||||
dw 0fa83,0fa6a,0fa51,0fa38,0fa1f,0fa06,0f9ed,0f9d4 ;838
|
||||
dw 0f9bb,0f9a2,0f989,0f970,0f957,0f93e,0f925,0f90c ;840
|
||||
dw 0f8f3,0f8da,0f8c1,0f8a8,0f88f,0f876,0f85d,0f844 ;848
|
||||
dw 0f82b,0f812,0f7f9,0f7e0,0f7c7,0f7ae,0f795,0f77c ;850
|
||||
dw 0f764,0f74b,0f732,0f719,0f700,0f6e7,0f6ce,0f6b5 ;858
|
||||
dw 0f69c,0f684,0f66b,0f652,0f639,0f620,0f607,0f5ef ;860
|
||||
dw 0f5d6,0f5bd,0f5a4,0f58b,0f573,0f55a,0f541,0f528 ;868
|
||||
dw 0f50f,0f4f7,0f4de,0f4c5,0f4ac,0f494,0f47b,0f462 ;870
|
||||
dw 0f44a,0f431,0f418,0f3ff,0f3e7,0f3ce,0f3b5,0f39d ;878
|
||||
dw 0f384,0f36b,0f353,0f33a,0f322,0f309,0f2f0,0f2d8 ;880
|
||||
dw 0f2bf,0f2a7,0f28e,0f275,0f25d,0f244,0f22c,0f213 ;888
|
||||
dw 0f1fb,0f1e2,0f1ca,0f1b1,0f199,0f180,0f168,0f14f ;890
|
||||
dw 0f137,0f11e,0f106,0f0ee,0f0d5,0f0bd,0f0a4,0f08c ;898
|
||||
dw 0f074,0f05b,0f043,0f02a,0f012,0effa,0efe1,0efc9 ;8a0
|
||||
dw 0efb1,0ef98,0ef80,0ef68,0ef50,0ef37,0ef1f,0ef07 ;8a8
|
||||
dw 0eeef,0eed6,0eebe,0eea6,0ee8e,0ee76,0ee5e,0ee45 ;8b0
|
||||
dw 0ee2d,0ee15,0edfd,0ede5,0edcd,0edb5,0ed9d,0ed85 ;8b8
|
||||
dw 0ed6c,0ed54,0ed3c,0ed24,0ed0c,0ecf4,0ecdc,0ecc4 ;8c0
|
||||
dw 0ecac,0ec94,0ec7d,0ec65,0ec4d,0ec35,0ec1d,0ec05 ;8c8
|
||||
dw 0ebed,0ebd5,0ebbd,0eba6,0eb8e,0eb76,0eb5e,0eb46 ;8d0
|
||||
dw 0eb2f,0eb17,0eaff,0eae7,0ead0,0eab8,0eaa0,0ea89 ;8d8
|
||||
dw 0ea71,0ea59,0ea42,0ea2a,0ea12,0e9fb,0e9e3,0e9cc ;8e0
|
||||
dw 0e9b4,0e99c,0e985,0e96d,0e956,0e93e,0e927,0e90f ;8e8
|
||||
dw 0e8f8,0e8e1,0e8c9,0e8b2,0e89a,0e883,0e86c,0e854 ;8f0
|
||||
dw 0e83d,0e826,0e80e,0e7f7,0e7e0,0e7c8,0e7b1,0e79a ;8f8
|
||||
dw 0e783,0e76b,0e754,0e73d,0e726,0e70f,0e6f8,0e6e0 ;900
|
||||
dw 0e6c9,0e6b2,0e69b,0e684,0e66d,0e656,0e63f,0e628 ;908
|
||||
dw 0e611,0e5fa,0e5e3,0e5cc,0e5b5,0e59e,0e587,0e571 ;910
|
||||
dw 0e55a,0e543,0e52c,0e515,0e4fe,0e4e8,0e4d1,0e4ba ;918
|
||||
dw 0e4a3,0e48d,0e476,0e45f,0e449,0e432,0e41b,0e405 ;920
|
||||
dw 0e3ee,0e3d8,0e3c1,0e3ab,0e394,0e37d,0e367,0e351 ;928
|
||||
dw 0e33a,0e324,0e30d,0e2f7,0e2e0,0e2ca,0e2b4,0e29d ;930
|
||||
dw 0e287,0e271,0e25a,0e244,0e22e,0e218,0e201,0e1eb ;938
|
||||
dw 0e1d5,0e1bf,0e1a9,0e193,0e17d,0e167,0e150,0e13a ;940
|
||||
dw 0e124,0e10e,0e0f8,0e0e2,0e0cc,0e0b7,0e0a1,0e08b ;948
|
||||
dw 0e075,0e05f,0e049,0e033,0e01e,0e008,0dff2,0dfdc ;950
|
||||
dw 0dfc7,0dfb1,0df9b,0df85,0df70,0df5a,0df45,0df2f ;958
|
||||
dw 0df19,0df04,0deee,0ded9,0dec3,0deae,0de98,0de83 ;960
|
||||
dw 0de6e,0de58,0de43,0de2e,0de18,0de03,0ddee,0ddd8 ;968
|
||||
dw 0ddc3,0ddae,0dd99,0dd83,0dd6e,0dd59,0dd44,0dd2f ;970
|
||||
dw 0dd1a,0dd05,0dcf0,0dcdb,0dcc6,0dcb1,0dc9c,0dc87 ;978
|
||||
dw 0dc72,0dc5d,0dc48,0dc33,0dc1f,0dc0a,0dbf5,0dbe0 ;980
|
||||
dw 0dbcc,0dbb7,0dba2,0db8d,0db79,0db64,0db50,0db3b ;988
|
||||
dw 0db26,0db12,0dafd,0dae9,0dad4,0dac0,0daac,0da97 ;990
|
||||
dw 0da83,0da6e,0da5a,0da46,0da31,0da1d,0da09,0d9f5 ;998
|
||||
dw 0d9e1,0d9cc,0d9b8,0d9a4,0d990,0d97c,0d968,0d954 ;9a0
|
||||
dw 0d940,0d92c,0d918,0d904,0d8f0,0d8dc,0d8c8,0d8b4 ;9a8
|
||||
dw 0d8a1,0d88d,0d879,0d865,0d851,0d83e,0d82a,0d816 ;9b0
|
||||
dw 0d803,0d7ef,0d7dc,0d7c8,0d7b5,0d7a1,0d78d,0d77a ;9b8
|
||||
dw 0d767,0d753,0d740,0d72c,0d719,0d706,0d6f2,0d6df ;9c0
|
||||
dw 0d6cc,0d6b9,0d6a6,0d692,0d67f,0d66c,0d659,0d646 ;9c8
|
||||
dw 0d633,0d620,0d60d,0d5fa,0d5e7,0d5d4,0d5c1,0d5ae ;9d0
|
||||
dw 0d59b,0d589,0d576,0d563,0d550,0d53e,0d52b,0d518 ;9d8
|
||||
dw 0d506,0d4f3,0d4e0,0d4ce,0d4bb,0d4a9,0d496,0d484 ;9e0
|
||||
dw 0d472,0d45f,0d44d,0d43a,0d428,0d416,0d404,0d3f1 ;9e8
|
||||
dw 0d3df,0d3cd,0d3bb,0d3a9,0d396,0d384,0d372,0d360 ;9f0
|
||||
dw 0d34e,0d33c,0d32a,0d318,0d307,0d2f5,0d2e3,0d2d1 ;9f8
|
||||
dw 0d2bf,0d2ad,0d29c,0d28a,0d278,0d267,0d255,0d244 ;a00
|
||||
dw 0d232,0d220,0d20f,0d1fd,0d1ec,0d1db,0d1c9,0d1b8 ;a08
|
||||
dw 0d1a6,0d195,0d184,0d173,0d161,0d150,0d13f,0d12e ;a10
|
||||
dw 0d11d,0d10c,0d0fb,0d0e9,0d0d8,0d0c8,0d0b7,0d0a6 ;a18
|
||||
dw 0d095,0d084,0d073,0d062,0d051,0d041,0d030,0d01f ;a20
|
||||
dw 0d00f,0cffe,0cfed,0cfdd,0cfcc,0cfbc,0cfab,0cf9b ;a28
|
||||
dw 0cf8a,0cf7a,0cf6a,0cf59,0cf49,0cf39,0cf28,0cf18 ;a30
|
||||
dw 0cf08,0cef8,0cee8,0ced8,0cec8,0ceb7,0cea7,0ce97 ;a38
|
||||
dw 0ce87,0ce78,0ce68,0ce58,0ce48,0ce38,0ce28,0ce19 ;a40
|
||||
dw 0ce09,0cdf9,0cdea,0cdda,0cdca,0cdbb,0cdab,0cd9c ;a48
|
||||
dw 0cd8c,0cd7d,0cd6d,0cd5e,0cd4f,0cd3f,0cd30,0cd21 ;a50
|
||||
dw 0cd12,0cd02,0ccf3,0cce4,0ccd5,0ccc6,0ccb7,0cca8 ;a58
|
||||
dw 0cc99,0cc8a,0cc7b,0cc6c,0cc5d,0cc4e,0cc3f,0cc31 ;a60
|
||||
dw 0cc22,0cc13,0cc05,0cbf6,0cbe7,0cbd9,0cbca,0cbbc ;a68
|
||||
dw 0cbad,0cb9f,0cb90,0cb82,0cb74,0cb65,0cb57,0cb49 ;a70
|
||||
dw 0cb3a,0cb2c,0cb1e,0cb10,0cb02,0caf4,0cae6,0cad8 ;a78
|
||||
dw 0caca,0cabc,0caae,0caa0,0ca92,0ca84,0ca76,0ca69 ;a80
|
||||
dw 0ca5b,0ca4d,0ca40,0ca32,0ca24,0ca17,0ca09,0c9fc ;a88
|
||||
dw 0c9ee,0c9e1,0c9d4,0c9c6,0c9b9,0c9ac,0c99e,0c991 ;a90
|
||||
dw 0c984,0c977,0c96a,0c95c,0c94f,0c942,0c935,0c928 ;a98
|
||||
dw 0c91b,0c90f,0c902,0c8f5,0c8e8,0c8db,0c8cf,0c8c2 ;aa0
|
||||
dw 0c8b5,0c8a9,0c89c,0c88f,0c883,0c876,0c86a,0c85d ;aa8
|
||||
dw 0c851,0c845,0c838,0c82c,0c820,0c813,0c807,0c7fb ;ab0
|
||||
dw 0c7ef,0c7e3,0c7d7,0c7cb,0c7bf,0c7b3,0c7a7,0c79b ;ab8
|
||||
dw 0c78f,0c783,0c777,0c76c,0c760,0c754,0c749,0c73d ;ac0
|
||||
dw 0c731,0c726,0c71a,0c70f,0c703,0c6f8,0c6ed,0c6e1 ;ac8
|
||||
dw 0c6d6,0c6cb,0c6bf,0c6b4,0c6a9,0c69e,0c693,0c688 ;ad0
|
||||
dw 0c67d,0c672,0c667,0c65c,0c651,0c646,0c63b,0c630 ;ad8
|
||||
dw 0c626,0c61b,0c610,0c605,0c5fb,0c5f0,0c5e6,0c5db ;ae0
|
||||
dw 0c5d1,0c5c6,0c5bc,0c5b1,0c5a7,0c59d,0c593,0c588 ;ae8
|
||||
dw 0c57e,0c574,0c56a,0c560,0c556,0c54c,0c542,0c538 ;af0
|
||||
dw 0c52e,0c524,0c51a,0c510,0c506,0c4fd,0c4f3,0c4e9 ;af8
|
||||
dw 0c4e0,0c4d6,0c4cc,0c4c3,0c4b9,0c4b0,0c4a7,0c49d ;b00
|
||||
dw 0c494,0c48b,0c481,0c478,0c46f,0c466,0c45d,0c453 ;b08
|
||||
dw 0c44a,0c441,0c438,0c42f,0c426,0c41e,0c415,0c40c ;b10
|
||||
dw 0c403,0c3fa,0c3f2,0c3e9,0c3e0,0c3d8,0c3cf,0c3c7 ;b18
|
||||
dw 0c3be,0c3b6,0c3ad,0c3a5,0c39d,0c394,0c38c,0c384 ;b20
|
||||
dw 0c37c,0c374,0c36b,0c363,0c35b,0c353,0c34b,0c343 ;b28
|
||||
dw 0c33b,0c334,0c32c,0c324,0c31c,0c314,0c30d,0c305 ;b30
|
||||
dw 0c2fe,0c2f6,0c2ee,0c2e7,0c2df,0c2d8,0c2d1,0c2c9 ;b38
|
||||
dw 0c2c2,0c2bb,0c2b3,0c2ac,0c2a5,0c29e,0c297,0c290 ;b40
|
||||
dw 0c289,0c282,0c27b,0c274,0c26d,0c266,0c25f,0c259 ;b48
|
||||
dw 0c252,0c24b,0c245,0c23e,0c237,0c231,0c22a,0c224 ;b50
|
||||
dw 0c21e,0c217,0c211,0c20b,0c204,0c1fe,0c1f8,0c1f2 ;b58
|
||||
dw 0c1ec,0c1e5,0c1df,0c1d9,0c1d3,0c1cd,0c1c8,0c1c2 ;b60
|
||||
dw 0c1bc,0c1b6,0c1b0,0c1ab,0c1a5,0c19f,0c19a,0c194 ;b68
|
||||
dw 0c18f,0c189,0c184,0c17e,0c179,0c174,0c16e,0c169 ;b70
|
||||
dw 0c164,0c15f,0c159,0c154,0c14f,0c14a,0c145,0c140 ;b78
|
||||
dw 0c13b,0c136,0c132,0c12d,0c128,0c123,0c11f,0c11a ;b80
|
||||
dw 0c115,0c111,0c10c,0c108,0c103,0c0ff,0c0fa,0c0f6 ;b88
|
||||
dw 0c0f2,0c0ed,0c0e9,0c0e5,0c0e1,0c0dd,0c0d9,0c0d5 ;b90
|
||||
dw 0c0d1,0c0cd,0c0c9,0c0c5,0c0c1,0c0bd,0c0b9,0c0b6 ;b98
|
||||
dw 0c0b2,0c0ae,0c0ab,0c0a7,0c0a3,0c0a0,0c09c,0c099 ;ba0
|
||||
dw 0c096,0c092,0c08f,0c08c,0c088,0c085,0c082,0c07f ;ba8
|
||||
dw 0c07c,0c079,0c076,0c073,0c070,0c06d,0c06a,0c067 ;bb0
|
||||
dw 0c064,0c062,0c05f,0c05c,0c05a,0c057,0c054,0c052 ;bb8
|
||||
dw 0c04f,0c04d,0c04b,0c048,0c046,0c044,0c041,0c03f ;bc0
|
||||
dw 0c03d,0c03b,0c039,0c037,0c035,0c033,0c031,0c02f ;bc8
|
||||
dw 0c02d,0c02b,0c029,0c028,0c026,0c024,0c022,0c021 ;bd0
|
||||
dw 0c01f,0c01e,0c01c,0c01b,0c019,0c018,0c017,0c015 ;bd8
|
||||
dw 0c014,0c013,0c012,0c011,0c010,0c00f,0c00e,0c00d ;be0
|
||||
dw 0c00c,0c00b,0c00a,0c009,0c008,0c007,0c007,0c006 ;be8
|
||||
dw 0c005,0c005,0c004,0c004,0c003,0c003,0c002,0c002 ;bf0
|
||||
dw 0c002,0c001,0c001,0c001,0c001,0c001,0c001,0c001 ;bf8
|
||||
|
||||
dw 0c001,0c001,0c001,0c001,0c001,0c001,0c001,0c001 ;c00
|
||||
dw 0c002,0c002,0c002,0c003,0c003,0c004,0c004,0c005 ;c08
|
||||
dw 0c005,0c006,0c007,0c007,0c008,0c009,0c00a,0c00b ;c10
|
||||
dw 0c00c,0c00d,0c00e,0c00f,0c010,0c011,0c012,0c013 ;c18
|
||||
dw 0c014,0c015,0c017,0c018,0c019,0c01b,0c01c,0c01e ;c20
|
||||
dw 0c01f,0c021,0c022,0c024,0c026,0c028,0c029,0c02b ;c28
|
||||
dw 0c02d,0c02f,0c031,0c033,0c035,0c037,0c039,0c03b ;c30
|
||||
dw 0c03d,0c03f,0c041,0c044,0c046,0c048,0c04b,0c04d ;c38
|
||||
dw 0c04f,0c052,0c054,0c057,0c05a,0c05c,0c05f,0c062 ;c40
|
||||
dw 0c064,0c067,0c06a,0c06d,0c070,0c073,0c076,0c079 ;c48
|
||||
dw 0c07c,0c07f,0c082,0c085,0c088,0c08c,0c08f,0c092 ;c50
|
||||
dw 0c096,0c099,0c09c,0c0a0,0c0a3,0c0a7,0c0ab,0c0ae ;c58
|
||||
dw 0c0b2,0c0b6,0c0b9,0c0bd,0c0c1,0c0c5,0c0c9,0c0cd ;c60
|
||||
dw 0c0d1,0c0d5,0c0d9,0c0dd,0c0e1,0c0e5,0c0e9,0c0ed ;c68
|
||||
dw 0c0f2,0c0f6,0c0fa,0c0ff,0c103,0c108,0c10c,0c111 ;c70
|
||||
dw 0c115,0c11a,0c11f,0c123,0c128,0c12d,0c132,0c136 ;c78
|
||||
dw 0c13b,0c140,0c145,0c14a,0c14f,0c154,0c159,0c15f ;c80
|
||||
dw 0c164,0c169,0c16e,0c174,0c179,0c17e,0c184,0c189 ;c88
|
||||
dw 0c18f,0c194,0c19a,0c19f,0c1a5,0c1ab,0c1b0,0c1b6 ;c90
|
||||
dw 0c1bc,0c1c2,0c1c8,0c1cd,0c1d3,0c1d9,0c1df,0c1e5 ;c98
|
||||
dw 0c1ec,0c1f2,0c1f8,0c1fe,0c204,0c20b,0c211,0c217 ;ca0
|
||||
dw 0c21e,0c224,0c22a,0c231,0c237,0c23e,0c245,0c24b ;ca8
|
||||
dw 0c252,0c259,0c25f,0c266,0c26d,0c274,0c27b,0c282 ;cb0
|
||||
dw 0c289,0c290,0c297,0c29e,0c2a5,0c2ac,0c2b3,0c2bb ;cb8
|
||||
dw 0c2c2,0c2c9,0c2d1,0c2d8,0c2df,0c2e7,0c2ee,0c2f6 ;cc0
|
||||
dw 0c2fe,0c305,0c30d,0c314,0c31c,0c324,0c32c,0c334 ;cc8
|
||||
dw 0c33b,0c343,0c34b,0c353,0c35b,0c363,0c36b,0c374 ;cd0
|
||||
dw 0c37c,0c384,0c38c,0c394,0c39d,0c3a5,0c3ad,0c3b6 ;cd8
|
||||
dw 0c3be,0c3c7,0c3cf,0c3d8,0c3e0,0c3e9,0c3f2,0c3fa ;ce0
|
||||
dw 0c403,0c40c,0c415,0c41e,0c426,0c42f,0c438,0c441 ;ce8
|
||||
dw 0c44a,0c453,0c45d,0c466,0c46f,0c478,0c481,0c48b ;cf0
|
||||
dw 0c494,0c49d,0c4a7,0c4b0,0c4b9,0c4c3,0c4cc,0c4d6 ;cf8
|
||||
dw 0c4e0,0c4e9,0c4f3,0c4fd,0c506,0c510,0c51a,0c524 ;d00
|
||||
dw 0c52e,0c538,0c542,0c54c,0c556,0c560,0c56a,0c574 ;d08
|
||||
dw 0c57e,0c588,0c593,0c59d,0c5a7,0c5b1,0c5bc,0c5c6 ;d10
|
||||
dw 0c5d1,0c5db,0c5e6,0c5f0,0c5fb,0c605,0c610,0c61b ;d18
|
||||
dw 0c626,0c630,0c63b,0c646,0c651,0c65c,0c667,0c672 ;d20
|
||||
dw 0c67d,0c688,0c693,0c69e,0c6a9,0c6b4,0c6bf,0c6cb ;d28
|
||||
dw 0c6d6,0c6e1,0c6ed,0c6f8,0c703,0c70f,0c71a,0c726 ;d30
|
||||
dw 0c731,0c73d,0c749,0c754,0c760,0c76c,0c777,0c783 ;d38
|
||||
dw 0c78f,0c79b,0c7a7,0c7b3,0c7bf,0c7cb,0c7d7,0c7e3 ;d40
|
||||
dw 0c7ef,0c7fb,0c807,0c813,0c820,0c82c,0c838,0c845 ;d48
|
||||
dw 0c851,0c85d,0c86a,0c876,0c883,0c88f,0c89c,0c8a9 ;d50
|
||||
dw 0c8b5,0c8c2,0c8cf,0c8db,0c8e8,0c8f5,0c902,0c90f ;d58
|
||||
dw 0c91b,0c928,0c935,0c942,0c94f,0c95c,0c96a,0c977 ;d60
|
||||
dw 0c984,0c991,0c99e,0c9ac,0c9b9,0c9c6,0c9d4,0c9e1 ;d68
|
||||
dw 0c9ee,0c9fc,0ca09,0ca17,0ca24,0ca32,0ca40,0ca4d ;d70
|
||||
dw 0ca5b,0ca69,0ca77,0ca84,0ca92,0caa0,0caae,0cabc ;d78
|
||||
dw 0caca,0cad8,0cae6,0caf4,0cb02,0cb10,0cb1e,0cb2c ;d80
|
||||
dw 0cb3a,0cb49,0cb57,0cb65,0cb74,0cb82,0cb90,0cb9f ;d88
|
||||
dw 0cbad,0cbbc,0cbca,0cbd9,0cbe7,0cbf6,0cc05,0cc13 ;d90
|
||||
dw 0cc22,0cc31,0cc3f,0cc4e,0cc5d,0cc6c,0cc7b,0cc8a ;d98
|
||||
dw 0cc99,0cca8,0ccb7,0ccc6,0ccd5,0cce4,0ccf3,0cd02 ;da0
|
||||
dw 0cd12,0cd21,0cd30,0cd3f,0cd4f,0cd5e,0cd6d,0cd7d ;da8
|
||||
dw 0cd8c,0cd9c,0cdab,0cdbb,0cdca,0cdda,0cdea,0cdf9 ;db0
|
||||
dw 0ce09,0ce19,0ce28,0ce38,0ce48,0ce58,0ce68,0ce78 ;db8
|
||||
dw 0ce88,0ce97,0cea7,0ceb7,0cec8,0ced8,0cee8,0cef8 ;dc0
|
||||
dw 0cf08,0cf18,0cf28,0cf39,0cf49,0cf59,0cf6a,0cf7a ;dc8
|
||||
dw 0cf8a,0cf9b,0cfab,0cfbc,0cfcc,0cfdd,0cfed,0cffe ;dd0
|
||||
dw 0d00f,0d01f,0d030,0d041,0d051,0d062,0d073,0d084 ;dd8
|
||||
dw 0d095,0d0a6,0d0b7,0d0c8,0d0d9,0d0ea,0d0fb,0d10c ;de0
|
||||
dw 0d11d,0d12e,0d13f,0d150,0d161,0d173,0d184,0d195 ;de8
|
||||
dw 0d1a6,0d1b8,0d1c9,0d1db,0d1ec,0d1fd,0d20f,0d220 ;df0
|
||||
dw 0d232,0d244,0d255,0d267,0d278,0d28a,0d29c,0d2ae ;df8
|
||||
dw 0d2bf,0d2d1,0d2e3,0d2f5,0d307,0d318,0d32a,0d33c ;e00
|
||||
dw 0d34e,0d360,0d372,0d384,0d396,0d3a9,0d3bb,0d3cd ;e08
|
||||
dw 0d3df,0d3f1,0d404,0d416,0d428,0d43a,0d44d,0d45f ;e10
|
||||
dw 0d472,0d484,0d496,0d4a9,0d4bb,0d4ce,0d4e0,0d4f3 ;e18
|
||||
dw 0d506,0d518,0d52b,0d53e,0d550,0d563,0d576,0d589 ;e20
|
||||
dw 0d59b,0d5ae,0d5c1,0d5d4,0d5e7,0d5fa,0d60d,0d620 ;e28
|
||||
dw 0d633,0d646,0d659,0d66c,0d67f,0d692,0d6a6,0d6b9 ;e30
|
||||
dw 0d6cc,0d6df,0d6f2,0d706,0d719,0d72c,0d740,0d753 ;e38
|
||||
dw 0d767,0d77a,0d78e,0d7a1,0d7b5,0d7c8,0d7dc,0d7ef ;e40
|
||||
dw 0d803,0d816,0d82a,0d83e,0d851,0d865,0d879,0d88d ;e48
|
||||
dw 0d8a1,0d8b4,0d8c8,0d8dc,0d8f0,0d904,0d918,0d92c ;e50
|
||||
dw 0d940,0d954,0d968,0d97c,0d990,0d9a4,0d9b8,0d9cc ;e58
|
||||
dw 0d9e1,0d9f5,0da09,0da1d,0da32,0da46,0da5a,0da6e ;e60
|
||||
dw 0da83,0da97,0daac,0dac0,0dad4,0dae9,0dafd,0db12 ;e68
|
||||
dw 0db26,0db3b,0db50,0db64,0db79,0db8d,0dba2,0dbb7 ;e70
|
||||
dw 0dbcc,0dbe0,0dbf5,0dc0a,0dc1f,0dc33,0dc48,0dc5d ;e78
|
||||
dw 0dc72,0dc87,0dc9c,0dcb1,0dcc6,0dcdb,0dcf0,0dd05 ;e80
|
||||
dw 0dd1a,0dd2f,0dd44,0dd59,0dd6e,0dd84,0dd99,0ddae ;e88
|
||||
dw 0ddc3,0ddd8,0ddee,0de03,0de18,0de2e,0de43,0de58 ;e90
|
||||
dw 0de6e,0de83,0de98,0deae,0dec3,0ded9,0deee,0df04 ;e98
|
||||
dw 0df19,0df2f,0df45,0df5a,0df70,0df85,0df9b,0dfb1 ;ea0
|
||||
dw 0dfc7,0dfdc,0dff2,0e008,0e01e,0e033,0e049,0e05f ;ea8
|
||||
dw 0e075,0e08b,0e0a1,0e0b7,0e0cc,0e0e2,0e0f8,0e10e ;eb0
|
||||
dw 0e124,0e13a,0e150,0e167,0e17d,0e193,0e1a9,0e1bf ;eb8
|
||||
dw 0e1d5,0e1eb,0e202,0e218,0e22e,0e244,0e25a,0e271 ;ec0
|
||||
dw 0e287,0e29d,0e2b4,0e2ca,0e2e0,0e2f7,0e30d,0e324 ;ec8
|
||||
dw 0e33a,0e351,0e367,0e37e,0e394,0e3ab,0e3c1,0e3d8 ;ed0
|
||||
dw 0e3ee,0e405,0e41b,0e432,0e449,0e45f,0e476,0e48d ;ed8
|
||||
dw 0e4a3,0e4ba,0e4d1,0e4e8,0e4fe,0e515,0e52c,0e543 ;ee0
|
||||
dw 0e55a,0e571,0e587,0e59e,0e5b5,0e5cc,0e5e3,0e5fa ;ee8
|
||||
dw 0e611,0e628,0e63f,0e656,0e66d,0e684,0e69b,0e6b2 ;ef0
|
||||
dw 0e6c9,0e6e0,0e6f8,0e70f,0e726,0e73d,0e754,0e76b ;ef8
|
||||
dw 0e783,0e79a,0e7b1,0e7c8,0e7e0,0e7f7,0e80e,0e826 ;f00
|
||||
dw 0e83d,0e854,0e86c,0e883,0e89a,0e8b2,0e8c9,0e8e1 ;f08
|
||||
dw 0e8f8,0e90f,0e927,0e93e,0e956,0e96d,0e985,0e99c ;f10
|
||||
dw 0e9b4,0e9cc,0e9e3,0e9fb,0ea12,0ea2a,0ea42,0ea59 ;f18
|
||||
dw 0ea71,0ea89,0eaa0,0eab8,0ead0,0eae7,0eaff,0eb17 ;f20
|
||||
dw 0eb2f,0eb46,0eb5e,0eb76,0eb8e,0eba6,0ebbd,0ebd5 ;f28
|
||||
dw 0ebed,0ec05,0ec1d,0ec35,0ec4d,0ec65,0ec7d,0ec94 ;f30
|
||||
dw 0ecac,0ecc4,0ecdc,0ecf4,0ed0c,0ed24,0ed3c,0ed54 ;f38
|
||||
dw 0ed6c,0ed85,0ed9d,0edb5,0edcd,0ede5,0edfd,0ee15 ;f40
|
||||
dw 0ee2d,0ee45,0ee5e,0ee76,0ee8e,0eea6,0eebe,0eed6 ;f48
|
||||
dw 0eeef,0ef07,0ef1f,0ef37,0ef50,0ef68,0ef80,0ef98 ;f50
|
||||
dw 0efb1,0efc9,0efe1,0effa,0f012,0f02a,0f043,0f05b ;f58
|
||||
dw 0f074,0f08c,0f0a4,0f0bd,0f0d5,0f0ee,0f106,0f11e ;f60
|
||||
dw 0f137,0f14f,0f168,0f180,0f199,0f1b1,0f1ca,0f1e2 ;f68
|
||||
dw 0f1fb,0f213,0f22c,0f244,0f25d,0f275,0f28e,0f2a7 ;f70
|
||||
dw 0f2bf,0f2d8,0f2f0,0f309,0f322,0f33a,0f353,0f36c ;f78
|
||||
dw 0f384,0f39d,0f3b5,0f3ce,0f3e7,0f3ff,0f418,0f431 ;f80
|
||||
dw 0f44a,0f462,0f47b,0f494,0f4ac,0f4c5,0f4de,0f4f7 ;f88
|
||||
dw 0f50f,0f528,0f541,0f55a,0f573,0f58b,0f5a4,0f5bd ;f90
|
||||
dw 0f5d6,0f5ef,0f607,0f620,0f639,0f652,0f66b,0f684 ;f98
|
||||
dw 0f69c,0f6b5,0f6ce,0f6e7,0f700,0f719,0f732,0f74b ;fa0
|
||||
dw 0f764,0f77c,0f795,0f7ae,0f7c7,0f7e0,0f7f9,0f812 ;fa8
|
||||
dw 0f82b,0f844,0f85d,0f876,0f88f,0f8a8,0f8c1,0f8da ;fb0
|
||||
dw 0f8f3,0f90c,0f925,0f93e,0f957,0f970,0f989,0f9a2 ;fb8
|
||||
dw 0f9bb,0f9d4,0f9ed,0fa06,0fa1f,0fa38,0fa51,0fa6a ;fc0
|
||||
dw 0fa83,0fa9c,0fab5,0face,0fae7,0fb00,0fb19,0fb32 ;fc8
|
||||
dw 0fb4b,0fb64,0fb7d,0fb96,0fbb0,0fbc9,0fbe2,0fbfb ;fd0
|
||||
dw 0fc14,0fc2d,0fc46,0fc5f,0fc78,0fc91,0fcaa,0fcc3 ;fd8
|
||||
dw 0fcdd,0fcf6,0fd0f,0fd28,0fd41,0fd5a,0fd73,0fd8c ;fe0
|
||||
dw 0fda5,0fdbf,0fdd8,0fdf1,0fe0a,0fe23,0fe3c,0fe55 ;fe8
|
||||
dw 0fe6e,0fe88,0fea1,0feba,0fed3,0feec,0ff05,0ff1e ;ff0
|
||||
dw 0ff37,0ff51,0ff6a,0ff83,0ff9c,0ffb5,0ffce,0ffe7 ;ff8
|
||||
|
||||
;=========================================================================
|
29
wmdots/wmdots/old_dos_demo/trig.s
Normal file
29
wmdots/wmdots/old_dos_demo/trig.s
Normal file
|
@ -0,0 +1,29 @@
|
|||
;=========================================================================
|
||||
;Trig functions for GFX routines Copyright (c) 1995 by Mark I Manning IV
|
||||
;=========================================================================
|
||||
|
||||
CosTab equ SinTab+0800 ;A Right angle foreward in table!
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
|
||||
;Return Sin and Cos of angle AX in variables of same name
|
||||
|
||||
SinCos:
|
||||
and ax,0fff ;4096 degrees = 0 degrees
|
||||
mov bx,ax ;Put into an indexing reg
|
||||
add bx,bx
|
||||
mov ax,SinTab[bx] ;Get Sin(N)
|
||||
mov Sin,ax ;Bah no MOV Sin,[BX]... Crap processor!
|
||||
|
||||
;Note.
|
||||
; Can NOT use mov ax,SinTab[2*ebx] because in following code BX may go
|
||||
; negative and 2* a negative number = DOUBLY NEGATIVE!
|
||||
|
||||
cmp bx,01800 ;Was Sin(N) in last quadrant of circle?
|
||||
if nl sub bx,02000 ;Cos(N) must be in first quadrant then
|
||||
mov bx,CosTab[bx] ;Get Cos(n)
|
||||
mov Cos,bx ;Exits with Sin in AX and Cos in BX too!
|
||||
ret
|
||||
|
||||
;=========================================================================
|
||||
|
75
wmdots/wmdots/sintab.c
Normal file
75
wmdots/wmdots/sintab.c
Normal file
|
@ -0,0 +1,75 @@
|
|||
// Sin and Cos tables based on 512 degree circle.
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
short sin_tab[]=
|
||||
{
|
||||
0x0000, 0x00c9, 0x0192, 0x025b, 0x0323, 0x03ec, 0x04b5, 0x057d,
|
||||
0x0645, 0x070d, 0x07d5, 0x089c, 0x0964, 0x0a2a, 0x0af1, 0x0bb6,
|
||||
0x0c7c, 0x0d41, 0x0e05, 0x0ec9, 0x0f8c, 0x104f, 0x1111, 0x11d3,
|
||||
0x1294, 0x1354, 0x1413, 0x14d1, 0x158f, 0x164c, 0x1708, 0x17c3,
|
||||
0x187d, 0x1937, 0x19ef, 0x1aa6, 0x1b5d, 0x1c12, 0x1cc6, 0x1d79,
|
||||
0x1e2b, 0x1edc, 0x1f8b, 0x2039, 0x20e7, 0x2192, 0x223d, 0x22e6,
|
||||
0x238e, 0x2434, 0x24da, 0x257d, 0x261f, 0x26c0, 0x275f, 0x27fd,
|
||||
0x2899, 0x2934, 0x29cd, 0x2a65, 0x2afa, 0x2b8e, 0x2c21, 0x2cb2,
|
||||
0x2d41, 0x2dce, 0x2e5a, 0x2ee3, 0x2f6b, 0x2ff1, 0x3076, 0x30f8,
|
||||
0x3179, 0x31f7, 0x3274, 0x32ee, 0x3367, 0x33de, 0x3453, 0x34c6,
|
||||
0x3536, 0x35a5, 0x3612, 0x367c, 0x36e5, 0x374b, 0x37af, 0x3811,
|
||||
0x3871, 0x38cf, 0x392a, 0x3983, 0x39da, 0x3a2f, 0x3a82, 0x3ad2,
|
||||
0x3b20, 0x3b6c, 0x3bb6, 0x3bfd, 0x3c42, 0x3c84, 0x3cc5, 0x3d02,
|
||||
0x3d3e, 0x3d77, 0x3dae, 0x3de2, 0x3e14, 0x3e44, 0x3e71, 0x3e9c,
|
||||
0x3ec5, 0x3eeb, 0x3f0e, 0x3f2f, 0x3f4e, 0x3f6a, 0x3f84, 0x3f9c,
|
||||
0x3fb1, 0x3fc3, 0x3fd3, 0x3fe1, 0x3fec, 0x3ff4, 0x3ffb, 0x3ffe,
|
||||
|
||||
0x3fff, 0x3ffe, 0x3ffb, 0x3ff4, 0x3fec, 0x3fe1, 0x3fd3, 0x3fc3,
|
||||
0x3fb1, 0x3f9c, 0x3f84, 0x3f6a, 0x3f4e, 0x3f2f, 0x3f0e, 0x3eeb,
|
||||
0x3ec5, 0x3e9c, 0x3e71, 0x3e44, 0x3e14, 0x3de2, 0x3dae, 0x3d77,
|
||||
0x3d3e, 0x3d02, 0x3cc5, 0x3c84, 0x3c42, 0x3bfd, 0x3bb6, 0x3b6c,
|
||||
0x3b20, 0x3ad2, 0x3a82, 0x3a2f, 0x39da, 0x3983, 0x392a, 0x38cf,
|
||||
0x3871, 0x3811, 0x37af, 0x374b, 0x36e5, 0x367c, 0x3612, 0x35a5,
|
||||
0x3536, 0x34c6, 0x3453, 0x33de, 0x3367, 0x32ee, 0x3274, 0x31f7,
|
||||
0x3179, 0x30f8, 0x3076, 0x2ff1, 0x2f6b, 0x2ee3, 0x2e5a, 0x2dce,
|
||||
0x2d41, 0x2cb2, 0x2c21, 0x2b8e, 0x2afa, 0x2a65, 0x29cd, 0x2934,
|
||||
0x2899, 0x27fd, 0x275f, 0x26c0, 0x261f, 0x257d, 0x24da, 0x2434,
|
||||
0x238e, 0x22e6, 0x223d, 0x2192, 0x20e7, 0x2039, 0x1f8b, 0x1edc,
|
||||
0x1e2b, 0x1d79, 0x1cc6, 0x1c12, 0x1b5d, 0x1aa6, 0x19ef, 0x1937,
|
||||
0x187d, 0x17c3, 0x1708, 0x164c, 0x158f, 0x14d1, 0x1413, 0x1354,
|
||||
0x1294, 0x11d3, 0x1111, 0x104f, 0x0f8c, 0x0ec9, 0x0e05, 0x0d41,
|
||||
0x0c7c, 0x0bb6, 0x0af1, 0x0a2a, 0x0964, 0x089c, 0x07d5, 0x070d,
|
||||
0x0645, 0x057d, 0x04b5, 0x03ec, 0x0323, 0x025b, 0x0192, 0x00c9,
|
||||
|
||||
0x0000, 0xff37, 0xfe6e, 0xfda5, 0xfcdd, 0xfc14, 0xfb4b, 0xfa83,
|
||||
0xf9bb, 0xf8f3, 0xf82b, 0xf764, 0xf69c, 0xf5d6, 0xf50f, 0xf44a,
|
||||
0xf384, 0xf2bf, 0xf1fb, 0xf137, 0xf074, 0xefb1, 0xeeef, 0xee2d,
|
||||
0xed6c, 0xecac, 0xebed, 0xeb2f, 0xea71, 0xe9b4, 0xe8f8, 0xe83d,
|
||||
0xe783, 0xe6c9, 0xe611, 0xe55a, 0xe4a3, 0xe3ee, 0xe33a, 0xe287,
|
||||
0xe1d5, 0xe124, 0xe075, 0xdfc7, 0xdf19, 0xde6e, 0xddc3, 0xdd1a,
|
||||
0xdc72, 0xdbcc, 0xdb26, 0xda83, 0xd9e1, 0xd940, 0xd8a1, 0xd803,
|
||||
0xd767, 0xd6cc, 0xd633, 0xd59b, 0xd506, 0xd472, 0xd3df, 0xd34e,
|
||||
0xd2bf, 0xd232, 0xd1a6, 0xd11d, 0xd095, 0xd00f, 0xcf8a, 0xcf08,
|
||||
0xce87, 0xce09, 0xcd8c, 0xcd12, 0xcc99, 0xcc22, 0xcbad, 0xcb3a,
|
||||
0xcaca, 0xca5b, 0xc9ee, 0xc984, 0xc91b, 0xc8b5, 0xc851, 0xc7ef,
|
||||
0xc78f, 0xc731, 0xc6d6, 0xc67d, 0xc626, 0xc5d1, 0xc57e, 0xc52e,
|
||||
0xc4e0, 0xc494, 0xc44a, 0xc403, 0xc3be, 0xc37c, 0xc33b, 0xc2fe,
|
||||
0xc2c2, 0xc289, 0xc252, 0xc21e, 0xc1ec, 0xc1bc, 0xc18f, 0xc164,
|
||||
0xc13b, 0xc115, 0xc0f2, 0xc0d1, 0xc0b2, 0xc096, 0xc07c, 0xc064,
|
||||
0xc04f, 0xc03d, 0xc02d, 0xc01f, 0xc014, 0xc00c, 0xc005, 0xc002,
|
||||
|
||||
0xc001, 0xc002, 0xc005, 0xc00c, 0xc014, 0xc01f, 0xc02d, 0xc03d,
|
||||
0xc04f, 0xc064, 0xc07c, 0xc096, 0xc0b2, 0xc0d1, 0xc0f2, 0xc115,
|
||||
0xc13b, 0xc164, 0xc18f, 0xc1bc, 0xc1ec, 0xc21e, 0xc252, 0xc289,
|
||||
0xc2c2, 0xc2fe, 0xc33b, 0xc37c, 0xc3be, 0xc403, 0xc44a, 0xc494,
|
||||
0xc4e0, 0xc52e, 0xc57e, 0xc5d1, 0xc626, 0xc67d, 0xc6d6, 0xc731,
|
||||
0xc78f, 0xc7ef, 0xc851, 0xc8b5, 0xc91b, 0xc984, 0xc9ee, 0xca5b,
|
||||
0xcaca, 0xcb3a, 0xcbad, 0xcc22, 0xcc99, 0xcd12, 0xcd8c, 0xce09,
|
||||
0xce88, 0xcf08, 0xcf8a, 0xd00f, 0xd095, 0xd11d, 0xd1a6, 0xd232,
|
||||
0xd2bf, 0xd34e, 0xd3df, 0xd472, 0xd506, 0xd59b, 0xd633, 0xd6cc,
|
||||
0xd767, 0xd803, 0xd8a1, 0xd940, 0xd9e1, 0xda83, 0xdb26, 0xdbcc,
|
||||
0xdc72, 0xdd1a, 0xddc3, 0xde6e, 0xdf19, 0xdfc7, 0xe075, 0xe124,
|
||||
0xe1d5, 0xe287, 0xe33a, 0xe3ee, 0xe4a3, 0xe55a, 0xe611, 0xe6c9,
|
||||
0xe783, 0xe83d, 0xe8f8, 0xe9b4, 0xea71, 0xeb2f, 0xebed, 0xecac,
|
||||
0xed6c, 0xee2d, 0xeeef, 0xefb1, 0xf074, 0xf137, 0xf1fb, 0xf2bf,
|
||||
0xf384, 0xf44a, 0xf50f, 0xf5d6, 0xf69c, 0xf764, 0xf82b, 0xf8f3,
|
||||
0xf9bb, 0xfa83, 0xfb4b, 0xfc14, 0xfcdd, 0xfda5, 0xfe6e, 0xff37
|
||||
};
|
||||
|
||||
// =======================================================================
|
BIN
wmdots/wmdots/wmdots
Executable file
BIN
wmdots/wmdots/wmdots
Executable file
Binary file not shown.
667
wmdots/wmdots/wmdots.c
Normal file
667
wmdots/wmdots/wmdots.c
Normal file
|
@ -0,0 +1,667 @@
|
|||
// WM-Dots the Window Maker 3d Rotating Dots Demo by Mark I Manning IV
|
||||
// =======================================================================
|
||||
|
||||
// This demo is based on an old DOS demo I did a number of years ago. The
|
||||
// trick was to get it to work in an 64 x 64 window instead of the
|
||||
// 320 x 200 of the original. (and in 16 instead of 256 colours :)
|
||||
|
||||
// Much of these sources are based on other dockable application sources.
|
||||
// For this reason, and because it is the right thing to do, this file is
|
||||
// distributed under the GPL. Use it and abuse it as you will.
|
||||
|
||||
// Flames, critisizm and general nukings can be sent to....
|
||||
|
||||
// i440r@mailcity.com
|
||||
|
||||
// I have included the sources (in 100% pure ASM) to the afore mentioned
|
||||
// original demo. These you can also consider covered by the GPL.
|
||||
|
||||
// Maybe someone can help me convert the bump mapping in the original to
|
||||
// use only 16 colours :) (actually, I have space in the master.xpm for
|
||||
// 32 colours if I retain a 2 x 2 pixle size. If i go to 1 x 1 i can
|
||||
// fit 64 colours in there :)
|
||||
|
||||
// Yea... I know... Im supposed to be sparing of system resources like
|
||||
// colour allocations but come on guys... this IS a demo after all :)
|
||||
// Demos are supposed to be abusive of system resources eh??? :)
|
||||
|
||||
// This source file is 100% TAB FREE. Use any editor/viewer you want
|
||||
// to view it with and set ANY size tabs and it will STILL look right.
|
||||
// TABS ARE EVIL!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
// Also Linus T is wrong. Indentations of 8 are an abomination and so is
|
||||
// k&r source formatting. So There!
|
||||
|
||||
// Apart from that... Linus for president :)
|
||||
// or George W. Bush!!!
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// blah :)
|
||||
|
||||
// Version 0.1 beta Released Saturday October 9 1999
|
||||
//
|
||||
// To do... Fix bug that causes core dump when the "cross" object
|
||||
// rotates outside window (its not a clipping problem).
|
||||
// Find out why the "cross" object is not cross shaped in
|
||||
// this demo when it is in the dos version.
|
||||
// Change pixle sizes to 1 x 1 for objects that are in
|
||||
// the distance.
|
||||
// Move all object definitions out of this file and into
|
||||
// some kind of rc file and allow user defined objects
|
||||
// Add greets to the credits display :)
|
||||
// Impliment better light shading (in object space?)
|
||||
// Prevent dark pixles overwriting light ones
|
||||
//
|
||||
// Done... Scrapped idea about different pixle sizez, it didn't look
|
||||
// as good as i thunked it would :)
|
||||
// Fixed adjust_angle() to be angle +128 not angle +127
|
||||
// Fixed cross by defining xyz as char instead of int
|
||||
// Fixed core dump problem with cross: Oopts it was a
|
||||
// clipping problem, z clipping points behind camera! :)
|
||||
// Added size macro (prolly a bad name for it tho :)
|
||||
// Implimented better light shading but its still not
|
||||
// quite right yet...
|
||||
// Removed math.h from includes as im not using any
|
||||
// functions therein. Saved a whopping 4 bytes :)
|
||||
// Added code to draw_point() to prevent dark pels from
|
||||
// being drawn over lighter pels. Dark pels are further
|
||||
// away and should be BEHIND the lighter ones. There is
|
||||
// almost no cpu bash here and I dont need to z sort pels
|
||||
//
|
||||
//
|
||||
// Version 0.2 beta Released Saturday October 9 1999
|
||||
//
|
||||
// To do.. Still gotta move objects to rc file....
|
||||
//
|
||||
//
|
||||
//
|
||||
// Done...
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// includes
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <X11/xpm.h>
|
||||
#include "../wmgeneral/wmgeneral.h"
|
||||
#include "master.xpm"
|
||||
#include "sintab.c" // sin() and cos() are crap!
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// defines
|
||||
|
||||
#define PEL_SIZE 2 // 1 or 2 only
|
||||
|
||||
#define MAX_POINTS 125 // max # pels in an object
|
||||
|
||||
#define MASK_WIDTH 64 // window bitmap mask dimentions
|
||||
#define MASK_HEIGHT 64
|
||||
#define MASK_SIZE MASK_WIDTH * MASK_HEIGHT
|
||||
|
||||
// adjust angle for cos table lookup. cos = right angle further
|
||||
// on in sin table, circle = 512 degrees...
|
||||
|
||||
#define adjust(angle) ((angle + 128) & 0x1ff)
|
||||
#define size(array) ((sizeof(array) / sizeof(array[0])))
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// typedefs...
|
||||
|
||||
typedef struct // a point in 3d space
|
||||
{
|
||||
char x, y, z;
|
||||
}xyz;
|
||||
|
||||
typedef struct // a point in 2d space
|
||||
{
|
||||
int x, y;
|
||||
}xy;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int counter; // count down to next speed/shape change
|
||||
int reset; // initial value of counter
|
||||
int *ptr; // pointer to item to modify
|
||||
int delta; // ammount to change item by
|
||||
int upper; // upper limit for item
|
||||
int lower; // lower limit for item
|
||||
}modifier;
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// object structures...
|
||||
|
||||
xyz cube[]=
|
||||
{
|
||||
{-35,-35,-35},{-35,-35,-15},{-35,-35, 05},{-35,-35, 25},{-35,-35, 45},
|
||||
{-35,-15,-35},{-35,-15,-15},{-35,-15, 05},{-35,-15, 25},{-35,-15, 45},
|
||||
{-35, 05,-35},{-35, 05,-15},{-35, 05, 05},{-35, 05, 25},{-35, 05, 45},
|
||||
{-35, 25,-35},{-35, 25,-15},{-35, 25, 05},{-35, 25, 25},{-35, 25, 45},
|
||||
{-35, 45,-35},{-35, 45,-15},{-35, 45, 05},{-35, 45, 25},{-35, 45, 45},
|
||||
{-15,-35,-35},{-15,-35,-15},{-15,-35, 05},{-15,-35, 25},{-15,-35, 45},
|
||||
{-15,-15,-35},{-15,-15,-15},{-15,-15, 05},{-15,-15, 25},{-15,-15, 45},
|
||||
{-15, 05,-35},{-15, 05,-15},{-15, 05, 05},{-15, 05, 25},{-15, 05, 45},
|
||||
{-15, 25,-35},{-15, 25,-15},{-15, 25, 05},{-15, 25, 25},{-15, 25, 45},
|
||||
{-15, 45,-35},{-15, 45,-15},{-15, 45, 05},{-15, 45, 25},{-15, 45, 45},
|
||||
{ 05,-35,-35},{ 05,-35,-15},{ 05,-35, 05},{ 05,-35, 25},{ 05,-35, 45},
|
||||
{ 05,-15,-35},{ 05,-15,-15},{ 05,-15, 05},{ 05,-15, 25},{ 05,-15, 45},
|
||||
{ 05, 05,-35},{ 05, 05,-15},{ 05, 05, 05},{ 05, 05, 25},{ 05, 05, 45},
|
||||
{ 05, 25,-35},{ 05, 25,-15},{ 05, 25, 05},{ 05, 25, 25},{ 05, 25, 45},
|
||||
{ 05, 45,-35},{ 05, 45,-15},{ 05, 45, 05},{ 05, 45, 25},{ 05, 45, 45},
|
||||
{ 25,-35,-35},{ 25,-35,-15},{ 25,-35, 05},{ 25,-35, 25},{ 25,-35, 45},
|
||||
{ 25,-15,-35},{ 25,-15,-15},{ 25,-15, 05},{ 25,-15, 25},{ 25,-15, 45},
|
||||
{ 25, 05,-35},{ 25, 05,-15},{ 25, 05, 05},{ 25, 05, 25},{ 25, 05, 45},
|
||||
{ 25, 25,-35},{ 25, 25,-15},{ 25, 25, 05},{ 25, 25, 25},{ 25, 25, 45},
|
||||
{ 25, 45,-35},{ 25, 45,-15},{ 25, 45, 05},{ 25, 45, 25},{ 25, 45, 45},
|
||||
{ 45,-35,-35},{ 45,-35,-15},{ 45,-35, 05},{ 45,-35, 25},{ 45,-35, 45},
|
||||
{ 45,-15,-35},{ 45,-15,-15},{ 45,-15, 05},{ 45,-15, 25},{ 45,-15, 45},
|
||||
{ 45, 05,-35},{ 45, 05,-15},{ 45, 05, 05},{ 45, 05, 25},{ 45, 05, 45},
|
||||
{ 45, 25,-35},{ 45, 25,-15},{ 45, 25, 05},{ 45, 25, 25},{ 45, 25, 45},
|
||||
{ 45, 45,-35},{ 45, 45,-15},{ 45, 45, 05},{ 45, 45, 25},{ 45, 45, 45}
|
||||
};
|
||||
|
||||
xyz star[]=
|
||||
{
|
||||
{-35,-35, 05},{-35,-15, 05},{-35, 05, 05},{-35, 25, 05},{-35, 45, 05},
|
||||
{-15,-35, 05},{-15,-15, 05},{-15, 05, 05},{-15, 25, 05},{-15, 45, 05},
|
||||
{ 05,-35, 05},{ 05,-15, 05},{ 05, 05, 05},{ 05, 25, 05},{ 05, 45, 05},
|
||||
{ 25,-35, 05},{ 25,-15, 05},{ 25, 05, 05},{ 25, 25, 05},{ 25, 45, 05},
|
||||
{ 45,-35, 05},{ 45,-15, 05},{ 45, 05, 05},{ 45, 25, 05},{ 45, 45, 05},
|
||||
{ 05,-35,-35},{ 05,-35,-15},{ 05,-35, 25},{ 05,-35, 45},{-35, 05,-35},
|
||||
{ 05,-15,-35},{ 05,-15,-15},{ 05,-15, 25},{ 05,-15, 45},{-15, 05,-35},
|
||||
{ 05, 05,-35},{ 05, 05,-15},{ 05, 05, 25},{ 05, 05, 45},{ 05, 05,-35},
|
||||
{ 05, 25,-35},{ 05, 25,-15},{ 05, 25, 25},{ 05, 25, 45},{ 25, 05,-35},
|
||||
{ 05, 45,-35},{ 05, 45,-15},{ 05, 45, 25},{ 05, 45, 45},{ 45, 05,-35},
|
||||
{-35, 05,-15},{-35, 05, 25},{-35, 05, 45},{-15, 05,-15},{-15, 05, 25},
|
||||
{-15, 05, 45},{ 05, 05,-15},{ 05, 05, 25},{ 05, 05, 45},{ 25, 05,-15},
|
||||
{ 25, 05, 25},{ 25, 05, 45},{ 45, 05,-15},{ 45, 05, 25},{ 45, 05, 45}
|
||||
};
|
||||
|
||||
xyz dots[]=
|
||||
{
|
||||
{-35,-35,-35},{-35,-35, 45},{ 45, 45,-35},{ 45, 45, 45},{ 5,-35, 5},
|
||||
{ 5, 45, 5}
|
||||
};
|
||||
|
||||
xyz square[]=
|
||||
{
|
||||
{-35,-35,-35},{-35,-15,-35},{-35, 05,-35},{-35, 25,-35},{-35, 45,-35},
|
||||
{-15,-35,-35},{-15,-15,-35},{-15, 05,-35},{-15, 25,-35},{-15, 45,-35},
|
||||
{ 05,-35,-35},{ 05,-15,-35},{ 05, 05,-35},{ 05, 25,-35},{ 05, 45,-35},
|
||||
{ 25,-35,-35},{ 25,-15,-35},{ 25, 05,-35},{ 25, 25,-35},{ 25, 45,-35},
|
||||
{ 45,-35,-35},{ 45,-15,-35},{ 45, 05,-35},{ 45, 25,-35},{ 45, 45,-35}
|
||||
};
|
||||
|
||||
xyz cross[]=
|
||||
{
|
||||
{0x00,0x00,0x19}, {0x00,0x05,0x19}, {0x00,0x14,0x01}, {0x00,0x32,0x00},
|
||||
{0x00,0x7D,0x00}, {0x00,0xC9,0x00}, {0x01,0x5F,0x01}, {0x01,0xAB,0x01},
|
||||
{0x01,0xF6,0x01}, {0x02,0x41,0x02}, {0x02,0x8D,0x02}, {0x02,0xD8,0x02},
|
||||
{0x03,0x23,0x03}, {0x03,0x05,0x04}, {0x03,0x6F,0x03}, {0x03,0xBA,0x03},
|
||||
{0x04,0x51,0x04}, {0x04,0x9C,0x04}, {0x04,0xE7,0x04}, {0x05,0x13,0x06},
|
||||
{0x05,0x32,0x05}, {0x05,0x7D,0x05}, {0x05,0xC8,0x05}, {0x06,0x5E,0x06},
|
||||
{0x06,0xA9,0x06}, {0x06,0xF4,0x06}, {0x07,0x3F,0x07}, {0x07,0x8A,0x07},
|
||||
{0x07,0xD5,0x07}, {0x08,0x00,0x09}, {0x08,0x20,0x08}, {0x08,0x6B,0x08},
|
||||
{0x08,0xB5,0x08}, {0x09,0x4B,0x09}, {0x09,0x95,0x09}, {0x09,0xE0,0x09},
|
||||
{0x0A,0x09,0x0B}, {0x0A,0x2A,0x0A}, {0x0A,0x75,0x0A}, {0x0A,0xBF,0x0A},
|
||||
{0x0B,0x54,0x0B}, {0x0D,0x07,0x26}, {0x0F,0x02,0x28}, {0x19,0x09,0x32},
|
||||
{0x1E,0x04,0x37}, {0x22,0x0B,0x3B}, {0x2C,0x06,0x45}, {0x2D,0x01,0x46},
|
||||
{0x39,0x08,0x52}, {0x3D,0x03,0x56}, {0x43,0x0A,0x5C}, {0x4B,0x00,0x64},
|
||||
{0x4B,0x05,0x64}, {0x58,0x07,0x71}, {0x5B,0x02,0x74}, {0x64,0x09,0x7C},
|
||||
{0x84,0x08,0x9C}, {0x88,0x03,0xA1}, {0x8D,0x0A,0xA6}, {0x96,0x00,0xAF},
|
||||
{0x96,0x05,0xAF}, {0xA3,0x07,0xBC}, {0xA6,0x02,0xBF}, {0xAE,0x09,0xC7},
|
||||
{0xB5,0x04,0xCE}, {0xC2,0x06,0xDB}, {0xC4,0x01,0xDD}, {0xCE,0x08,0xE7},
|
||||
{0xD3,0x03,0xEC}, {0xD8,0x0A,0xF1}, {0xE1,0x05,0xFA}, {0xE2,0x00,0xFB},
|
||||
{0xEE,0x07,0x07}, {0xF1,0x02,0x0A}, {0xF9,0x09,0x11}
|
||||
};
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// object lists...
|
||||
|
||||
xyz *obj_list[]= // pointers to each object
|
||||
{
|
||||
(xyz *) &cube,
|
||||
(xyz *) &dots,
|
||||
(xyz *) &star,
|
||||
(xyz *) &square,
|
||||
(xyz *) &cross
|
||||
};
|
||||
|
||||
int point_counts[]= // number of points in each object
|
||||
{
|
||||
size(cube),
|
||||
size(dots),
|
||||
size(star),
|
||||
size(square),
|
||||
size(cross)
|
||||
};
|
||||
|
||||
#define NUM_OBJECTS size(obj_list)
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// i love global variables :)
|
||||
|
||||
// I hate 40 page functions with 50 levels if,and and but loop nesting
|
||||
|
||||
char *ProgName = NULL;
|
||||
char *Version = "0.2 Beta";
|
||||
|
||||
int x_angle = 0; // angles of rotation in each axis
|
||||
int y_angle = 0;
|
||||
int z_angle = 0;
|
||||
|
||||
short cos_x = 0; // trig stuff
|
||||
short cos_y = 0;
|
||||
short cos_z = 0;
|
||||
short sin_x = 0;
|
||||
short sin_y = 0;
|
||||
short sin_z = 0;
|
||||
|
||||
int x_off = 30; // world space position of object
|
||||
int y_off = 30;
|
||||
int z_off = 150;
|
||||
|
||||
int delta_x = 1; // rotational speed of object
|
||||
int delta_y = 1;
|
||||
int delta_z = 1;
|
||||
|
||||
int itters = 1; // number of frames till shape change
|
||||
int num_points = 0; // number of points in object
|
||||
int obj_number = 0;
|
||||
xyz *object = NULL; // pointer to current object
|
||||
|
||||
xy trail_1[125]; // frame histories
|
||||
xy trail_2[125];
|
||||
xy trail_3[125];
|
||||
|
||||
char *p_buff; // addr of pel buffer ( see draw_point() )
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
//
|
||||
|
||||
modifier w1 = // changes x rotation speed
|
||||
{
|
||||
30, // count down counter
|
||||
34, // reset value for countdown counter
|
||||
&delta_x, // item to modify on count = 0
|
||||
2, // ammount to add to item
|
||||
8, // upper limit for item
|
||||
0, // lower limit for item
|
||||
};
|
||||
|
||||
modifier w2 = // changes y rotation speed
|
||||
{
|
||||
20, 20, &delta_y, -1, 6, 0
|
||||
};
|
||||
|
||||
modifier w3 = // changes z rotation speed
|
||||
{
|
||||
30, 30, &delta_z, 1, 7, 0
|
||||
};
|
||||
|
||||
modifier w4 = // zooms object in / out of window
|
||||
{
|
||||
4, 4, &z_off, -2, 200, 90
|
||||
};
|
||||
|
||||
// modifier w5 = // these two do some funky things with
|
||||
// { // object space but they tend to make
|
||||
// 10,10,&x_off,-3,30,10 // the objects small and look further
|
||||
// }; // away so im not using them
|
||||
//
|
||||
// modifier w6 = // but go ahead and take a look at what
|
||||
// { // they do :)
|
||||
// 10,30,&y_off,-5,30,10
|
||||
// };
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// draw a point at x/y in specified colour
|
||||
|
||||
void draw_point(int x, int y, int c)
|
||||
{
|
||||
char *p;
|
||||
|
||||
if(x != -1) // is point clipped ?
|
||||
{
|
||||
c <<= 1; // adjust c for xpm lookup of colour
|
||||
p = p_buff + (x + (MASK_WIDTH * y));
|
||||
|
||||
if (*p > c) // if pel at *p is higher its darker so
|
||||
{ // its ok to overwrite it
|
||||
*p = c; // remember pel colour at this position
|
||||
copyXPMArea(c, 65, PEL_SIZE, PEL_SIZE, x, y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// Erase previously drawn point (draw again in BLACK!!!)
|
||||
|
||||
void erase_point(int x, int y)
|
||||
{
|
||||
if(x != -1) // is point clipped?
|
||||
{
|
||||
copyXPMArea(34, 65, PEL_SIZE, PEL_SIZE, x, y);
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// Process pending X events
|
||||
|
||||
void do_pending(void)
|
||||
{
|
||||
XEvent Event;
|
||||
|
||||
while (XPending(display)) // for all pending events do...
|
||||
{
|
||||
XNextEvent(display, &Event); // get event type
|
||||
|
||||
switch (Event.type) // we are only interested in...
|
||||
{
|
||||
case Expose: // expose events and...
|
||||
RedrawWindow();
|
||||
break;
|
||||
|
||||
case DestroyNotify: // our own "pending" demise :)
|
||||
XCloseDisplay(display);
|
||||
exit(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// clear frame history buffers
|
||||
|
||||
void clear_histories(void)
|
||||
{
|
||||
int i = MAX_POINTS;
|
||||
|
||||
while (i--) // for loops suck
|
||||
{
|
||||
trail_1[i].x = trail_1[i].y = -1; // -1 = invalid coordinate
|
||||
trail_2[i].x = trail_2[i].y = -1; // draw_point() ignores -1
|
||||
trail_3[i].x = trail_3[i].y = -1;
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// erase points that are 3 frames old. shift frame histories
|
||||
|
||||
void do_trails(void)
|
||||
{
|
||||
int i = MAX_POINTS;
|
||||
|
||||
while (i--)
|
||||
{
|
||||
erase_point(trail_3[i].x, trail_3[i].y);
|
||||
|
||||
trail_3[i].x = trail_2[i].x; // shift points within history
|
||||
trail_2[i].x = trail_1[i].x; // buffers
|
||||
trail_1[i].x = -1;
|
||||
|
||||
trail_3[i].y = trail_2[i].y;
|
||||
trail_2[i].y = trail_1[i].y;
|
||||
trail_1[i].y = -1;
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// pre calculate sin and cosine values for x y and z angles of rotation
|
||||
|
||||
void sincos(void)
|
||||
{
|
||||
sin_x = sin_tab[x_angle];
|
||||
sin_y = sin_tab[y_angle];
|
||||
sin_z = sin_tab[z_angle];
|
||||
|
||||
cos_x = sin_tab[adjust(x_angle)];
|
||||
cos_y = sin_tab[adjust(y_angle)];
|
||||
cos_z = sin_tab[adjust(z_angle)];
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// roatate object about x y and z axis (in object space)
|
||||
|
||||
void rotate(int *px, int *py, int *pz)
|
||||
{
|
||||
int tx, ty, tz; // temp store
|
||||
|
||||
if (x_angle) // rotate point about x axis...
|
||||
{
|
||||
ty = (*py * cos_x) - (*pz * sin_x);
|
||||
tz = (*py * sin_x) + (*pz * cos_x);
|
||||
|
||||
*py = (ty >> 14); // sin table is scaled up so we
|
||||
*pz = (tz >> 14); // must re scale all results down
|
||||
}
|
||||
|
||||
if (y_angle) // rotate point about y axis
|
||||
{
|
||||
tx = (*px * cos_y) - (*pz * sin_y);
|
||||
tz = (*px * sin_y) + (*pz * cos_y);
|
||||
|
||||
*px = (tx >> 14);
|
||||
*pz = (tz >> 14);
|
||||
}
|
||||
|
||||
if (z_angle) // rotate point about z axis
|
||||
{
|
||||
tx = (*px * cos_z) - (*py * sin_z);
|
||||
ty = (*px * sin_z) + (*py * cos_z);
|
||||
|
||||
*px = (tx >> 14);
|
||||
*py = (ty >> 14);
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// project point in 3d space onto plane in 2d space
|
||||
|
||||
void project(int px, int py, int pz, int *x, int *y)
|
||||
{
|
||||
int tx, ty; // temp store...
|
||||
|
||||
*x = *y = -1; // assume point is clipped
|
||||
|
||||
if ((z_off + pz - 5) < 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ty = ((y_off * py) / (z_off + pz)) + 30;
|
||||
|
||||
if ((ty > 5) && (ty < 59))
|
||||
{
|
||||
tx = ((x_off * px) / (z_off + pz)) + 30;
|
||||
|
||||
if ((tx > 5) && (tx < 59))
|
||||
{
|
||||
*x = tx;
|
||||
*y = ty;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// draw one frame of object...
|
||||
|
||||
void do_frame(void)
|
||||
{
|
||||
int px, py, pz; // 3d coordinates to rotate
|
||||
int x, y, c; // 2d coordiantes of point and colour
|
||||
int i = num_points; // loop counter
|
||||
int j = MASK_SIZE;
|
||||
char pel_buff[MASK_SIZE]; // frame buffer ( see draw_point() )
|
||||
p_buff = &pel_buff[0];
|
||||
|
||||
while (j--) // erase pel buffer
|
||||
{
|
||||
pel_buff[j] = 32;
|
||||
}
|
||||
|
||||
do_trails(); // clear pels that are 3 frames old
|
||||
sincos(); // calculate all sin/cos values
|
||||
|
||||
while(i--)
|
||||
{
|
||||
px = object[i].x; // collect point from object
|
||||
py = object[i].y;
|
||||
pz = object[i].z;
|
||||
|
||||
rotate(&px, &py, &pz); // rotate this point about x/y and z axis
|
||||
project(px, py, pz, &x, &y); // projection = convert xyz to xy
|
||||
|
||||
trail_1[i].x = x; // store frame history for all pels
|
||||
trail_1[i].y = y; // of this frame
|
||||
|
||||
c = (((z_off - 90) / 14) & 15) < 1;
|
||||
c -= ((-pz / 5) - 10);
|
||||
|
||||
draw_point(x, y, c);
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// adjust rotational speeds / distance between min and max for each
|
||||
|
||||
void modify(modifier *mod)
|
||||
{
|
||||
mod->counter--;
|
||||
|
||||
if (!mod->counter)
|
||||
{
|
||||
mod->counter = mod->reset;
|
||||
|
||||
*mod->ptr += mod->delta;
|
||||
|
||||
if (*mod->ptr >= mod->upper || *mod->ptr <= mod->lower)
|
||||
{
|
||||
mod->delta = -(mod->delta);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// do the above on each of the 4 modifiers
|
||||
|
||||
void do_deltas(void)
|
||||
{
|
||||
modify(&w1); // modify x rotational speed
|
||||
modify(&w2); // modify y rotational speed
|
||||
modify(&w3); // modify z rotational speed
|
||||
modify(&w4); // zoom object in and out
|
||||
// modify(&w5); // not used because they make objects
|
||||
// modify(&w6); // stay in the distance
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// adjust x y and z angles of ritation for next frame
|
||||
|
||||
void change_angles(void)
|
||||
{
|
||||
x_angle += delta_x;
|
||||
y_angle += delta_y;
|
||||
z_angle += delta_z;
|
||||
|
||||
x_angle &= 0x1ff;
|
||||
y_angle &= 0x1ff;
|
||||
z_angle &= 0x1ff;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
void do_demo(void)
|
||||
{
|
||||
while (1) // only way out is to die
|
||||
{
|
||||
while(--itters) // countdown to next shape change...
|
||||
{ // shape change FORCED on entry
|
||||
change_angles(); // adjust angles of rotation
|
||||
do_frame(); // draw object
|
||||
do_deltas(); // modify rotation speeds etc
|
||||
|
||||
RedrawWindow(); // lets see what weve drawn...
|
||||
do_pending(); // quit / expose
|
||||
usleep(50000); // erm... coders never sleep :)
|
||||
}
|
||||
|
||||
itters = 2500; // should randomise this
|
||||
|
||||
object = obj_list[obj_number];
|
||||
num_points = point_counts[obj_number++];
|
||||
|
||||
if (obj_number == NUM_OBJECTS)
|
||||
{
|
||||
obj_number = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// display version info and credits
|
||||
|
||||
void credits(void)
|
||||
{
|
||||
printf("\n");
|
||||
printf("WM-Dots DEMO? version %s\n",Version);
|
||||
printf(" by Mark I Manning IV\n\n");
|
||||
printf("greets to follow soon....\n\n");
|
||||
}
|
||||
|
||||
// sgore for helping me get star office :)
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// scan command line args
|
||||
|
||||
void scan_args(int argc,char **argv)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < argc; i++)
|
||||
{
|
||||
char *arg = argv[i];
|
||||
|
||||
if (*arg == '-')
|
||||
{
|
||||
switch (arg[1])
|
||||
{
|
||||
case 'v':
|
||||
credits();
|
||||
exit(0);
|
||||
break;
|
||||
|
||||
default:
|
||||
;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// main at BOTTOM of source so we have no EVIL forward refs!!
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
char mask[MASK_SIZE];
|
||||
|
||||
ProgName = argv[0];
|
||||
if (strlen(ProgName) >= 5)
|
||||
{
|
||||
ProgName += (strlen(ProgName) - 5);
|
||||
}
|
||||
|
||||
scan_args(argc, argv);
|
||||
|
||||
createXBMfromXPM(mask, master_xpm, MASK_WIDTH, MASK_HEIGHT);
|
||||
openXwindow(argc, argv, master_xpm, mask, MASK_WIDTH, MASK_HEIGHT);
|
||||
|
||||
clear_histories(); // clear frame history buffers
|
||||
do_demo(); // main = short and sweet :)
|
||||
|
||||
return(0); // never gets executed but lets get rid
|
||||
} // of that stupid warning :)
|
||||
|
||||
// =======================================================================
|
BIN
wmdots/wmdots/wmdots.o
Normal file
BIN
wmdots/wmdots/wmdots.o
Normal file
Binary file not shown.
169
wmdots/wmgeneral/list.c
Normal file
169
wmdots/wmgeneral/list.c
Normal file
|
@ -0,0 +1,169 @@
|
|||
/* Generic single linked list to keep various information
|
||||
Copyright (C) 1993, 1994 Free Software Foundation, Inc.
|
||||
|
||||
|
||||
Author: Kresten Krab Thorup
|
||||
|
||||
Many modifications by Alfredo K. Kojima
|
||||
|
||||
|
||||
This file is part of GNU CC.
|
||||
|
||||
GNU CC is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU CC is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU CC; see the file COPYING. If not, write to
|
||||
the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* As a special exception, if you link this library with files compiled with
|
||||
GCC to produce an executable, this does not cause the resulting executable
|
||||
to be covered by the GNU General Public License. This exception does not
|
||||
however invalidate any other reasons why the executable file might be
|
||||
covered by the GNU General Public License. */
|
||||
|
||||
#include "list.h"
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
# include <sys/types.h>
|
||||
#endif
|
||||
#include <stdlib.h>
|
||||
|
||||
/* Return a cons cell produced from (head . tail) */
|
||||
|
||||
INLINE LinkedList*
|
||||
list_cons(void* head, LinkedList* tail)
|
||||
{
|
||||
LinkedList* cell;
|
||||
|
||||
cell = (LinkedList*)malloc(sizeof(LinkedList));
|
||||
cell->head = head;
|
||||
cell->tail = tail;
|
||||
return cell;
|
||||
}
|
||||
|
||||
/* Return the length of a list, list_length(NULL) returns zero */
|
||||
|
||||
INLINE int
|
||||
list_length(LinkedList* list)
|
||||
{
|
||||
int i = 0;
|
||||
while(list)
|
||||
{
|
||||
i += 1;
|
||||
list = list->tail;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
/* Return the Nth element of LIST, where N count from zero. If N
|
||||
larger than the list length, NULL is returned */
|
||||
|
||||
INLINE void*
|
||||
list_nth(int index, LinkedList* list)
|
||||
{
|
||||
while(index-- != 0)
|
||||
{
|
||||
if(list->tail)
|
||||
list = list->tail;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
return list->head;
|
||||
}
|
||||
|
||||
/* Remove the element at the head by replacing it by its successor */
|
||||
|
||||
INLINE void
|
||||
list_remove_head(LinkedList** list)
|
||||
{
|
||||
if (!*list) return;
|
||||
if ((*list)->tail)
|
||||
{
|
||||
LinkedList* tail = (*list)->tail; /* fetch next */
|
||||
*(*list) = *tail; /* copy next to list head */
|
||||
free(tail); /* free next */
|
||||
}
|
||||
else /* only one element in list */
|
||||
{
|
||||
free(*list);
|
||||
(*list) = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Remove the element with `car' set to ELEMENT */
|
||||
/*
|
||||
INLINE void
|
||||
list_remove_elem(LinkedList** list, void* elem)
|
||||
{
|
||||
while (*list)
|
||||
{
|
||||
if ((*list)->head == elem)
|
||||
list_remove_head(list);
|
||||
*list = (*list ? (*list)->tail : NULL);
|
||||
}
|
||||
}*/
|
||||
|
||||
INLINE LinkedList *
|
||||
list_remove_elem(LinkedList* list, void* elem)
|
||||
{
|
||||
LinkedList *tmp;
|
||||
|
||||
if (list) {
|
||||
if (list->head == elem) {
|
||||
tmp = list->tail;
|
||||
free(list);
|
||||
return tmp;
|
||||
}
|
||||
list->tail = list_remove_elem(list->tail, elem);
|
||||
return list;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/* Return element that has ELEM as car */
|
||||
|
||||
INLINE LinkedList*
|
||||
list_find(LinkedList* list, void* elem)
|
||||
{
|
||||
while(list)
|
||||
{
|
||||
if (list->head == elem)
|
||||
return list;
|
||||
list = list->tail;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Free list (backwards recursive) */
|
||||
|
||||
INLINE void
|
||||
list_free(LinkedList* list)
|
||||
{
|
||||
if(list)
|
||||
{
|
||||
list_free(list->tail);
|
||||
free(list);
|
||||
}
|
||||
}
|
||||
|
||||
/* Map FUNCTION over all elements in LIST */
|
||||
|
||||
INLINE void
|
||||
list_mapcar(LinkedList* list, void(*function)(void*))
|
||||
{
|
||||
while(list)
|
||||
{
|
||||
(*function)(list->head);
|
||||
list = list->tail;
|
||||
}
|
||||
}
|
59
wmdots/wmgeneral/list.h
Normal file
59
wmdots/wmgeneral/list.h
Normal file
|
@ -0,0 +1,59 @@
|
|||
/* Generic single linked list to keep various information
|
||||
Copyright (C) 1993, 1994 Free Software Foundation, Inc.
|
||||
|
||||
Author: Kresten Krab Thorup
|
||||
|
||||
This file is part of GNU CC.
|
||||
|
||||
GNU CC is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU CC is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU CC; see the file COPYING. If not, write to
|
||||
the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* As a special exception, if you link this library with files compiled with
|
||||
GCC to produce an executable, this does not cause the resulting executable
|
||||
to be covered by the GNU General Public License. This exception does not
|
||||
however invalidate any other reasons why the executable file might be
|
||||
covered by the GNU General Public License. */
|
||||
|
||||
#ifndef __LIST_H_
|
||||
#define __LIST_H_
|
||||
|
||||
#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
|
||||
# define INLINE inline
|
||||
#else
|
||||
# define INLINE
|
||||
#endif
|
||||
|
||||
typedef struct LinkedList {
|
||||
void *head;
|
||||
struct LinkedList *tail;
|
||||
} LinkedList;
|
||||
|
||||
INLINE LinkedList* list_cons(void* head, LinkedList* tail);
|
||||
|
||||
INLINE int list_length(LinkedList* list);
|
||||
|
||||
INLINE void* list_nth(int index, LinkedList* list);
|
||||
|
||||
INLINE void list_remove_head(LinkedList** list);
|
||||
|
||||
INLINE LinkedList *list_remove_elem(LinkedList* list, void* elem);
|
||||
|
||||
INLINE void list_mapcar(LinkedList* list, void(*function)(void*));
|
||||
|
||||
INLINE LinkedList*list_find(LinkedList* list, void* elem);
|
||||
|
||||
INLINE void list_free(LinkedList* list);
|
||||
|
||||
#endif
|
BIN
wmdots/wmgeneral/list.o
Normal file
BIN
wmdots/wmgeneral/list.o
Normal file
Binary file not shown.
164
wmdots/wmgeneral/misc.c
Normal file
164
wmdots/wmgeneral/misc.c
Normal file
|
@ -0,0 +1,164 @@
|
|||
/* dock.c- built-in Dock module for WindowMaker
|
||||
*
|
||||
* WindowMaker window manager
|
||||
*
|
||||
* Copyright (c) 1997 Alfredo K. Kojima
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "list.h"
|
||||
#include "misc.h"
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
* parse_command--
|
||||
* Divides a command line into a argv/argc pair.
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
#define PRC_ALPHA 0
|
||||
#define PRC_BLANK 1
|
||||
#define PRC_ESCAPE 2
|
||||
#define PRC_DQUOTE 3
|
||||
#define PRC_EOS 4
|
||||
#define PRC_SQUOTE 5
|
||||
|
||||
typedef struct {
|
||||
short nstate;
|
||||
short output;
|
||||
} DFA;
|
||||
|
||||
|
||||
static DFA mtable[9][6] = {
|
||||
{{3,1},{0,0},{4,0},{1,0},{8,0},{6,0}},
|
||||
{{1,1},{1,1},{2,0},{3,0},{5,0},{1,1}},
|
||||
{{1,1},{1,1},{1,1},{1,1},{5,0},{1,1}},
|
||||
{{3,1},{5,0},{4,0},{1,0},{5,0},{6,0}},
|
||||
{{3,1},{3,1},{3,1},{3,1},{5,0},{3,1}},
|
||||
{{-1,-1},{0,0},{0,0},{0,0},{0,0},{0,0}}, /* final state */
|
||||
{{6,1},{6,1},{7,0},{6,1},{5,0},{3,0}},
|
||||
{{6,1},{6,1},{6,1},{6,1},{5,0},{6,1}},
|
||||
{{-1,-1},{0,0},{0,0},{0,0},{0,0},{0,0}}, /* final state */
|
||||
};
|
||||
|
||||
char*
|
||||
next_token(char *word, char **next)
|
||||
{
|
||||
char *ptr;
|
||||
char *ret, *t;
|
||||
int state, ctype;
|
||||
|
||||
t = ret = malloc(strlen(word)+1);
|
||||
ptr = word;
|
||||
|
||||
state = 0;
|
||||
*t = 0;
|
||||
while (1) {
|
||||
if (*ptr==0)
|
||||
ctype = PRC_EOS;
|
||||
else if (*ptr=='\\')
|
||||
ctype = PRC_ESCAPE;
|
||||
else if (*ptr=='"')
|
||||
ctype = PRC_DQUOTE;
|
||||
else if (*ptr=='\'')
|
||||
ctype = PRC_SQUOTE;
|
||||
else if (*ptr==' ' || *ptr=='\t')
|
||||
ctype = PRC_BLANK;
|
||||
else
|
||||
ctype = PRC_ALPHA;
|
||||
|
||||
if (mtable[state][ctype].output) {
|
||||
*t = *ptr; t++;
|
||||
*t = 0;
|
||||
}
|
||||
state = mtable[state][ctype].nstate;
|
||||
ptr++;
|
||||
if (mtable[state][0].output<0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (*ret==0)
|
||||
t = NULL;
|
||||
else
|
||||
t = strdup(ret);
|
||||
|
||||
free(ret);
|
||||
|
||||
if (ctype==PRC_EOS)
|
||||
*next = NULL;
|
||||
else
|
||||
*next = ptr;
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
|
||||
extern void
|
||||
parse_command(char *command, char ***argv, int *argc)
|
||||
{
|
||||
LinkedList *list = NULL;
|
||||
char *token, *line;
|
||||
int count, i;
|
||||
|
||||
line = command;
|
||||
do {
|
||||
token = next_token(line, &line);
|
||||
if (token) {
|
||||
list = list_cons(token, list);
|
||||
}
|
||||
} while (token!=NULL && line!=NULL);
|
||||
|
||||
count = list_length(list);
|
||||
*argv = malloc(sizeof(char*)*count);
|
||||
i = count;
|
||||
while (list!=NULL) {
|
||||
(*argv)[--i] = list->head;
|
||||
list_remove_head(&list);
|
||||
}
|
||||
*argc = count;
|
||||
}
|
||||
|
||||
extern pid_t
|
||||
execCommand(char *command)
|
||||
{
|
||||
pid_t pid;
|
||||
char **argv;
|
||||
int argc;
|
||||
|
||||
parse_command(command, &argv, &argc);
|
||||
|
||||
if (argv==NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((pid=fork())==0) {
|
||||
char **args;
|
||||
int i;
|
||||
|
||||
args = malloc(sizeof(char*)*(argc+1));
|
||||
if (!args)
|
||||
exit(10);
|
||||
for (i=0; i<argc; i++) {
|
||||
args[i] = argv[i];
|
||||
}
|
||||
args[argc] = NULL;
|
||||
execvp(argv[0], args);
|
||||
exit(10);
|
||||
}
|
||||
return pid;
|
||||
}
|
9
wmdots/wmgeneral/misc.h
Normal file
9
wmdots/wmgeneral/misc.h
Normal file
|
@ -0,0 +1,9 @@
|
|||
#ifndef __MISC_H
|
||||
#define __MISC_H
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
extern void parse_command(char *, char ***, int *);
|
||||
|
||||
extern pid_t execCommand(char *);
|
||||
#endif /* __MISC_H */
|
BIN
wmdots/wmgeneral/misc.o
Normal file
BIN
wmdots/wmgeneral/misc.o
Normal file
Binary file not shown.
479
wmdots/wmgeneral/wmgeneral.c
Normal file
479
wmdots/wmgeneral/wmgeneral.c
Normal file
|
@ -0,0 +1,479 @@
|
|||
/*
|
||||
Best viewed with vim5, using ts=4
|
||||
|
||||
wmgeneral was taken from wmppp.
|
||||
|
||||
It has a lot of routines which most of the wm* programs use.
|
||||
|
||||
------------------------------------------------------------
|
||||
|
||||
Author: Martijn Pieterse (pieterse@xs4all.nl)
|
||||
|
||||
---
|
||||
CHANGES:
|
||||
---
|
||||
14/09/1998 (Dave Clark, clarkd@skyia.com)
|
||||
* Updated createXBMfromXPM routine
|
||||
* Now supports >256 colors
|
||||
11/09/1998 (Martijn Pieterse, pieterse@xs4all.nl)
|
||||
* Removed a bug from parse_rcfile. You could
|
||||
not use "start" in a command if a label was
|
||||
also start.
|
||||
* Changed the needed geometry string.
|
||||
We don't use window size, and don't support
|
||||
negative positions.
|
||||
03/09/1998 (Martijn Pieterse, pieterse@xs4all.nl)
|
||||
* Added parse_rcfile2
|
||||
02/09/1998 (Martijn Pieterse, pieterse@xs4all.nl)
|
||||
* Added -geometry support (untested)
|
||||
28/08/1998 (Martijn Pieterse, pieterse@xs4all.nl)
|
||||
* Added createXBMfromXPM routine
|
||||
* Saves a lot of work with changing xpm's.
|
||||
02/05/1998 (Martijn Pieterse, pieterse@xs4all.nl)
|
||||
* changed the read_rc_file to parse_rcfile, as suggested by Marcelo E. Magallon
|
||||
* debugged the parse_rc file.
|
||||
30/04/1998 (Martijn Pieterse, pieterse@xs4all.nl)
|
||||
* Ripped similar code from all the wm* programs,
|
||||
and put them in a single file.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <ctype.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/xpm.h>
|
||||
#include <X11/extensions/shape.h>
|
||||
|
||||
#include "wmgeneral.h"
|
||||
|
||||
/*****************/
|
||||
/* X11 Variables */
|
||||
/*****************/
|
||||
|
||||
int screen;
|
||||
int x_fd;
|
||||
int d_depth;
|
||||
XSizeHints mysizehints;
|
||||
XWMHints mywmhints;
|
||||
Pixel back_pix, fore_pix;
|
||||
char *Geometry = "";
|
||||
GC NormalGC;
|
||||
XpmIcon wmgen;
|
||||
Pixmap pixmask;
|
||||
|
||||
/*****************/
|
||||
/* Mouse Regions */
|
||||
/*****************/
|
||||
|
||||
typedef struct {
|
||||
int enable;
|
||||
int top;
|
||||
int bottom;
|
||||
int left;
|
||||
int right;
|
||||
} MOUSE_REGION;
|
||||
|
||||
MOUSE_REGION mouse_region[MAX_MOUSE_REGION];
|
||||
|
||||
/***********************/
|
||||
/* Function Prototypes */
|
||||
/***********************/
|
||||
|
||||
static void GetXPM(XpmIcon *, char **);
|
||||
static Pixel GetColor(char *);
|
||||
void RedrawWindow(void);
|
||||
void AddMouseRegion(int, int, int, int, int);
|
||||
int CheckMouseRegion(int, int);
|
||||
|
||||
/*******************************************************************************\
|
||||
|* parse_rcfile *|
|
||||
\*******************************************************************************/
|
||||
|
||||
void parse_rcfile(const char *filename, rckeys *keys) {
|
||||
|
||||
char *p,*q;
|
||||
char temp[128];
|
||||
char *tokens = " :\t\n";
|
||||
FILE *fp;
|
||||
int i,key;
|
||||
|
||||
fp = fopen(filename, "r");
|
||||
if (fp) {
|
||||
while (fgets(temp, 128, fp)) {
|
||||
key = 0;
|
||||
q = strdup(temp);
|
||||
q = strtok(q, tokens);
|
||||
while (key >= 0 && keys[key].label) {
|
||||
if ((!strcmp(q, keys[key].label))) {
|
||||
p = strstr(temp, keys[key].label);
|
||||
p += strlen(keys[key].label);
|
||||
p += strspn(p, tokens);
|
||||
if ((i = strcspn(p, "#\n"))) p[i] = 0;
|
||||
free(*keys[key].var);
|
||||
*keys[key].var = strdup(p);
|
||||
key = -1;
|
||||
} else key++;
|
||||
}
|
||||
free(q);
|
||||
}
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************\
|
||||
|* parse_rcfile2 *|
|
||||
\*******************************************************************************/
|
||||
|
||||
void parse_rcfile2(const char *filename, rckeys2 *keys) {
|
||||
|
||||
char *p;
|
||||
char temp[128];
|
||||
char *tokens = " :\t\n";
|
||||
FILE *fp;
|
||||
int i,key;
|
||||
char *family = NULL;
|
||||
|
||||
fp = fopen(filename, "r");
|
||||
if (fp) {
|
||||
while (fgets(temp, 128, fp)) {
|
||||
key = 0;
|
||||
while (key >= 0 && keys[key].label) {
|
||||
if ((p = strstr(temp, keys[key].label))) {
|
||||
p += strlen(keys[key].label);
|
||||
p += strspn(p, tokens);
|
||||
if ((i = strcspn(p, "#\n"))) p[i] = 0;
|
||||
free(*keys[key].var);
|
||||
*keys[key].var = strdup(p);
|
||||
key = -1;
|
||||
} else key++;
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
}
|
||||
free(family);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************\
|
||||
|* GetXPM *|
|
||||
\*******************************************************************************/
|
||||
|
||||
static void GetXPM(XpmIcon *wmgen, char *pixmap_bytes[]) {
|
||||
|
||||
XWindowAttributes attributes;
|
||||
int err;
|
||||
|
||||
/* For the colormap */
|
||||
XGetWindowAttributes(display, Root, &attributes);
|
||||
|
||||
wmgen->attributes.valuemask |= (XpmReturnPixels | XpmReturnExtensions);
|
||||
|
||||
err = XpmCreatePixmapFromData(display, Root, pixmap_bytes, &(wmgen->pixmap),
|
||||
&(wmgen->mask), &(wmgen->attributes));
|
||||
|
||||
if (err != XpmSuccess) {
|
||||
fprintf(stderr, "Not enough free colorcells.\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************\
|
||||
|* GetColor *|
|
||||
\*******************************************************************************/
|
||||
|
||||
static Pixel GetColor(char *name) {
|
||||
|
||||
XColor color;
|
||||
XWindowAttributes attributes;
|
||||
|
||||
XGetWindowAttributes(display, Root, &attributes);
|
||||
|
||||
color.pixel = 0;
|
||||
if (!XParseColor(display, attributes.colormap, name, &color)) {
|
||||
fprintf(stderr, "wm.app: can't parse %s.\n", name);
|
||||
} else if (!XAllocColor(display, attributes.colormap, &color)) {
|
||||
fprintf(stderr, "wm.app: can't allocate %s.\n", name);
|
||||
}
|
||||
return color.pixel;
|
||||
}
|
||||
|
||||
/*******************************************************************************\
|
||||
|* flush_expose *|
|
||||
\*******************************************************************************/
|
||||
|
||||
static int flush_expose(Window w) {
|
||||
|
||||
XEvent dummy;
|
||||
int i=0;
|
||||
|
||||
while (XCheckTypedWindowEvent(display, w, Expose, &dummy))
|
||||
i++;
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
/*******************************************************************************\
|
||||
|* RedrawWindow *|
|
||||
\*******************************************************************************/
|
||||
|
||||
void RedrawWindow(void) {
|
||||
|
||||
flush_expose(iconwin);
|
||||
XCopyArea(display, wmgen.pixmap, iconwin, NormalGC,
|
||||
0,0, wmgen.attributes.width, wmgen.attributes.height, 0,0);
|
||||
flush_expose(win);
|
||||
XCopyArea(display, wmgen.pixmap, win, NormalGC,
|
||||
0,0, wmgen.attributes.width, wmgen.attributes.height, 0,0);
|
||||
}
|
||||
|
||||
/*******************************************************************************\
|
||||
|* RedrawWindowXY *|
|
||||
\*******************************************************************************/
|
||||
|
||||
void RedrawWindowXY(int x, int y) {
|
||||
|
||||
flush_expose(iconwin);
|
||||
XCopyArea(display, wmgen.pixmap, iconwin, NormalGC,
|
||||
x,y, wmgen.attributes.width, wmgen.attributes.height, 0,0);
|
||||
flush_expose(win);
|
||||
XCopyArea(display, wmgen.pixmap, win, NormalGC,
|
||||
x,y, wmgen.attributes.width, wmgen.attributes.height, 0,0);
|
||||
}
|
||||
|
||||
/*******************************************************************************\
|
||||
|* AddMouseRegion *|
|
||||
\*******************************************************************************/
|
||||
|
||||
void AddMouseRegion(int index, int left, int top, int right, int bottom) {
|
||||
|
||||
if (index < MAX_MOUSE_REGION) {
|
||||
mouse_region[index].enable = 1;
|
||||
mouse_region[index].top = top;
|
||||
mouse_region[index].left = left;
|
||||
mouse_region[index].bottom = bottom;
|
||||
mouse_region[index].right = right;
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************\
|
||||
|* CheckMouseRegion *|
|
||||
\*******************************************************************************/
|
||||
|
||||
int CheckMouseRegion(int x, int y) {
|
||||
|
||||
int i;
|
||||
int found;
|
||||
|
||||
found = 0;
|
||||
|
||||
for (i=0; i<MAX_MOUSE_REGION && !found; i++) {
|
||||
if (mouse_region[i].enable &&
|
||||
x <= mouse_region[i].right &&
|
||||
x >= mouse_region[i].left &&
|
||||
y <= mouse_region[i].bottom &&
|
||||
y >= mouse_region[i].top)
|
||||
found = 1;
|
||||
}
|
||||
if (!found) return -1;
|
||||
return (i-1);
|
||||
}
|
||||
|
||||
/*******************************************************************************\
|
||||
|* createXBMfromXPM *|
|
||||
\*******************************************************************************/
|
||||
void createXBMfromXPM(char *xbm, char **xpm, int sx, int sy) {
|
||||
|
||||
int i,j,k;
|
||||
int width, height, numcol, depth;
|
||||
int zero=0;
|
||||
unsigned char bwrite;
|
||||
int bcount;
|
||||
int curpixel;
|
||||
|
||||
sscanf(*xpm, "%d %d %d %d", &width, &height, &numcol, &depth);
|
||||
|
||||
|
||||
for (k=0; k!=depth; k++)
|
||||
{
|
||||
zero <<=8;
|
||||
zero |= xpm[1][k];
|
||||
}
|
||||
|
||||
for (i=numcol+1; i < numcol+sy+1; i++) {
|
||||
bcount = 0;
|
||||
bwrite = 0;
|
||||
for (j=0; j<sx*depth; j+=depth) {
|
||||
bwrite >>= 1;
|
||||
|
||||
curpixel=0;
|
||||
for (k=0; k!=depth; k++)
|
||||
{
|
||||
curpixel <<=8;
|
||||
curpixel |= xpm[i][j+k];
|
||||
}
|
||||
|
||||
if ( curpixel != zero ) {
|
||||
bwrite += 128;
|
||||
}
|
||||
bcount++;
|
||||
if (bcount == 8) {
|
||||
*xbm = bwrite;
|
||||
xbm++;
|
||||
bcount = 0;
|
||||
bwrite = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************\
|
||||
|* copyXPMArea *|
|
||||
\*******************************************************************************/
|
||||
|
||||
void copyXPMArea(int x, int y, int sx, int sy, int dx, int dy) {
|
||||
|
||||
XCopyArea(display, wmgen.pixmap, wmgen.pixmap, NormalGC, x, y, sx, sy, dx, dy);
|
||||
|
||||
}
|
||||
|
||||
/*******************************************************************************\
|
||||
|* copyXBMArea *|
|
||||
\*******************************************************************************/
|
||||
|
||||
void copyXBMArea(int x, int y, int sx, int sy, int dx, int dy) {
|
||||
|
||||
XCopyArea(display, wmgen.mask, wmgen.pixmap, NormalGC, x, y, sx, sy, dx, dy);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************\
|
||||
|* setMaskXY *|
|
||||
\*******************************************************************************/
|
||||
|
||||
void setMaskXY(int x, int y) {
|
||||
|
||||
XShapeCombineMask(display, win, ShapeBounding, x, y, pixmask, ShapeSet);
|
||||
XShapeCombineMask(display, iconwin, ShapeBounding, x, y, pixmask, ShapeSet);
|
||||
}
|
||||
|
||||
/*******************************************************************************\
|
||||
|* openXwindow *|
|
||||
\*******************************************************************************/
|
||||
void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bits, int pixmask_width, int pixmask_height) {
|
||||
|
||||
unsigned int borderwidth = 1;
|
||||
XClassHint classHint;
|
||||
char *display_name = NULL;
|
||||
char *wname = argv[0];
|
||||
XTextProperty name;
|
||||
|
||||
XGCValues gcv;
|
||||
unsigned long gcm;
|
||||
|
||||
char *geometry = NULL;
|
||||
|
||||
int dummy=0;
|
||||
int i, wx, wy;
|
||||
|
||||
for (i=1; argv[i]; i++) {
|
||||
if (!strcmp(argv[i], "-display")) {
|
||||
display_name = argv[i+1];
|
||||
i++;
|
||||
}
|
||||
if (!strcmp(argv[i], "-geometry")) {
|
||||
geometry = argv[i+1];
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(display = XOpenDisplay(display_name))) {
|
||||
fprintf(stderr, "%s: can't open display %s\n",
|
||||
wname, XDisplayName(display_name));
|
||||
exit(1);
|
||||
}
|
||||
screen = DefaultScreen(display);
|
||||
Root = RootWindow(display, screen);
|
||||
d_depth = DefaultDepth(display, screen);
|
||||
x_fd = XConnectionNumber(display);
|
||||
|
||||
/* Convert XPM to XImage */
|
||||
GetXPM(&wmgen, pixmap_bytes);
|
||||
|
||||
/* Create a window to hold the stuff */
|
||||
mysizehints.flags = USSize | USPosition;
|
||||
mysizehints.x = 0;
|
||||
mysizehints.y = 0;
|
||||
|
||||
back_pix = GetColor("white");
|
||||
fore_pix = GetColor("black");
|
||||
|
||||
XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints,
|
||||
&mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy);
|
||||
|
||||
mysizehints.width = 64;
|
||||
mysizehints.height = 64;
|
||||
|
||||
win = XCreateSimpleWindow(display, Root, mysizehints.x, mysizehints.y,
|
||||
mysizehints.width, mysizehints.height, borderwidth, fore_pix, back_pix);
|
||||
|
||||
iconwin = XCreateSimpleWindow(display, win, mysizehints.x, mysizehints.y,
|
||||
mysizehints.width, mysizehints.height, borderwidth, fore_pix, back_pix);
|
||||
|
||||
/* Activate hints */
|
||||
XSetWMNormalHints(display, win, &mysizehints);
|
||||
classHint.res_name = wname;
|
||||
classHint.res_class = wname;
|
||||
XSetClassHint(display, win, &classHint);
|
||||
|
||||
XSelectInput(display, win, ButtonPressMask | ExposureMask | ButtonReleaseMask | PointerMotionMask | StructureNotifyMask);
|
||||
XSelectInput(display, iconwin, ButtonPressMask | ExposureMask | ButtonReleaseMask | PointerMotionMask | StructureNotifyMask);
|
||||
|
||||
if (XStringListToTextProperty(&wname, 1, &name) == 0) {
|
||||
fprintf(stderr, "%s: can't allocate window name\n", wname);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
XSetWMName(display, win, &name);
|
||||
|
||||
/* Create GC for drawing */
|
||||
|
||||
gcm = GCForeground | GCBackground | GCGraphicsExposures;
|
||||
gcv.foreground = fore_pix;
|
||||
gcv.background = back_pix;
|
||||
gcv.graphics_exposures = 0;
|
||||
NormalGC = XCreateGC(display, Root, gcm, &gcv);
|
||||
|
||||
/* ONLYSHAPE ON */
|
||||
|
||||
pixmask = XCreateBitmapFromData(display, win, pixmask_bits, pixmask_width, pixmask_height);
|
||||
|
||||
XShapeCombineMask(display, win, ShapeBounding, 0, 0, pixmask, ShapeSet);
|
||||
XShapeCombineMask(display, iconwin, ShapeBounding, 0, 0, pixmask, ShapeSet);
|
||||
|
||||
/* ONLYSHAPE OFF */
|
||||
|
||||
mywmhints.initial_state = WithdrawnState;
|
||||
mywmhints.icon_window = iconwin;
|
||||
mywmhints.icon_x = mysizehints.x;
|
||||
mywmhints.icon_y = mysizehints.y;
|
||||
mywmhints.window_group = win;
|
||||
mywmhints.flags = StateHint | IconWindowHint | IconPositionHint | WindowGroupHint;
|
||||
|
||||
XSetWMHints(display, win, &mywmhints);
|
||||
|
||||
XSetCommand(display, win, argv, argc);
|
||||
XMapWindow(display, win);
|
||||
|
||||
if (geometry) {
|
||||
if (sscanf(geometry, "+%d+%d", &wx, &wy) != 2) {
|
||||
fprintf(stderr, "Bad geometry string.\n");
|
||||
exit(1);
|
||||
}
|
||||
XMoveWindow(display, win, wx, wy);
|
||||
}
|
||||
}
|
61
wmdots/wmgeneral/wmgeneral.h
Normal file
61
wmdots/wmgeneral/wmgeneral.h
Normal file
|
@ -0,0 +1,61 @@
|
|||
#ifndef WMGENERAL_H_INCLUDED
|
||||
#define WMGENERAL_H_INCLUDED
|
||||
|
||||
/***********/
|
||||
/* Defines */
|
||||
/***********/
|
||||
|
||||
#define MAX_MOUSE_REGION (16)
|
||||
|
||||
/************/
|
||||
/* Typedefs */
|
||||
/************/
|
||||
|
||||
typedef struct _rckeys rckeys;
|
||||
|
||||
struct _rckeys {
|
||||
const char *label;
|
||||
char **var;
|
||||
};
|
||||
|
||||
typedef struct _rckeys2 rckeys2;
|
||||
|
||||
struct _rckeys2 {
|
||||
const char *family;
|
||||
const char *label;
|
||||
char **var;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
Pixmap pixmap;
|
||||
Pixmap mask;
|
||||
XpmAttributes attributes;
|
||||
} XpmIcon;
|
||||
|
||||
/*******************/
|
||||
/* Global variable */
|
||||
/*******************/
|
||||
|
||||
Display *display;
|
||||
Window Root, iconwin, win;
|
||||
|
||||
|
||||
/***********************/
|
||||
/* Function Prototypes */
|
||||
/***********************/
|
||||
|
||||
void AddMouseRegion(int index, int left, int top, int right, int bottom);
|
||||
int CheckMouseRegion(int x, int y);
|
||||
|
||||
void openXwindow(int argc, char *argv[], char **, char *, int, int);
|
||||
void RedrawWindow(void);
|
||||
void RedrawWindowXY(int x, int y);
|
||||
|
||||
void createXBMfromXPM(char *, char **, int, int);
|
||||
void copyXPMArea(int, int, int, int, int, int);
|
||||
void copyXBMArea(int, int, int, int, int, int);
|
||||
void setMaskXY(int, int);
|
||||
|
||||
void parse_rcfile(const char *, rckeys *);
|
||||
|
||||
#endif
|
BIN
wmdots/wmgeneral/wmgeneral.o
Normal file
BIN
wmdots/wmgeneral/wmgeneral.o
Normal file
Binary file not shown.
Loading…
Reference in a new issue