ms.dos.1pedjak,
Da li vas je ikada zanimalo da li je pri startovanju vašeg programa
izvršena redirekcija ulaza ili izlaza..? Evo načina da se to sazna:
Function 44h I/O Control for Devices (IOCTL)
Get or Set Device Information
entry AH 44h
AL 00h Get Device Information (from DX)
BX file or device handle
return DX device info
If bit 7 set: (character device)
bit 0: console input device
1: console output device
2: NUL device
3: CLOCK$ device
4: device is special
5: binary (raw) mode
6: not EOF
12: network device (DOS 3.x)
14: can process IOCTL control
strings (func 2-5)
If bit 7 clear: (file)
bits 0-5: block device number
6: file has not been written
12: Network device (DOS 3.x)
15: file is remote (DOS 3.x)
==================
Dakle, šta treba uraditi..?
AX = 4400h
BX = 0/1 ( 0 - input, 1 - output )
INT 21h
Ukoliko je sedmi bit setovan, nema redirekcije. Evo, konačne
implementacije u Paskalu:
function redirected(handle:word):boolean;assembler;
asm
mov ax,$4400
mov bx,handle
int $21
jc čerror
and dl,$80
jz čerror
xor al,al
jmp čend
čerror: mov al,1
čend:
end;
ms.dos.2mmitrovic,
Ů█▀█Ţ function redirected(handle:word):boolean;assembler;
Ů█▀█Ţ asm
Imaš propust u implementaciji. U slučaju greške funkcija vraća
true, tj informaciju da je I/O ide kroz fajl, što je nepouzdano.
Vraćanje false vrednosti bi isto bilo pogrešno, ali ipak sa manjom
štetom. Ionako se greška javlja samo pri navođenju nepostojećeg
handle-a, pa bi vraćanje true vrednosti samo pogoršalo stvar i
dovelo do nove, veće greške (kada bi recimo, korisnik posle dobijanja
potvrdne informacije pokušao da zatvori nepostojeći fajl, ili kad
program zbog ovoga počne da ispisuje tekst u standardnom ascii-u
umesto u reprogramiranom proširenom set-u. Prošireni set lepo izgleda
ne ekranu (pr. Norton), ali kad se spusti u fajl posle se dobiju kuke
i kvake). Izvinjavam se što sam ovako opširan, ali sve je bilo u najboljoj
nameri.
Moj savet: (posle int 21h)
mov al,0 ; nikako xor al,al - poremetice flagove
jc čEnd
and dl,80h
jnz čEnd
inc al
čEnd:
Ako će se funkcija koristiti za handlove 0 i 1, treba da se
izbaci linija jc čError, pošto u tom slučaju do greške ne može nikako
doći. Tada i mov al,0 može da pređe u xor al,al.
ms.dos.3pedjak,
> i kvake). Izvinjavam se što sam ovako opširan, ali sve je bilo u
> najboljoj nameri.
> Ako će se funkcija koristiti za handlove 0 i 1, treba da se
> izbaci linija jc čError, pošto u tom slučaju do greške ne može
> nikako doći. Tada i mov al,0 može da pređe u xor al,al.
Da sad ne citiram sve ono iznad... Primedbe stoje, ali stoji i tvoj
zaključak. Rutina je namenjena isključivo za hedlove 0 i 1, tako da
do greške ne može doći. Rutinu sam sklepao na brzaka :) tako da ni
sam ne znam zašto sam stavio ispitivanje greške :) Hvala ti :)
ms.dos.4szeman,
>> Da li vas je ikada zanimalo da li je pri startovanju vašeg programa
>> izvršena redirekcija ulaza ili izlaza..? Evo načina da se to sazna:
Na koji način može da se sazna ime datoteke(a) za redirekciju ?
ms.dos.5mibak,
Nije valjda da niko ne može da mi pomogne da na LX-300 ESC sekvencom
promenim kodnu stranu?
ms.dos.6djelovic,
Da li postoji neki način da se na Super VGa kartama dobije 132 znaka u
redu? Naravno, u tekst modu.
ms.dos.7omega,
Ţ Da li postoji neki nacin da se na Super VGa kartama dobije 132 znaka u
ah=0, al=broj_moda, int 10h.
Ako je VESA kompatibilna, nemaš nikakvih problema:
109h 132x25 text
10Ah 132x43 text
10Bh 132x50 text
10Ch 132x60 text
Ako nije, pogledaj VGADOC.
ms.dos.8iritel,
Da li neko ima diskete koje se dobijaju uz knjigu
PC INTERN od Michael Tischer-a!!!!
Javite se i na e-mail: IRITEL
ms.dos.9maksa,
>> ah=0, al=broj_moda, int 10h.
>> Ako je VESA kompatibilna, nemaš nikakvih problema:
>> 109h 132x25 text
>> 10Ah 132x43 text
Ok, ovo radi. Kako sad da objasnim DOS-u da imam više od 25 redova
na ekranu ? Konkretno, kada ovako (programčetom) promenim text mod u,
recimo, 132x50, dir (iz 4dos-a) mi izlista 25 fajlova kako treba, a
ostatak ispuca u jednom redu. Ne znam da l' sam baš jasan ... Kako se
ovo rešava ?
ms.dos.10omega,
Ţ>> ah=0, al=broj_moda, int 10h.
Ţ>> 10Ah 132x43 text
Ţ
Ţ Ok, ovo radi.
Iskreno, nije mi jasno kako si uspeo da u AL uguras 109h ;)
Bas probah ovo dole i sve je ok pod 4DOS-om. Izgleda da nisi bio
dovoljno jasan.
.model tiny
.code
org 100h
start:
mov ax, 4f02h ; setuj mod (VESA BIOS)
mov bx, 010ah ; broj moda
int 10h
int 20h
end start
ms.dos.11vitez.koja,
#=> recimo, 132x50, dir (iz 4dos-a) mi izlista 25 fajlova kako treba,
#=> a ostatak ispuca u jednom redu. Ne znam da l' sam baš jasan ...
#=> Kako se ovo rešava ?
Poslednji put sam ovo rešio stavljanjem ansi drajvera u
config.sys. :) Ozbiljno, bez obzira na smajli.
sk
ms.dos.12maksa,
>> Iskreno, nije mi jasno kako si uspeo da u AL uguras 109h ;)
Prav' da ti kažem, to nisam ni pokušao. ;)
...
mov ah, 0
mov ax, 55h
int 10h
...
Ovo mi je komad inline asm-a u cpp-u, i stvar radi super, tj.
menjam modove kako hoću. Jedino što mi se ekran u DOS-u ponaša
kao da još uvek ima 25 redova, u koji god ga mod bacim.
PS A ovo tvoje mi zakucava kompjuter ... System Halted. ;)
ms.dos.13maksa,
>> Poslednji put sam ovo rešio stavljanjem ansi drajvera u
>> config.sys. :) Ozbiljno, bez obzira na smajli.
Neće. :(
ms.dos.14omega,
Ţ Jedino sto mi se ekran u DOS-u ponasa kao da jos uvek ima 25 redova
Jesi li probao na clean boot?
Ţ PS A ovo tvoje mi zakucava kompjuter ... System Halted. ;)
Verovatno nisi linkovao sa tlink /t :)
Btw, koju imas karticu?
ms.dos.15mmitrovic,
::::: Ovo mi je komad inline asm-a u cpp-u, i stvar radi super, tj.
::::: menjam modove kako hoću. Jedino što mi se ekran u DOS-u ponaša
::::: kao da još uvek ima 25 redova, u koji god ga mod bacim.
Probaj sledeće: (jes da je teška prljavština, al probaj)
mov dx,3d4h
mov ax, (bpl<<8)+6
out dx,ax
dec ax
dec ax
out dx,ax
ako to ne radi probaj da dodaš na kraju i sledeće:
mov ax, (bcr<<8)+1;
out dx,ax
ne znam da li je ovo zadnje potrebno jer na mom monitoru ne mogu da
izvučem te egzotične modove. Zato javi šta si uradio.
I naravno: bpl je broj linija u modu, a bcr je broj karaktera po redu.
Umesto ovih formula ti izračunaj vrednosti (pošto su sve konstante) i
zameni formule tim vrednostima.
ms.dos.16mmitrovic,
::::: Probaj sledeće: (jes da je teška prljavština, al probaj)
makso, proba li ti ovo? ne javljaš se.
ms.dos.17dragulj,
// >> Poslednji put sam ovo rešio stavljanjem ansi drajvera u
// >> config.sys. :) Ozbiljno, bez obzira na smajli.
//
// Neće. :(
žovek je u pravu da treba ANSI drajver, ali koji? B))
DOS-ov ANSI.SYS ne podržava 132x50. To ćeš morati sa izvedeš sa
drajverom koji valjda imaš uz svoju video kartu. Kod mene je to
TANSI.SYS (karta je TVGA 9000), ali koristim NNANSI.SYS jer je MNOGO
brži ispis. Ovo bi moralo da ti pomogne, pogotovo što uz NNANSI (ima
ga na Sezamu) imaš i sors pa ugradi odgovarajuće rutine za
prebacivanje moda u svoj program.
ms.dos.18vojas,
> Ok, ovo radi. Kako sad da objasnim DOS-u da imam više od 25 redova
> na ekranu ? Konkretno, kada ovako (programčetom) promenim text mod u,
> recimo, 132x50, dir (iz 4dos-a) mi izlista 25 fajlova kako treba, a
DOS, u principu, uvek zna koliko redova imaš. Međutim, ovde ne zna kako da
tim redovima pristupi jer to nije video mod 3, na koji je navikao. Ne znam
kako bi mogao da rešiš to, pošto mi ne radi 123x60 kako valja, ali probaj
da slažeš DOS da si u modu 3 tako što ćeš upisati 3 na adresu 0:449h.
Heechee of the Ancients
ms.dos.19bulaja,
**** new file ****
MSDOS - R:\INFOPROG
----------------------
inter46a zip 362000 MSDOS Interrupt List 46: podaci o svim interaptima #1/6
inter46b zip 360175 MSDOS Interrupt List 46: podaci o svim interaptima #2/6
inter46c zip 361279 MSDOS Interrupt List 46: podaci o svim interaptima #3/6
inter46d zip 101055 MSDOS Interrupt List 46: podaci o svim interaptima #4/6
inter46e zip 338581 MSDOS Interrupt List 46: podaci o svim interaptima #5/6
inter46f zip 164513 MSDOS Interrupt List 46: podaci o svim interaptima #6/6
6 file(s) 1648 kb
Biće sutra (ili u utorak:) i na Sezam PRO-BA.
ms.dos.20rmitrovic,
UPOMOC !!!!
Potreban mi je virtuelni disk identican disku b: (1.44)
Identican znaci da ima isti broj sektora, velicina sektora,
max. #entries u root-u, FAT....
Virtuelan znaci da bi egzistirao u memoriji ili (jos bolje)
kao fajl na disku (znaci fajl velicine 1.44mb)
Naredba COPY bi kopirala fajlove na njega, i (normalno) vodila racuna
o FATU t.j ponasala se isto kao da se radi o disketi.
Kad bi ovakav virtuelni disk postojao u obliku fajla (velicine 1.44mb)
na hardu, njegovim kopiranjem (ne obicnim, vec kao slike diskete) na
disketu bi trebalo da se dobije normalna upotrebljiva disketa puna fajlova...
Probao sam sa RAM diskom (RAMDRIVE.SYS) ali ne mogu da 'ubodem' vrednosti
(velicina diska,sektora....).Mozda postoji program koji ovo radi??
ms.dos.21dvesic,
>> Potreban mi je virtuelni disk identican disku b: (1.44)
>> Identican znaci da ima isti broj sektora, velicina sektora,
>> max. #entries u root-u, FAT....
R:\system\srdsk205.zip
ms.dos.23jasicp,
Da li Win95 i OS/2 imaju ekonomicniji rad sa prostorom na disku ? Evo
sta se dogadja sa diskom od 1GB:
Na 200MB instaliranog softvera, ode 300MB prostora na disku :(. To je
zbog LBA moda (32kb minimum zauzeto od _svakog_ fajla), pa je slack
prakticno ovde 30% :((. Da li OS/2 3.0 ima bolji/ekonomicniji rad sa
prostorom na disku ? Mislim da u toku instalacije on radi konverziju DOS
diska u HPFS, dakle ide i na DOS disk,(mislim ?) pa da vidimo zauzet
prostor.
ms.dos.24wizard,
> Da li Win95 i OS/2 imaju ekonomicniji rad sa prostorom na disku ? Evo
> sta se dogadja sa diskom od 1GB:
Win95 koristi u osnovi isti onaj fajl sistem koji je projektovan
za jednostrane diskete od 160K pa su zato ti problemi. Pod OS/2,
ako instaliraš HPFS inicijalna veličina zauzeća na hardu za svaki
fajl je 1K i raste u koracima od 512 bajta. Dakle nema tako
velikih gubitaka. Te veličine su konstatne sve do maksimalne
veličine particije koja je bilao dovoljno velika da ne pamtim
broj... S druge strane, HPFS potroši "for system use" (najviše za
B-tree indeks koji se koristi za brz pristup fajlovima) nekih 3%
veličine particije, ali je ta veličina konstantna i ne zavisi od
popunjenosti diska. Verovatno je slično i sa NTFS-om.
Iako dobro zamišljen i projektovan HPFS nije baš programersko
remek-delo kada je o brzini reč (što i ne čudi pošto ga je radio
MS ;), ali je zato bar izuzetno pouzdan i stabilan (posebno ove
poslednje verzije).
> Mislim da u toku instalacije on radi konverziju
> DOS diska u HPFS, dakle ide i na DOS disk,(mislim ?) pa da vidimo
> zauzet prostor.
Na žalost OS/2 u toku instalaicije ne ume da konvertuje FAT u
HPFS (čak šta više, ne ume to ni nakon instalacije ;). Postoje
komercijalni programi koji to omogućavaju, ali pošto se to, u
principu, radi samo jednom mislim da je bolje napraviti bekap pa
posle sve vratiti. A nije ni loše preformatirati disk s vremena
na vreme...
ms.dos.25djelovic,
Tema: Detekcija CD-ROM drajva
Problem: MS-DOS CD-ROM drajv ne vidi kao "removable" device, te svi pozivi
ioctl funkcija i sl. zapravo javljaju pogrešnu vrednost.
Rešenje: Rešenje je u funkciji IsCDROMDrive:
│ static BOOL NEAR PASCAL IsCDROMDrive(WORD wDrive)
│
│ /* drive: 0 - A, 1 - B, ... */
│
│ {
│ BOOL f;
│
│ asm {
│ mov ax, 1500h /* first test for presence of MSCDEX */
│ xor bx, bx
│ int 2fh
│ mov ax, bx /* MSCDEX is not there if bx is zero */
│ or ax, ax /* ...so return FALSE */
│ jz no_mscdex
│ mov ax, 150bh /* MSCDEX driver check API */
│ mov cx, wDrive /* ...cx is drive index */
│ int 2fh
│ }
│ no_mscdex:
│ asm {
│ mov f,ax
│ }
│ return f;
│ }
ms.dos.26jasicp,
> principu, radi samo jednom mislim da je bolje napraviti bekap pa
> posle sve vratiti. A nije ni lose preformatirati disk s vremena
Da li ti to hoces da kazes da uradim backup oko 600MB softvera? Lele,
jadan li sam... Koji programi to mogu bez bekapa (a da su sigurni)?
ms.dos.27wizard,
> Da li ti to hoces da kazes da uradim backup oko 600MB softvera? Lele,
> jadan li sam... Koji programi to mogu bez bekapa (a da su sigurni)?
Zaboravio sam kako se zove. A koliko se sećam ne može da
konvertuje particiju na kojoj se on sam nalazi ili na kojoj se
nalazi aktivan OS.
Ja u principu nikad ne bih ni koristio takve programe bez
prethodnog bekapa. žinjenica je da bi bilo zgodinije da sam OS
pod svojom kontrolom može da izvrši konverziju, pretpostaljam da
na zapadu nije uobičajena situacija da treba reinstalirati čak
600MB softvera, a da je, nasuprot tome, uobičajeno da se svi
podaci ionako već nalaze na redovnom bekapu... ;)