[pascal]Przerwania 21h, funkcje MsDos, tworzenie pliku

0

Witam
Mam mały problem z utworzeniem pliku za pomocą przerwania 21h.
Nie bede pisał całego kodu jaki wykonuje program, a jedynie część tą z którą się męcze.

...
var

 regs: Registers;      { For Windows: TRegisters }

 f:string;

 dt:string;

 plik:string;

BEGIN
...

plik:='bbb.xxx';

   regs.ah:=$3c;

   regs.cx:=0;

   regs.ds:=seg(plik);

   regs.dx:=ofs(plik);

   with regs do intr($21, regs);

   with regs do begin

     str(ax,f);

   end;

   readln;

   writeln('ax: '+f); {zwraca blad nr 2 lub 3}

W tutorialach mówią o nazwie pliku która ma być zakończona bajtem zerowym. Jak to dodać?
jak ta ścieżka do pliku powinna wyglądać?

0

plik:=plik + #0;
regs.ds:=seg(plik[1]);
regs.dx:=ofs(plik[1]);
// plik[0] == length(plik)

Gdzieś miałem starego Petera Nortona, dawno w niego nie zaglądałem.

0

plik:='c:\trutututu\tralalala\aqq.cyk'#0;

0

Dzieki wielkie za pomoc.
Mam jedno pytanie czemu do adresów DS:DX dopisywane są kolejno segment oraz offset pierwszego znaku z całego strinka plik, czyli plik[1]; ??

0
mgr.Dobrowolski napisał(a)

...
plik[0] == length(plik)

function length(s:string):byte;
begin
    length:=s[0]
end;

sizeof(string[10])==10+1

1 użytkowników online, w tym zalogowanych: 0, gości: 1