home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1998 July
/
Chip_1998-07_cd.bin
/
ctenari
/
Labyrint
/
DATA
/
FREE
/
SVATEK.RAR
/
SVATEK.ASM
next >
Wrap
Assembly Source File
|
1994-09-12
|
22KB
|
835 lines
comment |
Program pro vypsani datumu, dne a svatku se zdrojovym kodem v asm86.
Verzi 1 napsal neznamy autor (at mi promine, ale zdrojak je bez jmena).
Verzi 2 jsem si dovolil pripravit ja, Jan Soucek.
- zmensena struktura jmen
- uvolneni parametrovani datumu na vice moznosti
- hlaseni chybneho parametru
- z 90.11150% (hruby odhad) lokalizovano z cestiny do Latin2
- buferovany vystup
- moznost barevneho vystupu
- uprava prehlednosti zdrojaku mym potrebam
- moznost vypisu vyznamnych udalosti misto jmen
- pres vsechny bombastisky upravy je mensi
- ze syntaxe komentaru nahrazen prikaz 'bordel' pr. 'neporadek'
- a dalsi budliky na vase uzliky
|
.model tiny
.code
org 100h
Color EQU 1 ; 0/1 volba vystupu
; 0 = terminal
; 1 = v barve
WriteChar MACRO Clr
if Color
mov byte ptr actc,Clr
endif
call wr_char
endm
WriteStr MACRO Clr
if Color
mov byte ptr actc,Clr
endif
call wr_str
endm
start:
mov ah,2ah ; cti systemove datum
int 21h
; ulozeni soucasneho data
mov sden,dl ; den
mov smesic,dh ; mesic
mov srok,cx ; rok
; datum na zjisteni svatku
mov ndent,al ; den v tydnu
mov nden,dl ; den
mov nmesic,dh ; mesic
mov nrok,cx ; rok
mov ah,2fh ; cti pocatek DTA
int 21h
mov al,byte ptr es:[bx] ; al - delka parametru
cmp al,0 ; zjisti je-li parametr
je preved ; neni-li jdi az na prevod
; je-li,tak ho preved na datum
mezery:
inc bx ; posun na prvni znak parametru
mov dl,byte ptr es:[bx] ; je-li znak mezera,tak jeste nejsem na datumu
cmp dl,20h
je mezery
sub dl,30h ; Ord(znak v dl)
cmp byte ptr es:[bx+1],'0' ; je-li nasledujici znak >= "0" pak mame den
jae den2
mesic:
mov nden,dl ; nyni mame v nden den
inc bx
inc bx ; posun na 1 znak mesice
mov dh,byte ptr es:[bx] ; do dh znak na pozici es:[bx]
sub dh,30h ; Ord(znak v dh)
cmp byte ptr es:[bx+1],'0' ; je-li nasledujici znak >= "0" pak mame mesic
jae mesic2
rok:
mov nmesic,dh ; nyni mame v nmesic mesic
inc bx
inc bx ; posun na 1 znak roku
and word ptr es:[bx],0CFCFh
and word ptr es:[bx+2],0CFCFh
mov cl,byte ptr es:[bx]
xor ch,ch
mov bp,dx
mov ax,3e8h
mul cx ; * 1000
mov cx,ax ; v cx nyni prvni cifra roku * 1000
mov ax,64h
mul byte ptr es:[bx+1] ; * 100
add cx,ax ; do cx nyni pridana 2. cifra roku * 100
mov ax,0ah
mul byte ptr es:[bx+2] ; * 10
add cx,ax ; do cx nyni pridana 3. cifra roku * 10
mov al,byte ptr es:[bx+3]
xor ah,ah
add cx,ax ; a konecne i posledni cifra
mov nrok,cx
mov dx,bp
mov ah,2bh ; nastavime systemove datum,
int 21h ; abychom zjistili den v tydnu
cmp al,0ffh
jne zjisti
jmp errdat
preved: ; at ten neporadek vali
mov al,'V'
WriteChar 15
mov al,ndent
cmp al,3
je ve
cmp al,4
je ve
jmp short v
den2: ; neprehledno, ale jump by nebyl near
mov al,0ah
mul dl ; * 10
mov dl,al
mov cl,byte ptr es:[bx+1] ; do cl znak na pozici es:[bx+1]
sub cl,30h ; Ord(znak v cl)
add dl,cl ; 1. cifra * 10 + 2. cifra
inc bx
jmp mesic
mesic2:
mov al,0ah
mul dh ; * 10
mov dh,al
mov cl,byte ptr es:[bx+1] ; do cl znak na pozici es:[bx+1]
sub cl,30h ; Ord(znak v cl)
add dh,cl
inc bx
jmp rok
zjisti:
dec ah
int 21h ; zjistime den v tydnu
mov byte ptr ndent,al ; a ulozime ho do ndent
jmp short zpet
ve:
mov al,'e'
WriteChar 15
v:
mov al,' '
WriteChar 15
mov al,ndent
cmp al,6 ; sobota
jl d1
mov si,offset sobo
jmp short den
zpet: ; zase jeden neporadek, ale zase kvuli jumpu
inc ah
mov dl,sden
mov dh,smesic
mov cx,srok
int 21h ; a dame systemove datum pekne nazpet
jmp short preved
d1:
cmp al,5 ; patek
jl d2
mov si,offset pate
jmp short den
d2:
cmp al,4 ; ctvrtek
jl d3
mov si,offset ctvr
jmp short den
d3:
cmp al,3 ; streda
jl d4
mov si,offset stre
jmp short den
d4:
cmp al,2 ; utery
jl d5
mov si,offset uter
jmp short den
d5:
cmp al,1 ; pondeli
jl d6
mov si,offset pond
jmp short den
d6:
mov si,offset nede ; nedele
den:
xor al,al
WriteStr 15
mov al,' '
WriteChar 15
mov dl,nden ; v dl mame nas den
mov al,dl
mov dh,0ah
xor ah,ah
div dh ; / 10, v al jsou desitky dni
; v ah zbytek dni
or ax,3030h
cmp al,30h ; byl-li den jednomistny piseme jen jednu cifru
je pisden
WriteChar 15 ; vypis 1. znak dne
pisden:
mov al,ah
WriteChar 15 ; vypis 2. znaku dne
mov al,'.'
WriteChar 15 ; vypise tecku
mov al,' '
WriteChar 15 ; vypise tecku
mov al,nmesic ; v al mam nas mesic
cmp al,0ch ; prosinec
jl m1
mov si,offset pros
jmp short mes
m1:
cmp al,0bh ; listopad
jl m2
mov si,offset list
jmp short mes
m2:
cmp al,0ah ; rijen
jl m3
mov si,offset rije
jmp short mes
m3:
cmp al,9 ; zari
jl m4
mov si,offset zari
jmp short mes
m4:
cmp al,8 ; srpen
jl m5
mov si,offset srpe
jmp short mes
m5:
cmp al,7 ; cervenec
jl m6
mov si,offset cnec
jmp short mes
m6:
cmp al,6 ; cerven
jl m7
mov si,offset cerv
jmp short mes
m7:
cmp al,5 ; kveten
jl m8
mov si,offset kvet
jmp short mes
m8:
cmp al,4 ; duben
jl m9
mov si,offset dube
jmp short mes
m9:
cmp al,3 ; brezen
jl m10
mov si,offset brez
jmp short mes
m10:
cmp al,2 ; unor
jl m11
mov si,offset unor
jmp short mes
m11:
mov si,offset lede ; leden
mes:
mov al,[si]
xor ah,ah
add ax,si
push ax
xor al,al
WriteStr 15 ; vypise mesic
mov al,20h
WriteChar 15 ; pridame mezeru
mov ax,nrok ; trosku zmatku, ale rok vypsat musim
mov cx,64h
xor dx,dx
div cx ; / 100, ziskame 1. a 2. dve cifry
mov es,dx ; do es 1. dve cifry
aam
xchg al,ah
or ax,3030h
WriteChar 15
mov al,ah
WriteChar 15 ; a konecne vypiseme
mov ax,es
aam
xchg al,ah
or ax,3030h
WriteChar 15
mov al,ah
WriteChar 15 ; a konecne vypiseme zbytek
mov al,0ch
xor ah,ah
mov bl,nden
dec bl
mul bl ; v ax kolik pripocist k offsetu abych byl dobre
pop si
inc ax
add si,ax
mov al,byte ptr ds:[si]
cmp al,20h
je pis_nema ; nema nikdo svatek
cmp al,'*'
jne pis_ma
mov si,word ptr ds:[si+10] ; nepis svatek, ale vyznamny den
jmp short pis_info
pis_ma:
push si
xor al,al
mov si,offset txt
WriteStr 15
pop si
mov bx,si
add bx,0Bh
rtrim:
cmp byte ptr ds:[bx],' '
jne tecku
dec bx
jmp short rtrim
tecku:
sub bx,si
xchg bx,ax
inc ax
WriteStr 11
mov al,'.'
WriteChar 15
jmp short pis_vse
pis_nema:
mov si,offset nema
pis_info:
xor al,al
WriteStr 15
pis_vse:
call wr_line
int 20h
errdat:
mov si,offset error
xor al,al
WriteStr 12
jmp short pis_vse
sden db 0
smesic db 0
srok dw 0
ndent db 0
nden db 0
nmesic db 0
nrok dw 0
nema db 19,' nemá nikdo svátek.'
txt db 11,' má svátek '
error db 68,'Chybn╪ zadané datum (má b∞t nap². 24.2.1994 nebo t²eba 24/06/1994) !'
nede db 6,'ned╪li'
pond db 7,'pond╪lí'
uter db 5,'úter∞'
stre db 6,'st²edu'
ctvr db 7,'ƒtvrtek'
pate db 5,'pátek'
sobo db 6,'sobotu'
lede db 5,'ledna'
db '* ' ; novy rok
dw offset dv_novy
db 'Karina '
db 'Radmila '
db 'Diana '
db 'Dalimil '
db '* ' ; tri kralove
dw offset dv_trik
db 'Vilma '
db '¼estmír '
db 'Vladan '
db 'B²etislav '
db 'Bohdana '
db 'Pravoslav '
db 'Edita '
db 'Radovan '
db 'Alice '
db 'Ctirad '
db 'Drahoslav '
db 'Vladislav '
db 'Doubravka '
db 'Ilona '
db 'Bela '
db 'Slavomír '
db 'Zden╪k '
db 'Milena '
db 'Miloτ '
db 'Zora '
db 'Ingrid '
db 'Ot∞lie '
db 'Zdislava '
db 'Robin '
db 'Marika '
unor db 5,'února'
db 'Hynek '
db 'Nela '
db 'Blaºej '
db 'Jarmila '
db 'Dobromila '
db 'Vanda '
db 'Veronika '
db 'Milada '
db 'Apolena '
db 'Mojmír '
db 'Boºena '
db 'Slav╪na '
db 'V╪nceslav '
db 'Valent∞n '
db 'Ji²ina '
db 'Ljuba '
db 'Miloslava '
db 'Gizela '
db 'Patrik '
db 'Old²ich '
db 'Lenka '
db 'Petr '
db 'Svatopluk '
db 'Mat╪j '
db ' '
db 'Dora '
db 'Alexandr '
db 'Lumír '
db 'Albín '
brez db 6,'b²ezna'
db 'Bed²ich '
db 'Aneºka '
db 'Kamil '
db 'Stela '
db 'Kazimír '
db 'Miroslav '
db 'Tomáτ '
db 'Gabriela '
db 'Frantiτka '
db 'Viktorie '
db 'And╪la '
db 'Rehor '
db 'Ràºena '
db 'Matylda '
db 'Ida '
db 'Amos '
db 'Vlastimil '
db 'Eduard '
db 'Josef '
db 'Sv╪tlana '
db 'Radek '
db 'Leona '
db 'Ivona '
db 'Gabriel '
db 'Marian '
db 'Emanuel '
db 'Dita '
db 'Soσa '
db 'Ta£ána '
db 'Arnoτt '
db 'Kvído '
dube db 5,'dubna'
db 'Hugo '
db 'Erika '
db 'Richard '
db 'Ivana '
db 'Miroslava '
db 'Vendula '
db 'Herman '
db 'Ema '
db 'Duτan '
db 'Darja '
db 'Izabela '
db 'Julius '
db 'Aleτ '
db 'Vincenc '
db 'Anastázie '
db 'Irena '
db 'Rudolf '
db 'Valerie '
db ' '
db ' '
db 'Alexandra '
db 'Evºenie '
db 'Vojt╪ch '
db 'Ji²í '
db 'Marek '
db 'Oto '
db 'Jaroslav '
db 'Vlastislav '
db 'Robert '
db 'Blahoslav '
kvet db 6,'kv╪tna'
db ' '
db 'Zikmund '
db 'Alexej '
db 'Kv╪toslav '
db ' '
db 'Radoslav '
db 'Stanislav '
db 'Ctibor '
db ' '
db 'Blaºena '
db 'Svatava '
db 'Pankrác '
db 'Servác '
db 'Bonifác '
db 'ªofie '
db 'Premysl '
db 'Aneta '
db 'Nataτa '
db 'Ivo '
db 'Zbyτek '
db 'Monika '
db 'Emil '
db 'Vladimír '
db 'Jana '
db 'Viola '
db 'Filip '
db 'Valdemar '
db 'Vilém '
db 'Maxim '
db 'Ferdinand '
db 'Kamila '
cerv db 6,'ƒervna'
db 'Laura '
db 'Jarmil '
db 'Tamara '
db 'Dalibor '
db 'Dobroslav '
db 'Norbert '
db 'Iveta '
db 'Medard '
db 'Stanislava '
db 'Gita '
db 'Flora '
db 'Antonie '
db 'Antonín '
db 'Vasil '
db 'Vít '
db 'Zbyn╪k '
db 'Adolf '
db 'Milan '
db 'Leoτ '
db 'Kv╪ta '
db 'Alois '
db 'Pavla '
db 'Zdeσka '
db 'Jan '
db 'Ivan '
db 'Adriana '
db 'Ladislav '
db 'Lubomír '
db 'Petr a Pavel'
db 'µárka '
cnec db 8,'ƒervence'
db 'Jaroslava '
db 'Patricie '
db 'Radomír '
db 'Prokop '
db 'Cyril '
db ' '
db 'Bohuslava '
db 'Nora '
db 'Drahoslava '
db 'Libuτe '
db 'Olga '
db 'Borek '
db 'Markéta '
db 'Karolína '
db 'Jind²ich '
db 'Luboτ '
db 'Martina '
db 'Drahomíra '
db '¼enek '
db 'Ilja '
db 'Vít╪zslav '
db 'Magdalena '
db 'Libor '
db 'Krist∞na '
db 'Jakub '
db 'Anna '
db 'V╪roslav '
db 'Viktor '
db 'Marta '
db 'Bo²ivoj '
db 'Ignác '
srpe db 5,'srpna'
db 'Oskar '
db 'Gustav '
db 'Miluτe '
db 'Dominik '
db 'Milivoj '
db 'Old²iτka '
db 'Lada '
db 'Sob╪slav '
db 'Roman '
db 'Vav²inec '
db 'Zuzana '
db 'Klára '
db 'Alena '
db 'Alan '
db 'Hana '
db 'Jáchym '
db 'Petra '
db 'Helena '
db 'Ludvík '
db 'Bernard '
db 'Johana '
db 'Bohuslav '
db 'Sandra '
db 'Bartolom╪j '
db 'Radim '
db 'Lud╪k '
db 'Otakar '
db 'August∞n '
db ' '
db 'µt╪pán '
db 'Pavlína '
zari db 4,'zá²í'
db 'Linda '
db 'Adela '
db 'Bronislav '
db 'Jind²iska '
db 'Boris '
db 'Boleslav '
db 'Regina '
db 'Mariana '
db 'Daniela '
db 'Irma '
db 'Denisa '
db 'Marie '
db 'Lubor '
db 'Radka '
db 'Jolana '
db 'Ludmil '
db 'Nadeºda '
db 'Kryτtof '
db 'Zita '
db 'Oleg '
db 'Matouτ '
db 'Darina '
db 'Berta '
db 'Jaromír '
db 'Zlata '
db 'Andrea '
db 'Jonas '
db 'Václav '
db 'Michal '
db 'Jeron∞m '
rije db 5,'²íjna'
db 'Igor '
db 'Galina '
db 'Bohumil '
db 'Frantiτek '
db 'Eliτka '
db 'Hanus '
db 'Sergej '
db 'V╪ra '
db 'µtefan '
db 'Marina '
db 'Andrej '
db 'Marcel '
db 'Renata '
db ' '
db 'Tereza '
db 'Havel '
db 'Hedvika '
db 'Lukáτ '
db 'Michaela '
db 'Vendelín '
db 'Brigita '
db 'Sabina '
db 'Teodor '
db 'Nina '
db 'Beata '
db 'Erik '
db 'Zoja '
db ' '
db 'Silvie '
db 'Tadeáτ '
db 'µt╪pánka '
list db 9,'listopadu'
db 'Felix '
db ' '
db 'Hubert '
db 'Karel '
db 'Miriam '
db 'Libena '
db ' '
db 'Bohumir '
db 'Bohdan '
db 'Evºen '
db 'Martin '
db 'Benedikt '
db 'Tibor '
db 'Sava '
db 'Leopold '
db 'Otmar '
db 'Mahulena '
db 'Romana '
db 'Alºb╪ta '
db 'Nikola '
db 'Albert '
db 'Cecílie '
db 'Klement '
db 'Emilie '
db 'Kate²ina '
db 'Artur '
db 'Xénie '
db 'René '
db 'Zina '
db 'Ond²ej '
pros db 8,'prosince'
db 'Iva '
db 'Blanka '
db 'Svatoslav '
db 'Barbora '
db 'Jitka '
db 'Mikuláτ '
db 'Anbroz '
db 'Kv╪toslava '
db 'Vratislav '
db 'Julie '
db 'Dana '
db 'Simona '
db 'Lucie '
db 'Lydie '
db 'Radana '
db 'Albina '
db 'Daniel '
db 'Miloslav '
db 'Ester '
db 'Dagmar '
db 'Natálie '
db 'Simon '
db 'Vlasta '
db 'Adam a Eva '
db '* ' ; 1.svatek vanocni
dw offset dv_1vano
db '* ' ; 2.svatek vanocni
dw offset dv_2vano
db 'Zaneta '
db 'Bohumila '
db 'Judita '
db 'David '
db 'Silvestr '
dv_novy db 13,' je Nov∞ rok.'
dv_trik db 18,' jsou T²i králové.'
dv_1vano db 22,' je 1. svátek vánoƒní.'
dv_2vano db 22,' je 2. svátek vánoƒní.'
wr_char:
mov di,col
mov radka[di],al
inc di
if Color
cmp al,20
jb wr00
mov al,actc
mov radka[di],al
inc di
wr00:
endif
mov col,di
retn
wr_str:
cld
or al,al
jnz wr01
lodsb
wr01:
xor ah,ah
xchg ax,cx
wr02:
lodsb
call wr_char
loop wr02
retn
wr_line:
if Color
mov al,' '
WriteChar 7
mov al,13
call wr_char
mov al,10
call wr_char
mov ah,15
int 10h
mov ah,3
int 10h
mov ax,1303h ; pouze EGA BIOS a kompaktibilni
push cs
pop es
mov bp,offset cs:radka
mov cx,col
shr cx,1
inc cx
int 10h
else
mov al,13
call wr_char
mov al,10
call wr_char
mov al,'$'
call wr_char
mov ah,9
mov dx,offset radka
int 21h
endif
retn
if Color
actc db 0
endif
col dw 0
radka db 0
end start