aetsya s imeni pervogo podkata- loga cepochki, a ne s obratnoj kosoj cherty. Bajt ASCII 0 signali- ziruet o konce stroki. V dannom primere imya tekushchego kataloga prisvaivaetsya peremennoj "CURRENT_DIR": ;---v segmente dannyh CURRENT_DIR DB 64 DUP(?) ;---poluchit' tekushchij katalog MOV AH,47H ;nomer funkcii LEA SI,CURRENT_DIR ;ukazyvaem na oblast' dannyh MOV DL,1 ;nakopitel' A INT 21H ;pomeshchaet stroku po adresu DS:SI 5.2.5 Poluchenie/ustanovka vremeni i daty poslednego dostupa k fajlu. Esli otschityvat' ot nulya, to bajty 22-23 32-bajtnogo elementa kataloga soderzhat vremya poslednego dostupa k fajlu. Bajty 24-25 - soderzhat datu. Znachenie bitov sleduyushchee: Vremya: bity 11-15 chasy (0-23) 5-10 minuty (0-59) 0-4 sekundy (0-29 s 2-sekundnym intervalom) Data: bity 9-15 god (0-119, smeshchenie s 1980 goda) 5-8 mesyac (1-12) 0-4 chislo (1-31) Den' nedeli ne zapisyvaetsya; DOS vychislyaet ego po ostal'noj in- formacii. Otmetim takzhe, chto kak vsegda, mladshij bajt etih 2-bajtnyh znachenij raspolozhen ran'she v pamyati, chem starshij. Srednij uroven'. Metod dostupa k fajlu s ispol'zovaniem upravlyayushchego bloka fajla pozvolyaet poluchit' datu poslednego dostupa k fajlu, no ne vremya. Kogda FCB otkryvaetsya funkciej 0FH preryvaniya 21H, to zapolnyaetsya dvuhbajtnoe pole daty v vysheprivedennom formate. |to pole raspolozheno v FCB so smeshcheniem 14H [5.3.5]. S drugoj storony, dostup k fajlu s pomoshch'yu deskriptora fajla pozvolyaet kak poluchit', tak i ustanovit' datu i vremya poslednego dostupa k fajlu. Funkciya 57H preryvaniya 21H vypolnyaet vse opera- cii. Dlya ustanovki vremeni i daty pomestite nomer fajla v BX, i 0 v AL. Dlya polucheniya daty i vremeni nado pomestit' v AL 1. V oboih sluchayah data soderzhitsya v DX, a vremya v CX. Znachenie bitov sovpa- daet s tem, chto opisano v tablice. V tehnicheskom rukovodstve po MS DOS utverzhdaetsya, chto mladshie bajty informacii nahodyatsya v CH i DH, i naoborot. Na samom dele eto ne tak. Pri vozniknovenii oshibki ustanavlivaetsya flag perenosa, a v AX vozvrashchaetsya 1, esli v AL ukazano nepravil'noe chislo i 6, esli plohoj deskriptor faj- la. V sleduyushchem primere opredelyaetsya chas, v kotoryj byl poslednij lostup k fajlu: ;---v segmente dannyh PATH DB 'B:NEWDATA.BAK',0 ;---otkryvaem fajl LEA DX,PATH ;ukazyvaem na stroku puti MOV AH,3DH ;funkciya otkrytiya fajla MOV AL,0 ;otkryvaem dlya chteniya INT 21H ;otkryvaem fajl JC OPEN_ERROR ;perehod na obrabotku oshibki ;---poluchaem datu i vremya dostupa k fajlu MOV BX,AX ;pomeshchaem nomer fajla v BX MOV AL,0 ;kod dlya chteniya vremeni MOV AH,57H ;nomer funkcii INT 21H ;poluchaem vremya dostupa JC TIME_ERROR ;perehod na obrabotku oshibok ;---sdvigaem bity, otnosyashchiesya k chasam, v nachalo CH MOV CL,3 ;gotovim sdvig SHR CH,CL ;teper' CH soderzhit chas dostupa 5.2.6 Spryatannye i zashchishchennye ot zapisi fajly. DOS ispol'zuet shest' razlichnyh atributov fajlov, kotorye dayut dannomu fajlu opredelennyj status. Fajl mozhet imet' neskol'ko iz etih atributov odnovremenno (no ne vse). Atributy ustanavlivayutsya 12-m bajtom 32-bajtnogo elementa kataloga. Mladshie shest' bitov imeyut znachenie, a ostal'nye dolzhny byt' ravny nulyu. Bity takie: esli bit 5 = 1, to fajl byl izmenen so vremeni poslednej arhivacii 4 = 1, to fajl yavlyaetsya podkatalogom 3 = 1, to etot element yavlyaetsya ne fajlom, a metkoj toma 2 = 1, to fajl yavlyaetsya "sistemnym" 1 = 1, to fajl spryatan pri poiske po katalogu 0 = 1, to fajl ob®yavlen tol'ko dlya chteniya Bit 5 eto arhivnyj bit, ispol'zuemyj programmami BACKUP i RESTORE DOS. |tot bit s'rasyvaetsya v 0 posle arhivacii i ustanavlivaetsya, kogda s fajlom snova rabotali. Pri sleduyushchej arhivacii neizmenen- nye fajly mogut byt' obnaruzheny i proignorirovany. Vysokij uroven'. Bejsik ne pozvolyaet Vam ustanavlivat' atributy fajla pryamo. Sprav'tes' v [5.2.1], kak schitat' katalog v pamyat', najti nuzhnyj fajl, sdelat' izmeneniya i snova zapisat' ego na disk. Kak tol'ko katalog pomeshchaetsya v pamyat', bajty atributov nahodyatsya po smeshche- niyam 11, 43, 75 i t.d. Esli nuzhno, to Vy mozhete prochitat' tekushchie atributy i izmenit' tol'ko odin bit, ispol'zuya tehniku bitovyh operacij, opisannuyu v prilozhenii B. No legche prosto perepisat' vse atributy zanovo. Bud'te vnimatel'ny, oshibki mogut byt' fa- tal'nymi. V dannom primere schityvayutsya atributy fajla s imenem "NEWDATA.AAA". 100 'chitaem sektora kataloga, nachinaya s &H2000 i zatem ... 110 DEF SEG = &H2000 'ukazyvaem na oblast' kataloga 120 FILENAME$ = "NEWDATAAAA" 'ishchem imya fajla bez tochki 130 DIRPTR = 0 'ukazatel' v kataloge 140 FOR N = 1 TO 112 'proveryaem vse elementy 150 X$ = "" 'vremennaya stroka dlya imeni fajla 160 FOR M = 0 TO 10 'dlya kazhdogo simvola imeni 170 X$ = X$+PEEK(DIRPTR+M) 'dobavlyaem ego k stroke 180 NEXT ' 190 IF X$ = FILENAME$ THEN 220 'esli imya najdeno, to uhodim 200 NEXT ' 210 PRINT "File not found": END 'net takogo fajla 220 X = PEEK(DIRPTR+11) 'poluchaem atributy nuzhnogo fajla 230 IF X AND 32 <> 0 THEN PRINT "File not baked up" 240 IF X AND 16 <> 0 THEN PRINT "File is a subdirectory" 250 IF X AND 8 <> 0 THEN PRINT "Volume label - not a file" 260 IF X AND 4 <> 0 THEN PRINT "File is a system file" 270 IF X AND 2 <> 0 THEN PRINT "File is a hidden file" 280 IF X AND 1 <> 0 THEN PRINT "File is read-only" Srednij uroven'. Funkciya 43H preryvaniya 21H mozhet kak nahodit', tak i izmenyat' atributy fajla, no tol'ko esli fajl byl otkryt s pomoshch'yu metoda deskriptora fajlov, a ne s pomoshch'yu metoda upravlyayushchego bloka fajla. Net analogichnoj funkcii dlya FCB. Bajt atributov mozhet byt' ustanovlen pri sozdanii fajla [5.3.2], ispol'zuya rasshirennyj upravlyayushchij blok fajla. No esli Vy posledovatel'no otkroete FCB, izmenite ustanovku atributov i zatem zakroete fajl, to u nego ostanutsya pervonachal'nye atributy. Hotya, konechno, Vy mozhete izme- nit' atributy kakim-nibud' obhodnym putem, no namnogo proshche is- pol'zovat' funkciyu, ispol'zuyushchuyu metod deskriptora fajlov. CHtoby ispol'zovat' funkciyu 43H, pomestite 1 v AL, chtoby pris- voit' fajlu bajt atributov, soderzhashchijsya v CX (na samom dele v CL, poskol'ku CH raven 0). Mozhno naoborot pomestit' v AL 0, chtoby v CX byl vozvrashchen tekushchij bajt atributov fajla. V oboih sluchayah DS:DX dolzhny ukazyvat' na stroku, dayushchuyu put' k fajlu. Konec stroki otmechaetsya bajtom ASCII 0 (kotoryj ne vhodit v chislo 63-h simvolov). V primere status "hidden" (spryatannyj) prisvaivaetsya fajlu OVERDUE: ;---v segmente dannyh PATH DB 'A:ACCOUNTS',0 ;---vklyuchaem priznak spryatannogo fajla MOV AH,43H ;nomer funkcii MOV AL,0 ;chitaem bajt atributov LEA DX,PATH ;DS:DX ukazyvayut na put' INT 21H ;bajt atributov v CX JC ERROR_ROUTINE ;obrabotka oshibok OR CL,10B ;vklyuchaem bit 1 MOV AH,43H ;nomer funkcii MOV AL,1 ;zamenyaem bajt atributov INT 21H ;teper' fajl stal spryatannym Flag perenosa ustanavlivaetsya pri vozniknovenii oshibki. V etom sluchae v AX vozvrashchaetsya 2 - esli fajl ne najden, 3 - esli ne najden put' i 5 - pri drugih oshibkah (net dostupa). 5.2.7 CHtenie/izmenenie metki toma. Metka toma dlya diskety - eto element kataloga, imeyushchij spe- cial'nyj atribut. Metka zanimaet pervye 11 bajtov elementa, otno- syashchiesya k imeni i rasshireniyu fajla. Bajt atributov po smeshcheniyu 11 soderzhit znachenie 8 (bit 3 = 1). Polya vremeni i daty zapolnyayutsya obychnym obrazom. Odnim iz svojstv etogo atributa yavlyaetsya to, chto dannyj element ne vyvoditsya po komande DIR. Metka mozhet zanimat' lyubuyu poziciyu v kataloge. Ona ishchetsya pereborom vseh bajtov atributov, poka ne budet najdeno znachenie 8. CHtoby steret' metku nado prosto pomestit' E5 v pervyj bajt sootvetstvuyushchego elementa - sam bajt atributov mozhno ne menyat'. CHtoby izmenit' metku nado zapisat' novye 11 simvolov (ostatok nado zapolnit' probelami). CHtoby prisvoit' metku toma disku, kotoryj ne imel ee, nado najti pustoe mesto v kataloge i zapisat' tuda metku i sootvetstvuyushchij atribut, nichego bol'she ne trebuetsya. Vysokij uroven'. Obsuzhdenie v [5.4.2] ob®yasnyaet kak chitat' i pisat' absolyutnye sektora v Bejsike. Dlya standartnoj dvuhstoronnej diskety nado ispol'zovat' nomer storony 0, nomer dorozhki 0, nomer sektora - 6 i chislo sektorov dlya chteniya/zapisi - 7. Posle togo, kak dannye zapisany v otvedennyj bufer, primery, privedennye zdes' mogut byt' ispol'zovany dlya izmeneniya ili dobavleniya metki toma. Zatem sektora dolzhny byt' perezapisany na disk. Bud'te vnimatel'ny: oshibka mozhet privesti k potere vsej informacii na diske. Dannyj primer ishchet metku toma i izmenyaet ee: 100 'sektora zagruzheny, nachinaya skazhem s &H1000 110 DEF SEG = &H1000 120 DIRPTR = 11 'ukazatel' na bajt atributov 130 FOR N = 1 TO 112 'proveryaem vse elementy kataloga 140 IF PEEK(DIRPTR) = 8 THEN 180 'uhod esli metka toma 150 DIRPTR = DIRPTR + 32 'ukazyvaem na sled. element 160 NEXT 'proveryaem ego atribut 170 PRINT "No volume label found": END 'metki net 180 INPUT "Enter new volume label", V$ 'zapros metki 190 IF LEN(V$) > 11 THEN BEEP: PRINT "11 chars only": GOTO 180 200 V$ = V$ + STRING$(11-LEN(V$),32) 'dopolnyaem probelami 210 DIRPTR = DIRPTR - 11 'vozvrashchaemsya na nachalo elementa 220 FOR N = 1 TO LEN(V$) 'pomeshchaem vse simvoly metki 230 POKE N,MID$(V$,N,1) 'v pamyat' 240 NEXT ' 250 'teper' ostalos' perezapisat' sektora na disk Nizkij uroven'. V nizheprivedennom primere predpolagaetsya, chto Vy sozdali bufer dannyh razmerom 3584 bajt, dlya hraneniya vseh semi sektorov kata- loga diskety emkost'yu 360K. Bufer nazyvaetsya DIR_AREA. V pervom primere metka toma ishchetsya i vyvoditsya, ili, esli ona ne najdena, to vyvoditsya soobshchenie ob ee otsutstvii. Dlya udobstva oblast' bufera dlya sektorov otvoditsya v segmente dannyh; luchshe otvesti pamyat' dlya zadachi, a zatem osvobodit' ee [1.3.1]. ;---v segmente dannyh VOL_STRING DB 'The volume label is $' NO_LABEL DB 'There is no volume label $' DIR_AREA DB 3584 DUP(?) ;---chitaem 7 sektorov kataloga MOV AX,SEG DIR_AREA ;segment bufera MOV ES,AX ; MOV BX,OFFSET DIR_AREA ;smeshchenie bufera MOV DL,0 ;nomer nakopitelya MOV DH,0 ;nomer golovki MOV CH,0 ;nomer dorozhki MOV CL,6 ;startovyj sektor MOV AL,7 ;chislo sektorov kataloga MOV AH,2 ;nomer funkcii chteniya INT 13H ;chitaem katalog v pamyat' ;---ishchem metku toma, sravnivaya bajt atributov s 8 MOV CX,112 ;chislo elementov ADD BX,11 ;smeshchenie dlya atributov TRY_AGAIN: MOV AL,[BX] ;berem 1-j element CMP AL,8 ;eto metka toma? JE GOT_IT ;esli da, to uhod ADD BX,32 ;inache na sled. element LOOP TRY_AGAIN ; ;---vyvodim soobshchenie ob otsutstvii metki toma MOV AH,9 ;funkciya vyvoda stroki LEA DX,NO_LABEL ;ukazyvaem na stroku INT 21H ;vyvodim ee JMP SHORT CONTINUE ;na konec ;---vyvodim stroku, dayushchuyu metku toma GOT_IT: MOV AH,9 ;funkciya vyvoda stroki LEA DX,VOL_STRING ;ukazyvaem na stroku INT 21H ;vyvodim ee SUB BX,11 ;ukazatel' na metku MOV CX,11 ;pishem 11 simvolov MOV AH,2 ;funkciya vyvoda simvolov NEXT_CHAR: MOV DL,[BX] ;simvol v DL INT 21H ;vyvodim simvol INC BX ;perehodim k sleduyushchemu LOOP NEXT_CHAR ; CONTINUE: CHtoby steret' metku pomestite sleduyushchij kod v GOT_IT: GOT_IT: MOV AL,0E5H ;kod otmetki pustogo elementa SUB BX,11 ;ukazatel' na nachalo elementa MOV [BX],AL ;menyaem pervyj bajt CHtoby izmenit' metku toma, nado vmesto etogo ispol'zovat' v GOT_IT sleduyushchij kod. Predpolagaetsya, chto Vy podgotovili gde-to 11-bajtnuyu stroku NEW_LABEL. GOT_IT: LEA SI,NEW_LABEL ;SI dolzhen ukazyvat' na stroku SUB BX,11 ;BX ukazyvaet na nachalo metki MOV DI,BX ;pomeshchaem ukazatel' v DI MOV CX,11 ;peresylka 11 simvolov REP MOVSB ;peresylaem stroku CHtoby sozdat' metku mozhno ispol'zovat' tot zhe samyj kod, no nado takzhe ustanovit' bajt atributov ravnyj 8 (Vy mozhete prosto dobavit' ASCII 8 k stroke, soderzhashchej novuyu metku, tak kak bajt atributov neposredstvenno sleduet za samoj metkoj). I, nakonec, vo vseh sluchayah izmeneniya kataloga, neobhodimo zapisat' katalog obratno na disk. Oshibki pri etom neprostitel'ny. ;---zapis' izmenennyh sektorov nazad na disk MOV AX,SEG DIR_AREA ;registry kak i pri chtenii MOV ES,AX ; MOV BX,OFFSET DIR_AREA ; MOV DL,0 ; MOV DH,0 ; MOV CH,0 ; MOV CL,6 ; MOV AL,7 ; MOV AH,3 ;nomer funkcii zapisi sektorov INT 13H ; Razdel 3. Podgotovka k rabote s fajlami. Programmy, napisannye na yazykah vysokogo urovnya mogut prosto otkryt' fajl i vsya podgotovitel'naya rabota dlya operacij s fajlami budet vypolnena avtomaticheski. Odnako programmisty na yazyke as- semblera dolzhny sozdat' special'nye oblasti dannyh, kotorye is- pol'zuyutsya pri operaciyah vvoda/vyvoda. MS DOS ispol'zuet dva metoda dostupa k fajlam, metod upravlyayushchego bloka fajla (FCB) i metod deskriptora fajla. Metod FCB sohranilsya s teh por, kogda MS DOS ne rabotala s drevovidnoj strukturoj katalogov, poetomu s ego pomoshch'yu mozhno poluchit' dostup tol'ko k fajlam, nahodyashchimsya v tekushchem kataloge. Metod deskriptora fajla pozvolyaet poluchit' dostup k lyubomu fajlu, nezavisimo ot togo, kakoj katalog yavlyaetsya tekushchim. Poskol'ku teper' drevovidnaya struktura katalogov shiroko is- pol'zuetsya, to metod FCB stanovitsya anahronizmom, odnako MS DOS prodolzhaet podderzhivat' etot metod, chtoby sohranit' sovmestimost' so starym programmnym obespecheniem i po etoj prichine my rassmot- rim i ego. Odnako v svoih programmah vsegda ispol'zujte metod deskriptora fajla. Metod deskriptora fajla imeet dopolnitel'noe preimushchestvo v tom, chto on trebuet men'she podgotovitel'noj rabo- ty. Odnako v nekotoryh prilozheniyah sami operacii vvoda/vyvoda pri ego ispol'zovanii mogut okazat'sya bolee slozhnymi, chem v metode FCB. Naprimer, operacii chteniya fajla s pryamym dostupom s ispol'- zovaniem metoda deskriptora fajla trebuyut chtoby programma vychis- lyala smeshchenie kazhdoj zapisi v fajle, v to vremya kak sootvetstvuyu- shchaya funkciya FCB poluchaet nomer zapisi i delaet neobhodimye vychis- leniya sama. Prezhde chem chitat' ili pisat' dannye fajl dolzhen byt' otkryt. Otkryt' fajl eto znachit sozdat' i inicializirovat' special'nuyu oblast' dannyh, ispol'zuemuyu MS DOS, kotoraya soderzhit vazhnuyu informaciyu o fajle, takuyu kak imya fajla, imya nakopitelya, razmer zapisi fajla i t.d. YAzyki vysokogo urovnya, takie kapk Bejsik, sozdayut eti oblasti avtomaticheski. Odnoj iz takih oblastej yav- lyaetsya upravlyayushchij blok fajla i kogda ispol'zuetsya metod FCB, to programma sozdaet etot blok, a MS DOS chitaet i manipuliruet ego soderzhimym. Pervonachal'no FCB soderzhit tol'ko imya fajla i imya nakopitelya; posle togo kak fajl otkryvaetsya v nego dobavlyaetsya informaciya o razmere zapisi fajla i o tekushchej pozicii, s kotoroj k nemu budet osushchestvlyat'sya dostup. S drugoj storony, pri dostupe s pomoshch'yu deskriptora fajla MS DOS avtomaticheski sozdaet oblast' dannyh dlya fajla v proizvol'nom meste. Zatem MS DOS sozdaet unikal'nyj 16-bitnyj kod nomera fajla i vposledstvii etot "nomer" ispol'zuetsya funkciyami DOS dlya iden- tifikacii togo, s kakim iz otkrytyh fajlov proizvoditsya operaciya. Vse chto nuzhno dlya nahozhdeniya fajla - eto standartnaya stroka puti, v kotoroj mozhet byt' neobyazatel'noe imya nakopitelya i imena podka- talogov dolzhny byt' razdeleny obratnoj kosoj chertoj. |ti stroki otlichayutsya ot standartnogo zaprosa MS DOS tol'ko tem, chto oni dolzhny zavershat'sya bajtom ASCII 0, s tem chtoby programma mogla najti konec stroki (takie stroki nazyvayutsya strokami ASCIIZ). Operacii po peresylke dannyh iz ili v fajl trebuyut, chtoby byla ukazana oblast' pamyati v kotoruyu ili iz kotoroj budut napravlyat'- sya dannye. Takoj bufer opredelyaetsya otvedeniem emu mesta v pamyati i ustanovkoj ukazatelya na ego pervyj bajt (t.e. na mladshij adres bufera v pamyati). Esli peredano slishkom mnogo dannyh, to bufer perepolnyaetsya i mozhet razrushit' dannye, raspolozhennye v sleduyushchih adresah pamyati. Bufer mozhet ispol'zovat'sya kak promezhutochnyj bufer, rabotayushchij tol'ko s nebol'shoj porciej dannyh dlya operacij chteniya ili zapisi. Ili bufer mozhet pomeshchat'sya v oblast' pamyati, v kotoroj programma dejstvitel'no hranit i obrabatyvaet dannye. Funkcii dostupa cherez upravlyayushchij blok fajla opredelyayut prome- zhutochnyj bufer s pomoshch'yu ukazatelya, kotoroj vse vremya hranitsya operacionnoj sistemoj. |tot bufer nazyvaetsya oblast' obmena s diskom (disk transfer area) ili DTA. K sozhaleniyu, tehnicheskaya dokumentaciya po IBM PC chasto nazyvaet terminom DTA ukazatel' na bufer, hotya na samom dele pravil'no nazyvat' ego ukazatelem na DTA. Posle togo kak ukazatel' na DTA ustanovlen s pomoshch'yu spe- cial'noj funkcii, vse fajlovye operacii ispol'zuyut ego do teh por poka on ne budet izmenen. S drugoj storony, funkcii, ispol'zuyushchie deskriptor fajla, dolzhny ukazyvat' startovyj adres bufera obmena kazhdyj raz pri vyzove funkcii i oni ignoriruyut ukazatel' na DTA, ispol'zuemyj funkciyami upravlyayushchego bloka fajla. Risunok 5-2 pokazyvaet dva metoda dostupa k fajlam. 5.3.1 Ustanovka/proverka nakopitelya po umolchaniyu. Programmy mogut ekonomit' chast' raboty, naznachaya nakopitel' po umolchaniyu, na kotorom soderzhatsya fajly dannyh. Esli v nachale programmy zaprosit' u pol'zovatelya kakoj nakopitel' on budet ispol'zovat', to vposledstvii ne budet somnenij k kakomu nakopi- telyu sleduet obrashchat'sya. Vysokij uroven'. V privedennoj programme na Bejsike tekushchij nakopitel' po umol- chaniyu pereklyuchaetsya s pomoshch'yu procedury na mashinnom yazyke. Proce- dura imeet dlinu vsego 7 bajtov. Ona pomeshchaetsya v stroku X$, a peremennaya Z sluzhit ukazatelem na pervyj bajt procedury. V prilo- zhenii G ob®yasnyaetsya kak vstavlyat' assemblernye procedury v prog- rammy na Bejsike. Nomer nakopitelya ustanavlivaetsya v stroke 110, prichem 0 = A, 1 = B i t.d. Esli naznachit' nakopitelem po umolcha- niyu nesushchestvuyushchij nakopitel', to oshibki ne budet, poetomu bud'te vnimatel'ny. Ne pytajtes' ob®edinit' stroki 120 i 130 etoj proce- dury, poskol'ku v etom sluchae interpretator Bejsika budet obraba- tyvat' ih nepravil'no. 100 DEF SEG 'segment na nachalo oblasti Bejsika 110 NUM = 0 'vybiraem nakopitel' A 120 X$ = CHR$(180)+CHR$(14)+CHR$(178)+CHR$(NUM)+CHR$(205)+ CHR(33)+CHR$(223) 130 Y = VARPTR(X$) 'poluchaem deskriptor stroki (adres v Y+1) 140 Z = PEEK(Y+1)+PEEK(Y+2)*256 'vychislyaem adres stroki 150 CALL Z 'vypolnyaem mashinnuyu proceduru Srednij uroven'. Funkciya EH preryvaniya 21H ustanavlivaet nakopitel' po umolcha- niyu. Nado prosto pomestit' nomer nakopitelya (0 = A, 1 = B i t.d.) v DL i vypolnit' preryvanie. |ta funkciya vozvrashchaet v AL chislo nakopitelej na mashine. Otmetim, chto kogda u mashiny imeetsya tol'ko odin nakopitel', to vozvrashchaetsya chislo 2. Luchshij sposob opredele- niya chisla nakopitelej u mashiny opisan v [1.1.5]. MOV AH,0EH ;nomer funkcii MOV DL,1 ;kod dlya nakopitelya B INT 21H ;ustanavlivaem nakopitel' po umolchaniyu Funkciya 19H preryvaniya 21H soobshchaet kakoj iz nakopitelej yav- lyaetsya nakopitelem po umolchaniyu. Dlya etoj funkcii net vhodnyh registrov. Pri vozvrate v AL soderzhitsya kodovyj nomer, gde 0 = A, 1 = B i t.d. 5.3.2 Sozdanie/udalenie fajla. Mozhno sozdat' fajl, ne pomeshchaya v nego nikakoj informacii. Sozdaetsya element kataloga, a dlina fajla ustanavlivaetsya ravnoj 0. Pri udalenii fajla sootvetstvuyushchij element kataloga na samom dele ne udalyaetsya, on prosto stanovitsya nedejstvuyushchim za schet izmeneniya pervogo bajta elementa (pervogo simvola imeni fajla) na E5H. Vposledstvii etot element mozhet byt' perezapisan pri sozda- nii novogo fajla. Vo vremya udaleniya fajla vnosyatsya takzhe izmene- niya v tablicu razmeshcheniya fajlov, s tem chtoby sektora ispol'zuemye etim fajlom byli dostupny dlya drugih fajlov. Samo soderzhimoe etih sektorov pri etom ne stiraetsya. Poetomu mozhno vosstanovit' uda- lennyj fajl - odnako preduprezhdaem, chto operacii s tablicej raz- meshcheniya fajlov nado proizvodit' ochen' ostorozhno. Vysokij uroven'. Bejsik ne imeet special'noj komandy dlya sozdaniya fajla. Vmesto etogo pri otkrytii fajla ukazannoe imya ishchetsya v kataloge i, esli ono ne najdeno, to sozdaetsya novyj fajl. Esli otkryt' novyj fajl, a zatem zakryt' ego ne proizvodya v nego zapisi, to on ostanetsya v kataloge s dlinoj 1 bajt i emu budet otveden klaster diskovogo prostranstva (edinstvennyj bajt - eto simvol Ctrl-Z - ASCII 26 - kotoryj ispol'zuetsya v kachestve priznaka konca standartnogo teks- tovogo fajla). Detali operatora OPEN sm. v [5.3.3]. Naoborot, operator CLOSE ne unichtozhaet fajl. Vmesto etogo dlya unichtozheniya fajla ispol'zuetsya operator KILL. Dlya togo chtoby unichtozhit' fajl ego ne nado otkryvat'. Prosto pomestite imya fajla v kavychkah, naprimer KILL "A:ACCOUNT.DAT". Ili, esli fajl naho- ditsya v drugom podkataloge, to nado ispol'zovat' standartnyj put' k fajlu, naprimer KILL "A:\FINANCES\ACCOUNT.DAT". V oboih sluchayah imya nakopitelya neobhodimo ukazyvat' tol'ko esli fajl nahoditsya ne na nakopitele po umolchaniyu. Otmetim, chto Vy ne mozhete vospol'zo- vat'sya etim metodom, chtoby udalit' podkatalog (kotoryj yavlyaetsya odnim iz vidov fajla) - vmesto etogo ispol'zujte RMDIR. Srednij uroven'. Fajl mozhet byt' sozdan ili unichtozhen s pomoshch'yu libo metoda upravlyayushchego bloka fajla, libo metoda deskriptora fajla. Sozdanie fajla odnim iz metodov ni v koej mere ne ogranichivaet budushchij dostup k nemu tol'ko etim metodom. No, poskol'ku odnovremenno s sozdaniem on otkryvaetsya, to pri sozdanii neobhodimo ispol'zovat' tot metod, s pomoshch'yu kotorogo Vy budete rabotat' s etim fajlom na etot raz. Kogda fajl sozdaetsya, a zatem zakryvaetsya i pri etom v nego nichego ne zapisyvaetsya, to emu sootvetstvuet element katalo- ga s nulem v pole dliny fajla, odnako diskovoe prostranstvo etomu fajlu ne otvoditsya. Vazhno ponimat', chto kogda posledovatel'nyj fajl otkryvaetsya dlya zapisi (a ne dlya dobavleniya) dannyh, to ispol'zuetsya imenno eta funkciya sozdaniya fajla, poetomu fajl obrezaetsya do nulevoj dliny i zatem polnost'yu perezapisyvaetsya. Metod FCB: Funkciya 16H preryvaniya 21H sozdaet i otkryvaet fajl. Sozdajte FCB s imenem fajla i nakopitelya i pust' DS:DX ukazyvaet na nego. Zatem vyzovite funkciyu. Prosmatrivaetsya katalog i esli najden sovpadayushchij element, to snova ispol'zuetsya imenno etot element kataloga, pri etom novyj fajl perekryvaet staryj s tem zhe imenem. CHtoby izbezhat' neprednamerennogo razrusheniya fajlov, snachala pro- ver'te na nalichie fajla s takim imenem, ispol'zuya funkciyu 11H preryvaniya 21H [5.2.1]. Esli net fajla s takim imenem, to soz- daetsya novyj element kataloga i v AL vozvrashchaetsya 0; esli katalog polon, to v AL vozvrashchaetsya FF. CHtoby prisvoit' fajlu special'nye atributy (naprimer, status tol'ko dlya chteniya) [5.2.6] ispol'zujte rasshirennyj upravlyayushchij blok fajla [5.3.5]. Pri otkrytii novyj fajl inicializiruetsya s nulevoj dlinoj i emu otvoditsya klaster diskovogo prostranstva. Vot primer: ;---v segmente dannyh FCB DB 1,'MYFILE DAT',25 DUP(0) ;---proverka nalichiya takogo fajla MOV AH,11H ;funkciya poiska fajla LEA DX,FCB ;DS:DX ukazyvayut na FCB INT 21H ;ishchem fajl CMP AL,0 ;AL = 0 esli fajl sushchestvuet JE WARN_USER ;esli da, to soobshchaem ob etom ;---sozdanie fajla MOV AH,16H ;nomer funkcii sozdaniya fajla INT 21H ;sozdaem fajl Dlya sozdaniya fajla so special'nymi atributami, naprimer statu- som tol'ko dlya chteniya, nado ispol'zovat' rasshirennyj upravlyayushchij blok fajla. Bajt atributov fajla obsuzhdaetsya v [5.2.6]. K obychno- mu FCB nado dobavit' 7-bajtnyj zagolovok, nachinaya s bajta FFH, zatem dolzhny sledovat' 5 bajtov ASCII 0, a zatem nuzhnyj bajt atributov. Dlya sozdaniya spryatannogo fajla neobhodimo, chtoby byl ustanovlen bit 1 bajta atributov. CHtoby spryatat' fajl, otkrytyj v privedennom primere, napishite: FCB DB 0FFH,5 DUP(0),2,1,'MYFILE DAT',25 DUP(0) Funkciya 13H preryvaniya 21H unichtozhaet fajl. Nado chtoby DS:DX ukazyvali na neotkrytyj FCB i vypolnit' funkciyu. Esli ne najdeno fajla s ukazannym imenem, to v AL vozvrashchaetsya FF, inache 0. V imeni fajla mogut ispol'zovat'sya dzhokery (znaki voprosa, no ne zvezdochki) i v etom sluchae za odno obrashchenie k funkcii mozhet byt' udaleno neskol'ko fajlov. Vot primer: ;---v segmente dannyh FCB DB 1,'MYFILE DAT',25 DUP(0) ;---udalyaem fajl MOV AH,13H ;nomer funkcii udaleniya fajla LEA DX,FCB ;DS:DX ukazyvayut na FCB INT 21H ;udalyaem fajl CMP AL,0FFH ;proverka na oshibku JE DELETE_ERROR ;uhod na obrabotku oshibki Metod deskriptora fajla: Funkciya 3CH preryvaniya 21H sozdaet i otkryvaet novyj fajl metodom deskriptora fajla. DS:DX dolzhny ukazyvat' na stroku, dayushchuyu put' k fajlu i imya fajla v standartnom formate MS DOS, vklyuchaya imya nakopitelya, esli fajl nahoditsya ne na nakopitele po umolchaniyu. Stroka dolzhna zavershat'sya bajtom ASCII 0. Bajt atribu- tov fajla [5.2.6] pomestite v CX (0 - dlya normal'nogo fajla). Zatem vypolnite funkciyu. Pri uspeshnom vypolnenii flag perenosa budet raven nulyu, a v AX budet vozvrashchen nomer novogo fajla. Pri vozniknovenii oshibki flag perenosa ustanavlivaetsya v 1, a v AX soderzhitsya kod oshibki, kotoryj mozhet byt' raven 3, esli ne najden put', 4 - esli uzhe otkryty vse bufera dlya fajlov i 5 - esli kata- log polon ili fajl uzhe sushchestvuet so statusom tol'ko dlya chteniya. Otmetim, chto esli v kataloge uzhe sushchestvuet fajl s takim imenem, to sushchestvuyushchij fajl obrezaetsya do nulevoj dliny, i tem samym razrushaetsya. Dlya izbezhaniya oshibok nado predvaritel'no ispol'zo- vat' funkciyu 4EH preryvaniya 21H dlya proverki. ;---v segmente dannyh PATH DB 'B:LEVEL1\LEVEL2\FILENAME.EXT',0 ;---proverka nalichiya fajla v kataloge MOV AH,4EH ;funkciya poiska v kataloge LEA DX,PATH ;DS:DX ukazyvayut na put' INT 21H ;proverka nalichiya fajla JNC WARN_USER ;esli est', to soobshchaem ;---sozdanie fajla MOV AH,3CH ;funkciya sozdaniya fajla MOV CX,0 ;normal'nye atributy INT 21H ;sozdaem fajl JC OPEN_ERROR ;uhod na obrabotku oshibki MOV HANDLE,AX ;zapominaem nomer fajla V MS DOS 3.0 dobavlena novaya funkciya dlya sozdaniya fajla meto- dom deskriptora fajla. |to funkciya nomer 5BH preryvaniya 21H. Ona rabotaet v tochnosti tak zhe, kak i opisannaya funkciya 3CH, za isk- lyucheniem togo, chto ona vozvrashchaet rasshirennye kody oshibok, chto pozvolyaet luchshe obrabatyvat' oshibochnye situacii. Oni ob®yasneny v [7.2.5]. Dlya unichtozheniya fajla metodom deskriptora fajla ispol'zujte funkciyu 41H preryvaniya 21H. I opyat' DS:DX dolzhny ukazyvat' na stroku, dayushchuyu put' i imya fajla. Dzhokery v imeni fajla ne dopus- kayutsya. Zatem vyzovite funkciyu. Esli pri vozvrate flag perenosa ustanovlen, to funkciya ne vypolnena; v etom sluchae AL budet so- derzhat' 2, esli fajl ne najden i 5 - esli proizoshla oshi'ka na diske. Otmetim, chto s pomoshch'yu etoj funkcii Vy ne mozhete udalit' fajl so statusom tol'ko dlya chteniya; izmenite atributy fajla [5.2.6] pered ego udaleniem. Vot primer: ;---v segmente dannyh PATH DB 'B:LEVEL1\LEVEL2\FILENAME.EXT',0 ;---unichtozhaem fajl MOV AH,41H ;nomer funkcii unichtozheniya LEA DX,PATH ;DS:DX ukazyvayut na put' INT 21H ;unichtozhaem fajl JC DELETE_ERROR ;na obrabotku oshibki MS DOS versii 3.0 imeet special'nuyu funkciyu (5AH preryvaniya 21H) dlya sozdaniya vremennogo "bezymyannogo" fajla. Operacionnaya sistema sama generiruet imya dlya fajla i proveryaet, chto takogo fajla eshche net v kataloge. Pri etom isklyuchaetsya vsyakaya vozmozhnost' chto pri sozdanii vremennogo fajla budet razrushen sushchestvuyushchij fajl s sovpadayushchim imenem. Pri vhode DS:DX dolzhny ukazyvat' na stroku puti k katalogu, v kotorom dolzhen byt' sozdan vremennyj fajl. Stroka dolzhna zavershat'sya obratnoj kosoj chertoj. Pomestite atributy fajla v CX (obychno 0). Pri vozvrate AX budet soderzhat' nomer fajla, esli tol'ko flag perenosa ne ustanovlen, v etom sluchae AX soderzhit informaciyu ob oshibke. Proizvol'noe imya fajla dobavlyaetsya k koncu stroki puti. |ta funkciya mozhet vozvrashchat' rasshirennye kody oshibok, kotorye sushchestvuyut tol'ko v MS DOS 3.0; oni ob®yasnyayutsya v [7.2.5]. Fajl, sozdannyj etoj funkciej ne unich- tozhaetsya avtomaticheski - programma dolzhna ispol'zovat' funkciyu 41H (sm. vyshe). V dannom primere programma sozdaet vremennyj fajl, a zatem unichtozhaet ego: ;---v segmente dannyh PATH DB 'B:LEVEL1\LEVEL2\',12 DUP(0) ;---sozdaem vremennyj fajl MOV AH,5AH ;nomer funkcii LEA DX,PATH ;DS:DX ukazyvayut na put' INT 21H ;sozdaem vremennyj fajl JC CREATION_ERROR ;uhod na obrabotku oshibki . . MOV AH,41H ;nomer funkcii LEA DX,PATH ;DS:DX ukazyvayut na put' INT 21H ;unichtozhaem vremennyj fajl JC DELETION_ERROR ;uhod na obrabotku oshibki 5.3.3 Otkrytie/zakrytie fajla. "Otkryt'" fajl - eto znachit sozdat' nebol'shie bloki pamyati, kotorye budut soderzhat' informaciyu o fajle i sluzhit' promezhutoch- noj stanciej (buferom), cherez kotoruyu dannye budut peredavat'sya mezhdu fajlom i pamyat'yu. YAzyki vysokogo urovnya avtomaticheski soz- dayut dlya Vas eti bloki, a yazyk assemblera - net. Pri otkrytii fajla katalog proveryaetsya na ego nalichie. Esli fajla najden, to MS DOS beret informaciyu iz kataloga o razmere i date sozdaniya fajla. Zatem, pri zakrytii fajla, sistema obnovlyaet informaciyu v kataloge. Zakrytie fajla takzhe ochishchaet vse sistemnye bufera pere- nosa, posylaya na disk ostavshuyusya informaciyu. Esli Vy ne zakroete fajl pered zaversheniem programmy, to eto mozhet privesti k potere dannyh. Esli programma rabotaet so mnogimi fajlami, to nado postoyanno imet' vvidu skol'ko imeetsya odnovremenno otkrytyh fajlov. MS DOS 2.1 pozvolyaet imet' do 99 odnovremenno otkrytyh fajlov, prichem po umolchaniyu tol'ko 8 (izmenite eto chislo s pomoshch'yu komandy MS DOS FILES). Bejsik pozvolyaet imet' ne bolee 15 otkrytyh fajlov. Kazh- dyj fajl zanimaet mesto dlya bloka parametrov i bufera. Poskol'ku pamyat' dlya kazhdogo fajla otvoditsya otdel'no pered tem, kak fajly otkryvayutsya, to eta pamyat' nedostupna dlya programm, dazhe esli ukazannoe chislo fajlov ne ispol'zuetsya v nastoyashchij moment. Po etoj prichine Vy mozhete ekonomit' pamyat', ustanavlivaya maksimal'no dopustimoe chislo otkrytyh fajlov imenno takim, kotoroe trebuetsya, s pomoshch'yu opisannogo metoda. Vysokij uroven'. Pri otkrytii fajla v Bejsike idet poisk v kataloge i esli fajl ne najden, to sozdaetsya novyj fajl s dannym imenem. Imeetsya dva sposoba zapisi operatora otkrytiya fajla i v bol'shinstve sluchaev oba eti sposoba ekvivalentny. Edinstvennoe otlichie sostoit v tom, chto odin iz etih sposobov bolee zakodirovan, v to vremya kak dru- goj blizhe k estestvennomu yazyku. V oboih operatorah Vy dolzhny ukazat' po men'shej mere tri sorta informacii. Vo-pervyh trebuetsya imya fajla i, poskol'ku eto stroka, ono dolzhno byt' zaklyucheno v kavychki. Vo-vtoryh, chislo, nachinaya s 1, prisvaivaetsya fajlu, kak identifikacionnyj nomer, po kotoromu drugie operatory chitayut ili pishut v fajl. I v-tret'ih Vy dolzhny ukazat' dlya kakoj celi otkry- vaetsya dannyj fajl, t.e. otkryt li on dlya pryamogo ili dlya posle- dovatel'nogo dostupa. Dlya otkrytiya fajla MYFILE.TXT dlya zapisi v posledovatel'nyj fajl, prichem etot fajl budet imet' nomer 2, zapishite ili OPEN "O",#2,"MYFILE.TXT" ili OPEN "MYFILE.TXT" FOR OUTPUT AS #2 Otmetim, chto v oboih sluchayah nomer 2 otnositsya k buferu fajla #2. CHislo mozhet byt' lyubym, ne prevoshodyashchim chisla razreshennyh bufe- rov dlya fajlov. Esli podderzhivaetsya odnovremennaya rabota s shest'yu fajlami, to chislo dolzhno byt' v intervale ot 0 do 6. Odnako bufer fajla nomer 1 ne obyazatel'no ispol'zovat' ran'she, chem fajla nomer 2. Po umolchaniyu Bejsik ustanavlivaet chislo buferov ravnoe 8, no Vy mozhete izmenit' eto chislo na drugoe ot 4 do 15. Iz etih fajlov chetyre ispol'zuyutsya Bejsikom dlya svoih nuzhd, poetomu po umolchaniyu tol'ko 4 fajla dostupny Vam dlya vvoda/vyvoda. Dlya togo chtoby ustanovit' chislo dostupnyh buferov ispol'zujte parametr F: pri zapuske Bejsika. Naprimer, esli Vy pri starte Bejsika napishite BASICA/F:10, to budet sozdano 10 buferov, shest' iz kotoryh dos- tupny dlya fajlovyh operacij. Vtoroj parametr, S:, ustanavlivaet razmer buferov fajla. Vse bufera imeyut odin i tot zhe razmer. Po umolchaniyu beretsya razmer v 128 bajtov, odnako dopustimy razmery do 32767 bajtov. Dlya fajlov posledovatel'nogo dostupa etot razmer mozhet byt' ustanovlen rav- nym 0, chto pozvolyaet nemnogo sekonomit' pamyat'. Dlya fajlov pryamo- go dostupa on dolzhen byt' ne men'she maksimal'nogo razmera zapisi. Otmetim, chto eschi razmer zapisi raven 512 bajtam i razmer bufera tozhe 512 bajt, to eto privodit k uskoreniyu diskovyh operacij. Komanda BASICA/S:512/F:10 otkryvaet 10 buferov razmerom 512 bajt. Kazhdyj fajl trebuet 188 bajtov plyus razmer bufera, poetomu dlya takoj konfiguracii potrebuetsya 7K pamyati. CHislo buferov ne mozhet byt' bol'she, chem razresheno imet' otkrytyh fajlov v DOS. Kodirovannaya forma: Pervaya iz form operatora OPEN ispol'zuet odnu bukvu dlya oboz- nacheniya zhelaemogo tipa operacij nad fajlom. Imeetsya tri vozmozh- nosti: "O" otkryt' fajl s posledovatel'nym dostupom dlya vyvoda "I" otkryt' fajl s posledovatel'nym dostupom dlya vvoda "R" otkryt' fajl s pryamym dostupom dlya vvoda/vyvoda Posledovatel'nye fajly ne mogut zapisyvat'sya, kogda oni otkryty dlya chteniya i naoborot. V tipichnyh sluchayah, posledovatel'nye fajly otkryvayutsya dlya chteniya, zatem schityvayutsya celikom v pamyat' i zakryvayutsya. Posle togo kak neobhodimye izmeneniya vneseny, fajl snova otkryvaetsya, no teper' dlya vyvoda i zapisyvaetsyaobratno na disk, perekryvaya to, chto bylo zapisano v ego sektorah i, vozmozh- no, zahvatyvaya novye sektora. Sleduet otmetit' neskol'ko momentov, otnosyashchihsya k etoj forme operatora OPEN. Imya fajla dolzhno soderzhat' imya nakopitelya, esli fajl ne najden na nakopitele po umolchaniyu (t.e. nakopitele, s kotorogo zapushchen Bejsik). Imya fajla mozhet takzhe soderzhat' put' k fajlu, nahodyashchemusya v podkataloge, naprimer OPEN "I",#1,"A:\LE- VEL1\LEVEL2\MYFILE.TXT". Krome togo, Vy mozhete pomestit' ukazanie razmera zapisi v konce operatora OPEN "R",#3,"MYFILE.TXT",52. V etom sluchae kazhdaya zapis' budet zanimat' 52 bajta diskovogo prostranstva. Esli v operatore FIELDS ne ispol'zuyutsya vse 52 bajta, to ostatok propadet. |tot parametr sushchestvenen pri opera- ciyah s fajlami pryamogo dostupa. Bol'shinstvo operacij s fajlami posledovatel'nogo dostupa ne trebuyut ukazaniya dliny zapisi, odna- ko Vy mozhete uskorit' fajlovye operacii, ustanoviv razmer zapisi ravnym 512 bajtam. Dlina zapisi mozhet byt' v diapazone ot 1 do 32767 bajtov i po umolchaniyu ravna 128 bajtam. Forma estestvennogo yazyka: Vtoraya forma operatora OPEN delaet sovershenno to zhe samoe, chto i pervaya, no ispol'zuet polnye slova. Vmesto togo, chtoby pisat' "O" ili "I", Vy dolzhny pisat' INPUT ili OUTPUT (bez kavychek), naprimer, OPEN "FILENAME" FOR INPUT AS #1. Dlya fajlov s pryamym dostupom ne ukazyvaetsya etot parametr: OPEN "MYFILE.TXT" AS #2. Krome togo, Vy mozhete ukazat' rezhim APPEND, chtoby zapisat' dannye nachinaya s konca posledovatel'nogo fajla, ne unichtozhaya uzhe sushchest- vuyushchih dannyh: OPEN "B:MYFILE.TXT" FOR APPEND AS #3. Kak i dlya pervoj formy v operatore mozhet byt' ukazana neobyazatel'naya dlina zapisi. Nado prosto dobavit' v kgnce operatora LEN = chislo. Nap- rimer OPEN "C:MYFILE.TXT" AS #1 LEN = 52 otkryvaet fajl pryamogo dostupa s zapisyami dlinoj 52 bajta. CHasto programma dolzhna poluchat' imya fajla ot pol'zovatelya programmy. CHtoby ispol'zovat' eto imya fajla v operatore OPEN prosto podstav'te vmesto stroki imeni fajla imya stroki, soderzha- shchej eto imya. Pri etom neobhodima proverka na pravil'nost' vveden- nogo imeni. 100 INPUT "Enter file name: ",F$ 'poluchaem imya fajla 110 IF INSTR(F$,".") <> 0 THEN 130 'est' li rasshirenie? 120 IF LEN(F$) > 8 THEN 500 ELSE 150 'dlinnee 8 simvolov? 130 IF LEN(F$) > 12 THEN 500 'dlinnee 12 simvolov? 140 IF LEN(F$) - INSTR(F$,".") > 3 THEN 500 'tip dlinnee 3-h 150 OPEN F$ FOR INPUT AS #1 'otkryvaem fajl . . 500 INPUT "Improper filename - enter another: ",F$ 510 GOTO 110 'esli imya nevernoe, novyj zapros Zakrytie fajla: Zakrytie fajla trivial'no. CHtoby zakryt' vse otkrytye fajly napishite CLOSE. CHtoby zakryt' opredelennyj fajl ili neskol'ko fajlov napishite CLOSE #1 ili CLOSE #1, #3. Vazhno zakryt' vse fajly pered zaversheniem programmy. Esli etogo ne sdelat', to v fajle mogut ostat'sya dannye, kotorye ne zapisany na disk. Otme- tim, chto komandy END, NEW, RESET, SYSTEM i RUN zakryvayut vse bufera fajlov, no ne ochishchayut eti bufera. Uzhe zakrytyj fajl vsegda mozhet byt' snova otkryt s ispol'zovaniem lyubogo dostupnogo bufera fajla. Srednij uroven'. MS DOS obespechmvaet razlichnye funkcii dlya otkrytiya i zakrytiya fajla, v zavisimosti ot togo ispol'zovala li programma dlya dostu- pa k fajlu metod upravlyayushchego bloka fajla ili metod deskriptora fajla. V oboih sluchayah mogut byt' otkryty tol'ko fajly, kotorye sushchestvovali do etogo. Dlya sozdaniya novyh fajlov sushchestvuet spe- cial'naya funkciya [5.3.2]. Metod FCB: Funkciya 0FH preryvaniya 21H otkryvaet sushchestvuyushchij fajl. Vy dolzhny snachala sozdat' upravlyayushchij blok fajla, kak pokazano v [5.3.5]. Pered otkrytiem FCB dolzhen soderzhat' tol'ko imya fajla i imya nakopitelya (0 = po umolchaniyu, 1 = A i t.d.). DS:DX dolzhny ukazyvat' na FCB, a zatem nado vypolnit' funkciyu. Pri vozvrate AL budet soderzhat' 0, esli fajl uspeshno otkryt i FF, esli fajl ne najden. Esli dlya ukazaniya nakopitelya ispol'zuetsya 0, to on budet zamenen na kod, sootvetstvuyushchij nakopitelyu po umolchaniyu. Tol'ko posle togo kak fajl otkryt Vy dolzhny ustanovit' razmer zapisi (po umolchaniyu - 128 bajt), a takzhe polya zapisi pryamogo dostupa i tekushchej zapisi (oni obsuzhdayutsya v razdele, otnosyashchemsya k operaciyam s posledovatel'nym i pryamym dostupom). Pri otkrytii pole tekushchego bloka zapolnyaetsya nulem, a polya daty i vremeni informaciej iz kataloga. CHtoby zakryt' fajl s pomoshch'yu metoda FCB, nado ustanovit' DS:DX na otkrytyj FCB i vyzvat' funkciyu 10H preryvaniya 21H. Pri udache informaciya o razmere fajla, date i vremeni budet zapisana v kata- log, a v AL budet vozvrashchen 0. Odnako esli imya fajla ne budet obnaruzheno v kataloge ili ono budet najdeno v drugoj pozicii, to izmeneniya na diske budut indicirovany vozvratom FF v AL. ;---v segmente dannyh FCB DB 1,'FILENAMEEXT',25 DUP(0) ;---otkrytie fajla MOV AH,0FH ;nomer funkcii LEA DX,FCB ;DS:DX ukazyvayut na FCB INT 21H ;otkryvaem fajl CMP AL,0 ;proverka na oshibku JNE OPEN_ERROR ;na obrabotku oshibki . . ;---zakrytie fajla MOV AH,10H ;nomer funkcii LEA DX,FCB ;DS:DX ukazyvayut na FCB INT 21H ;zakryvaem fajl CMP AL,0 ;proverka na oshibku JNE CLOSE_ERROR ;na obrabotku oshibki Metod deskriptora fajla: Dlya otkrytiya fajlov ispol'zujte funkciyu 3DH preryvaniya 21H. DS:DX dolzhny ukazyvat' na stroku, dayushchuyu put' i imya fajla, vklyu- chaya imya nkakopitelya, esli eto neobhodimo. Vsya stroka dolzhna byt' ne dlinnee 63-h bajtov i zavershat'