Limbajul c si C++ abc-doar


anul).Structura de tip date are forma generala



Yüklə 4,6 Mb.
səhifə46/55
tarix07.05.2018
ölçüsü4,6 Mb.
#50260
1   ...   42   43   44   45   46   47   48   49   ...   55

anul).Structura de tip date are forma generala:

struct date{ int da_year; /* anul curent */

char da_day; /* ziua din luna */

char da_mon; /* luna din an (1=Ian)*/

}

Functia nu returneaza nici o valoare (nu este depanabila automat).


-348- [dos.h-setdta() si settime() ]

EXEMPLU: #include

#include

struct date salvare,actuala;

main()

{ getdate(&salvare);

system("date");

actuala.da_year=2007;

actuala.da_day=10;

actuala.da_mon=7;

setdate(&actuala);

printf("Dupa resetare data actuala este:");

system("date");

setdate(&salvare);

}

Pentru afisarea datei,in exercitiu se utilizeaza comanda MS-DOS "date",

apelata cu system().La comanda Enter new date,tastati Enter (sau o data

valida oarecare).Exercitiul reseteaza automat data initiala.
FUNCTIA setdta()

-reseteaza adresa de transfer a datelor

SINTAXA GEMERALA este: void setdta(char far *dta);

Functia schimba adresa DOS de transfer a datelor cu cea specificata prin

pointerul far *dta. (DTA=disk-transfer address)

Functia nu returneaza valori.

EXEMPLU: #include

#include

char far *salvare,far *citire;

char setare[80]="Adresa de transfer pentru date";

main()

{ salvare=getdta();

printf("dta= %Fp\n",salvare);

setdta(setare);

citire=getdta();

printf("dupa resetare dta= %Fp \n",citire);

setdta(salvare); /*reseteaza adresa initiala */

printf("Apasati orice tasta ! \n");

getch();

}

Functia este utila pentru a putea transfera datele in memoria extinsa,sau

pentru a desemna "discuri virtuale" etc.
FUNCTIA settime()

-reseteaza ceasul sistemului

SINTAXA GENERALA este: void settime(struct time *timep);

Functia utilizeaza o structura de tip time (definita in dos.h-vezi tipu-

rile de date),pentru a reseta ceasul sistemului (ora,minutul,secumda)

