1. |
Vedett modu videomemoria (mind) |
32 sor |
(cikkei) |
2. |
Turbo C 3.0 hiba (mind) |
84 sor |
(cikkei) |
3. |
Re: data1c - alvarez, onmodosito kod - Stenya (mind) |
32 sor |
(cikkei) |
4. |
Re: adat az exe-ben (mind) |
34 sor |
(cikkei) |
|
+ - | Vedett modu videomemoria (mind) |
VÁLASZ |
Feladó: (cikkei)
|
> Az a problemam, hogy van egy clipperes progim, amiben
> rengeteg kepernyokezeles C-ben van.
> [...] Szoval az a kerdesem, hogy hogyan lehet
> vedett modban firkalni a videomemoriaba?
ha a clipper 5.3-hoz jaro lebutitott ExoSpace linkert hasznalod,
akkor valahogy igy:
mov bx, 0b800h ; gondolom, szines tv-d van..
mov [VideoSegment], bx
call ExoIsExoSpace ; ha nem exospace-szel linkeled, kesz
or ax, ax
jz
push 8000h ; egyebkent vedett modu ptr kell a videoszegmensre
push [VideoSegment]
push 0
call ExoProtectedPtr
add sp, 6
mov [VideoSegment], dx
:
; ezek utan a kepernyore iras:
mov ax, [VideoSegment]
mov es, ax
mov di, <offset>
mov ah, <attributum>
mov al, <karakter>
stosw
bocs, hogy asm, ha nem erted, irjal...udv:
|
+ - | Turbo C 3.0 hiba (mind) |
VÁLASZ |
Feladó: (cikkei)
|
Sziasztok!
Van egy gondom, amiben segitseget szeretnek kerni. A suliba kell egy
fajlkezelo programot irni. Ennek elso lepese, hogy 10000 db rekordot
kell legeneralni, es ezt fajlba kiirni. A problemam az, hogy a kod,
amit irtam, nem egeszen mukodik. Roviden arrol van szo, hogy a
generalas mukodik, de amikor a fajlba kiirt adatokat beolvasom, akkor
csak az elso 5-10 rekord jon be jol, a tobbibe teljesen mas adatok
vannak, mint amit generaltam. Nem tudom, hogy mi lehet a gond, hiszen
az elso nehany adattal minden rendben van, csak aztan jonnek a
problemak. Raadasul teljesen veletlenszeru, hogy hanyadik elemtol
kezdodoen. Neha az elso 15 teljesen jo, kozvetlenul utana valo
futtataskor meg mar pl. az 5-tol kezdve rossz.
Sajnos azt sem tudom, hogy a kiirasnal mennek gallyra a dolgok, vagy
a beolvasasnal. Mar rengeteg mindent megprobaltam: kikapcsoltam a
Norton cache-t, kikapcsoltam a C pufferet, atvittem Pentiumrol 386-
osra, semmi javulas. Megmutattam ket hivatasos programozonak, de
fogalmuk sem volt mi lehet a hiba oka. Virus nem lehet, mert csak a
forrast vittem at masik gepre. A hiba jelentkezik akkor is, ha csak
az exet futtatom BDE-n kivul. Probaltam hogy nem irasasra+olvasasra
nyitom meg a fajlt, hanem eloszor csak irasra, aztan lezarom (fflush,
fclose) es csak olvasasra nyitom meg, de hiaba. Memoriahibat sem
jelez.
Kodreszletek:
...
FILE *fpteljes;
typedef struct {
char ures[7];
unsigned long kulcs;
unsigned int fiz;
unsigned int varos;
char foglalt;
} trecord;
trecord rek;
...
fpteljes = fopen("teljes.dat", "w"); //Kulcsfajl megnyitasa irasra
if (fpteljes == NULL) {
fprintf(stderr, "Sikertelen file-nyitasi kiserlet: teljes!\n");
exit(-1);
};
for (i=0; i<N; i++) { //N az elemszam, 10000
rek.kulcs=kulcs[i]; //A kulcsot mar korabban generalta
rek.fiz=(random(30)+20)*1000; //Fizetesek generalasa
rek.varos = random(9000)+1000; //Varoskodok (irszam) generalasa
fwrite (&rek,sizeof(rek),1,fpteljes);
cout <<i <<". " <<rek.kulcs <<". " <<rek.fiz <<". " <<rek.varos
<<"\n"; //Itt meg jol irja ki
};
cout <<"\n\n";
fflush(fpteljes); fclose(fpteljes);
fpteljes = fopen("teljes.dat", "r"); //Kulcsfajl megnyitasa irasra
if (fpteljes == NULL) {
fprintf(stderr, "Sikertelen file-nyitasi kiserlet: teljes!\n");
exit(-1);
};
for (i=0; i<N; i++) {
fseek (fpteljes, i*sizeof(rek), SEEK_SET);
fread (&rek,sizeof(rek),1,fpteljes);
cout <<i <<". " <<rek.kulcs <<". " <<rek.fiz <<". " <<rek.varos
<<"\n"; //Itt mar nem ugyanazt irja
//ki, mint amit az elobb :-(
};
fflush(fpteljes); fclose(fpteljes);
...
Tudnatok otletet adni, hogy mi lehet a hiba oka?
A leveleket legyszi cc-zzetek a magancimemre is, mert nem jar a Coder.
Ja, C++ -ban irom.
Norbi
|
+ - | Re: data1c - alvarez, onmodosito kod - Stenya (mind) |
VÁLASZ |
Feladó: (cikkei)
|
On Fri, 28 Aug 1998 11:25:25 EDT, wrote:
>Alvarez:
>>interruptot interruptbol valoban nem lehet hivni, de meg lehet
>>trukkozni ugy, hogy kiolvasod az interrupt cimet amit hasznalni
>>akarsz, aztan egy pushf utan raugrasz.
>Miert ne lehetne interruptot interruptbol meghivni?
>Siman meg lehet...
>A problemajara szerintem Hali.Non valaszolt, ezert nem irom
>le en is.
megkovetlek titeket: valaszomat egy assembly-oktato konyvben olvastam
valaha (cimere sajna nem emlexem), onnan szarmazik ez a megallapitas
(it-bol nem lehet it-t hivni) es onnan szarmazik a megoldasa is (ami
szerintem igen egyszeru es igen jol mukodik.)
>Otti:
>>Termeszetesen nem hivhatsz barmikor DOS funkciot,
>>foleg megszakitasbol nem. Van egy un. DOS foglaltsagi
>>flag, aminek a bebillentett allapotaban nem ajanlatos
>>DOS funkciot hivni!
>Igy van, ha jol tudom az elso 9(?) szolgaltatas reentrans,
>azok, amelyek karakterkiiratast (beolvasast) vegeznek.
aztan lehet, hogy enis csak a dos-os interruptokra gondoltam, csak
akkor meg nem tudtam rola...
: alvarez :
]:[http://www.inf.bme.hu/~alvarez]
... mingyar' hozom is befele a baltat, oszt' megnezheted magad...
|
+ - | Re: adat az exe-ben (mind) |
VÁLASZ |
Feladó: (cikkei)
|
Hello, Arp!
irta a kovetkezo uzenetben: ...
>Az egyik otlet hogy obj-kent belelinkelni az exebe. Lehet hogy
>hulyeseget kerdezek de ha igy csinalom, az ugye betoltodik a memoba, es
>ha igen, akkor az az adatszegmenshez vagy a kodszegmenshez tartozik?
Az attol fugg, hogy milyen szegmensnevet adtal meg annak a proginak, amivel
eloallitottad. De ha igy csinalod, azt ugyanaz, mintha a progidban statikus
adatteruletkent megjelolod, es ugy forditod. Milyen nyelven irnad a
progidat?
>A kerdes, hogy le tudom-e valahogy kerdezni maganak a futo programnak a
>nevet, hogy igy nyissam-e meg.
DOS alatt ez a programnak atadott elso parancssori parameter, a futo progi
teljes path-evel egyutt. Ha C-ben irsz, akkor:
int main(int argc, char *argv[])
{
FILE *f;
f = fopen(argv[0], "rb");
...
}
>Viszont remelem jol gondolom, hogy az igy hozzafuzott adat nem foglalja
>memoriat, mivel nem toltodik be hanem a wincsin/lemezen marad, ami
>viszont igen elonyos.
Jol gondolod! De mi az elonye annak, hogy hozzaszerkeszted az exe-hez? Miert
nem adodo kulon fajlkent melle?
Szia,
Gyuri
|
|