struct time { unsigned char ti_min; /* minute */

unsigned char ti_hour; /*ore */

unsigned char ti_hund; /*sutimi de secunda */

unsigned char ti_sec; /*secunde */

Functia nu returneaza nici o valoare.


-349- [ dos.h- setvect() ]

EXEMPLU: #include

#include

struct time salvare,resetare,t;

int x;

main()

{ gettime(&salvare);

resetare.ti_hour=10;

resetare.ti_min=33;

settime(&resetare);

gettime(&t);

printf("Dupa resetare este ora: \n");

printf("%d %d \n",t.ti_hour,t.ti_min+1);

sleep(3);

settime(&salvare);

}
FUNCTIA setvect()

-seteaza un vector de intrerupere

SINTAXA GENERALA este: void setvect(int nr,void interrupt (*isr)() );

Orice procesor din familia 8086 include un set de vectori de intrerupere

numerotati de la 0 la 255.Fiecare vector contine cate o valoare formata

din 4 bytes,care este de fapt adresa de locatia a unei functii de intre-

rupere.Functia setvect() seteaza valoarea pentru vectorul specificat prin

nr la cea specificata prin pointerul *isr,care este un pointer de tip far

spre adresa care contine functia dorita.Adresa unei functii C poate fi

transferata pointerului isr doar daca functia respectiva a fost declarata

ca functie de intrerupere.In versiunea C++ pot fi declarata ca functii de

intrerupere doar functiile fara membri sau cele cu membri statici.Functia

se poate utiliza pentru a transfera adresa unei functii de intrerupere,

indiferent de modelul de memorie utilizata(mica,medie,larga,extinsa etc.)

Pentru a citi valoarea unui vector se poate utiliza functia getvect().

Functia nu returneaza valori.

EXEMPLU: #include

#include

main()

{ printf("INT 254= %x \n",getvect(254));

setvect(254,getvect(1));

printf("dupa resetare: \n");

printf("INT 254= %x \n",getvect(254));

setvect(254,getvect(253));

sleep(3);

printf("se revine la setarea initiala: \n");

printf("INT 254= %x \n",getvect(254));

sleep(3);

}

In exemplul de mai sus am utilizat doi vectori 254 si 253 cu valoarea 0

(adica nu contin nici o adresa-sunt programabili) si un vector pozitiv (1)

Nu va jucati cu vectorii de intrerupere,decat daca stiti exact ce rezultat

obtineti,deoarece riscati ca versiunea d-voastra de program sa devina

incompatibila cu toate programele standard.Este recomandabil sa nu

resetati decat vectorii programabili(verificati cu getvect() ).


-350- [ dos.h-setverify() si sleep() ]

FUNCTIA setverify()

-seteaza statusul pentru steguletul de avertizare (flag)

SINTAXA GENERALA este: void setverify(int value);

Functia seteaza statusul pentru flag (steguletul de control al scrierii

pe disc).Valorile acceptate sunt 0 (off) si 1 (on).Steguletul de control

semnaleaza modul de control al scrierii pe disc.Daca steguletul este

setat OFF (0),inscriptionarile nu sunt verificate,iar daca steguletul este

setat ON (1),toate inscrierile pe disc sunt verificate astfel incat sa

asigure scrierea corecta a datelor (verifica datele bit cu bit).

Functia nu returneaza nici o valoare (nu este depanabila automat).

EXEMPLU: #include

#include

main()

{ printf("Steguletul este setat: %d \n",getverify());

setverify(1);

printf("dupa resetare este: %d \n",getverify());

setverify(0);

sleep(3);

}

Valoarea implicita este 0 (OFF).
FUNCTIA sleep()

-suspenda executia pentru intervalul specificat(in secunde)

SINTAXA GENERALA este: void sleep(unsigned seconds);

Functia suspenda executia programului pentru numarul de secunde specificat

prin seconds.Intervalul de timp al fiecarei intreruperi are o acuratete de

o sutime de secunda,sau are acuratetea generala a ceasului de sistem (daca

sistemul are o acuratete mai mica decat o sutime de secunda).

Functia nu returneaza nici o valoare.

EXEMPLU: #include

#include

int x;

main()

{ for (x=0;x<5;x++)

{ printf("Pauza de %d secunde ! \n\n",x);

sleep(x);

}}

In manual am abuzat de functia sleep() pentru a intarzia cu 2-3 secunde

executia exercitiilor,astfel incat se se poata vizualiza fereastra DOS

suficient timp,pentru a intelege rezultatul functiei.In versiunea C++ si

in alte versiuni,functia sleep() nu poate fi intotdeauna apelata.Utilizati

o alta functie de intrerupere (gen getch() ),sau pur si simplu puteti

utiliza combinatia de taste Alt+F5 pentru a vizualiza fereastra DOS,dupa

care reveniti in fereastra C cu Enter sau tot cu Alt+F5.Functia este utila

mai ales pentru rutine grafice sau pentru afisarea unor mesaje de averti-

zare,dar poate fi utilizata si ca functie de intrerupere,pentru orice gen

de aplicatie numerica.Versiunea Visual C++ include o functie sleep() care

suspenda executia pentru intervalul specificat in milisecunde (DWORD).

Atentie:-daca utilizati functia sleep() cu o valoare infinita (ca rezultat

al unei operatii matematice) programul va executa o bucla infinita (se va

bloca in executia unei pauze nedeterminate in timp).


-351- [ dos.h -sound() si unixtodos() ]

FUNCTIA sound()

-executa un sunet cu frecventa specificata (in Hz)

SINTAXA GENERALA este: void sound(unsigned frequency);

Functia executa un sunet generat de difuzorul incorporat la frecventa

specificata prin frequency,exprimata in Hz(cicli per secunda).Pentru a

intrerupe sunetul este necesara apelarea functiei nosound().

Functia nu returneaza nici o valoare (nu este depanabila automat).

EXEMPLU: #include

int x;

main()

{ for (x=1;x<100;x++)

{ sound(x*10);

delay(1000);

sound(x*100);

delay(1000);

}

nosound();

}

Puteti utiliza functia pentru a genera diverse aplicatii:sonerii,sirene,

melodii,semnale de avertizare,semnale sonore asociate functiilor etc.
FUNCTIA unixtodos()

-converteste data calendaristica din format UNIX in format DOS

SINTAXA GENERALA este:

void unixtodos(long time,struct date *d,struct time *t);

Functia utilizeaza o structura de tip date si o structura de tip time,

pentru a realiza conversia de la formatul UNIX la formatul DOS al datei

calendaristice si a ceasului de sistem.Datele vor fi arhivate in cele

doua structuri.Functia poate fi aplicata doar pentru date calendaristice

mai recente decat 1 Ianuarie 1980.

Functia nu returneaza nici o valoare.

EXEMPLU: #include

#include

struct date d1;

struct time t1;

long int valoare;

main()

{ getdate(&d1);

gettime(&t1);

valoare=dostounix(&d1,&t1);

valoare=valoare+86400*777;

unixtodos(valoare,&d1,&t1);

printf("Peste 777 de zile va fi: \n");

printf("%d %d %d \n",d1.da_day,d1.da_mon,d1.da_year);

sleep(3);

}

Exemplul ilustreaza modul de a realiza operatii aritmetice cu datele

calendaristice,utilizand formatul UNIX al datei.Cifra de 86400 reprezinta

numarul de secunde dintr-o zi(adauga o zi la formatul UNIX).

Puteti utiliza functia impreuna cu dostounix() pentru a realiza diverse

rutine de calcul,cu operatii asupra datelor calendaristice.


-352- [dos.h -unlink() si CONSTANTE dos ]

FUNCTIA unlink()

-sterge o fila

SINTAXA GENERALA este: int unlink(const char *filename);

Functia sterge fila al carei nume este specificat prin *filename (pointer

spre numele si extensia filei).Se poate specifica orice unitate de disc

si orice cale de acces (PATH) dar nu se accepta caracterele cu sens gene-

ral (wildcards gen ? si * ).Nu pot fi sterse filele cu atributul read-only

care trebuie modificate cu chmod() sau _rtl_chmod() inainte de a fi sterse

(prin schimbarea atributului la archive).In mod similar,fila specificata

trebuie sa fie inchisa,inainte de a putea fi stearsa (nu se pot sterge

filele deschise).

Functia returneaza 0 daca a fost executata cu succes si -1 in caz de eroa-

re.In caz de eroare seteaza errno la una dintre valorile: EACCES(acces

interzis) sau ENOENT(cale gresita sau fila nu exista).

EXEMPLU: #include

int b;

main()

{ b=unlink("fisier1.bak");

if (b==0)

printf("Fila a fost stearsa cu succes ! \n");

else

printf("Fila nu a fost gasita (sau nu exista)! \n");

sleep(3);

}

Exemplul prezinta modul de debarasare de o fila de back-up care nu mai

este utila.In mod similar se pot genera rutine automate pentru stergerea

automata a filelor de back-up generate prin actualizarea fisierelor.

Atentie maxima atunci cand specificati filele ce urmeaza sa fie sterse,

deoarece dupa stergerea filelor de back-up,datele nu mai pot fi recuperate

In caz ca exista mai multe file cu acelasi nume,dar cu cale de acces

diferita,atentie maxima la specificarea caii de acces,pentru a nu sterge

alta fila decat cea dorita.Atentie sa nu stargeti din greseala filele

sistemului de operare,executabilele,aplicatiile sau bazele de date.
CONSTANTE,TIPURI DE DATE si VARIABILE GLOBALE
_8087 este o variabila globala care se utilizeaza pentru a desemna

statusul coprocesorului matematic instalat.

SINTAXA GENERALA este: extern int _8087;

Poate accepta urmatoarele valori:

1 8087

2 80287

3 80387

0 -nu exista coprocesor matematic instalat.

Se utilizeaza in BIOS pentru detectarea coprocesorului matematic.Detectia

poate fi anulata prin resetarea variabilei 87 la valoarea NO (cele doua

setari posibile sunt: SET 87=YES sau SET 87=NO )
_argc este o variabila globala pentru valoarea de start a functiei main()

SINTAXA GENERALA este: extern int _argc

Se utilizeaza pentru a transfera valori initiale functiei main().


-353- [ dos.h-tipuri de date ]

_argv este o variabila globala de tip pointer care pointeaza spre

o arie de memorie care contine argumentele initiale ale unei

linii de comanda,argumente ce vor fi transferate functiei main

() la pornirea programului

SINTAXA GENERALA este: extern char **_argv;
COUNTRY este o structura care contine elemente de format specifice

pentru o anumita tara (simboluri personalizate etc.)

are forma generala:

struct COUNTRY { int co_date; /*data */

char co_curr[5]; /*moneda */

char co_thsep[2] /*separator mii */

char co_desep[2] /*separator zecimal */

char co_dtsep[2] /*separator data */

char co_tmsep[2] /*separator timp */

char co_currstyle; /*stil moneda */

char co_digits; /*nr digiti moneda */

char co_time; /*formatul pt timp */

long co_case; /*case map */

char co_dasep[2] /*separator data */

char co_fill[10] /caracter de umplere*/

};

co_date (formatul datei) accepta urmatoarele valori:

0 U.S. (month,day,year)

1 European (day,month,year)

2 Japonez (year,month,day)

iat co_currstyle (stilul monedei) accepta urmatoarele valori:

0 -simbolul precede valoarea fara spatiu (EXEMPLU: $10.52)

1 -simbolul urmeaza valoarea fara spatiu (EXEMPLU: 10.52$)

2 -simbolul precede valoarea cu spatiu gol (EXEMPLU: $ 10.52)

3 -simbolul urmeaza valoarea cu spatiu gol (EXEMPLU: 10.52 $)

Pentru separatori se poate utiliza orice caracter ASCII.
date este o structura utilizata pentru a arhiva data calendaristica

are forma generala:

struct date { int da_year; /* anul curent */

char da_day; /* ziua din luna */

char da_mon; /* luna din an (1=Ianuarie) */

};

Se utilizeaza pentru functiile:dostounix,getdate,setdate,unixtodos
devhdr este o structura pentru driverele de unitate MS-DOS

are forma generala:

struct devhdr {

long dh_next;

short dh_attr;

unsigned short dh_strat;

unsigned short dh_inter;

char dh_name[8];

};

Se utilizeaza pentru comenzile care intereseaza unitatea de lucru(device).


-354- [ dos.h- TIPURI DE DATE ]

dfree este o structura utilizata pentru valorile returnate de getdfree()

are forma generala:

struct dfree{ unsigned df_avail; /*clustere libere */

unsigned df_total; /*total clustere */

unsigned df_bsec; /*bytes per sector */

unsigned df_sclus; /*sectoare per cluster */

};
diskfree_t este o structura utilizata de functia _dos_getdiskfree()

are forma generala:

struct diskfree_t { unsigned total_clusters;

unsigned avail_clusters;

unsigned sectors_per_cluster;

unsigned bytes_per_sector;

};
dosdate_t este o structura utilizata de _dos_getdate() si _dos_setdate()

are forma generala:

struct dosdate_t { unsigned char day; /* 1-31 */

unsigned char month; /* 1-12 */

unsigned int year; /* 1980-2099 */

unsigned char dayofweek; /* 1-6 0=Sun */

}
DOSERROR este o structura utilizata de dosexterr pt erorile de DOS

are forma generala:

struct DOSERROR { int de_exterror; /*eroarea extinsa */

char de_class; /*clasa erorii */

char de_action; /*actiunea */

char de_locus; /*locatia erorii */

};
dostime_t este o structura utilizata de _dos_gettime() si _dos_settime()

are forma generala:

struct dostime_t { unsigned char hour; /*ora */

unsigned char minute; /*minutul */

unsigned char second; /*secunda */

unsigned char hsecond; /*sutimi de sec*/

};
-doserrno este o variabila globala care inregistreaza erorile

SINTAXA GENERALA este: extern int _doserrno;

variabila poate inregistra o serie de erori de sistem,pe care le

contabilizeaza cu urmatoarele formule mnemotehnice:

E2BIG (mediu defect),EACESS(acces oprit),EACCES(fara acces),EACESS

(director curent),EBADF(handle gresit),EFAULT(rezervat),EINVAL(

functie gresita),EMFILE(prea multe file deschise),ENOENT(nu exista

fila sau directorul),ENOEXEC(format eronat),ENOMEM(bloc de control

al memoriei (Mcb) distrus),ENOMEM(memorie insuficienta),ENOMEM(bloc

eronat),EXDEV(unitate gresita),EXDEV(unitatea nu exista)

Pentru amanunte consultati manualul DOS,la codurile de eroare returnate.


-355- [ dos.h- TIPURI DE DATE ]

dosSearchInfo este o structura cu urmatoarea forma generala:

(typedef struct) typedef struct { char drive;

char pattern[13];

char reserved{7];

char attrib;

short time;

short date;

long size;

char nameZ[13];

} dosSearchInfo
environ(_environ) este o variabila globala si este o arie de pointeri

spre siruri.Este utilizata pentru a accesa si/sau a

modifica variabilele de mediu ale sistemului de operare

SINTAXA GENERALA este: extern char **_environ;

Fiecare sir continut este de forma generala: envar=varvalue unde prin

envar se specifica numele variabilei (de exemplu PATH) iar prin varvalue

se specifica sirul care contine valoarea variabilei (exemplu: C:\DOS\TC)

Valoarea pentru varvalue poate fi nula (sirul poate fi gol).

La lansarea programului,setarile de mediu ale sistemului de operare sunt

transferate functiei main() prin argumentul sau env care este egal cu

setarile initiale din environ(_environ).

Variabila environ poate fi accesata cu getenv() si poate fi modificata cu

putenv(),pentru a adauga,sterge sau modifica unele siruri.Aria de memorie

care contine variabilele de mediu,poate fi redimensionata dar variabila

environ(_environ) va fi ajustata automat astfel incat sa pointeze corect

aria de memorie.

Se utilizeaza pentru a modifica mediul de operare.Nu se recomanda incepa-

torilor (riscati sa alterati iremediabil mediul de operare).
fatinfo este o structura pentru tabela de alocare a filei

Se utilizeaza cu getfat() si getfatd().Are forma generala:

struct fatinfo { char fi_sclus; /*sectoare per cluster */

char fi_fatid; /*byte de identificare */

int fi_nclus; /*numar clustere */

int fi_bysec; /*bytes per sector */

};
fcb este o structura care contine blocul de control al filei (MS-DOS)

are forma generala:

struct fcb { char fcb_drive;

char fcb_name[8],fcb_ext[3];

short fcb_curblk,fcb_recsize;

long fcb_filsize;

short fcb_date;

char fcb_resv[10],fcb_currec;

long fcb_random;

};

Este utila pentru functiile care analizeaza filele si fisierele

Yüklə 4,6 Mb.

Dostları ilə paylaş:
1   ...   42   43   44   45   46   47   48   49   ...   55




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin