dec di {2}
jmp repC1 {13}
ContC1:
{Отображение значения}
mov al,'¦'
mov di,TmpAddr
mov bx,ValueToShow
shl bx,1
repV:
and bx,bx {2}
jz cont {3|13}
mov es:[di+bx],al {9}
dec bx {2}
dec bx {2}
jmp repV {13}
tmout:
xor ax,ax {если время вышло}
inc ax
mov timeout,al
skip:
cont:
inc cntr
in al,$60 {проверка на нажатие клавиши}
neg al
shr al,7
{$ifdef DEBUGMODEKey}
xor ax,ax {заглушка по кнопке}
{$endif}
mov key,al
mov al,key {все проверки на выход из цикла}
or al,l
or al,key1
or al,timeout
mov key1,al
end;
until key1;
TimerReset;
{$R+$S+$Q+$I+}
gotoxy(Wbx+20,by+9); write(cntr:8);
gotoxy(Wbx+42,by+9); write(tms10/1193200:8:6,' ':8);
{ if key then repeat ReadKey until not keypressed;}
CardDone;
if l then TimeStrob:=true else
TimeStrob:=false;
end;
Приложение В
Программа вывода данных в текстовый файл.
uses crt,Objects,mconst;
var Fo: text;
count:byte; {число опрашиваемых каналов}
NumRead, NumWritten: Word; {...необходимо для записи на диск...}
D:DataRec; {массив в котором находятся считанные данные}
P: ProjectRec;
C: ConfigType;
ps,i,tkn:integer;
res: word;
s:string;
cc:longint;
XS:PEmsStream;
function SLeft(li:longint):string;
var s:string; l,i:integer;
begin
str(li,s); l:=length(s);
for i:=1 to 6-l do s:=s+' ';
SLeft:=s;
end;
function TLeft(r:real):string;
var s:string; l,i:integer;
begin
str(r:5:6,s); l:=pos('.',s);
for i:=1 to 5-l do s:=' '+s;
TLeft:=s;
end;
label ex;
begin
if ParamCount<3 then
begin
writeln('Параметры командной строки:');
writeln('outtext PrjFile TakeNumber OutFile');
writeln('где: PrjFile - файл проекта (*.pr)');
writeln(' TakeNumber - номер пробы в проекте (1...50)');
writeln(' OutFile - имя выходного текстового файла');
halt;
end;
val(ParamStr(2),tkn,ps);
if (ps<>0) or (tkn>MaxTakeCount) or (tkn<1) then
begin
writeln('Недопустимое значение номера пробы: ',ParamStr(2));
halt;
end;
res:=_LoadProject(ParamStr(1),P,C);
case res of
rdOk: writeln('Проект успешно считан.');
rdOpenError: writeln('Ошибка: файл не найден или не является файлом проекта.');
rdEmptyFile: writeln('Ошибка: файл пустой или не является файлом проекта.');
rdIdentyError: writeln('Ошибка: файл не является файлом проекта.');
rdVersionError: writeln('Ошибка: неверная версия файла проекта.');
rdReadError: writeln('Ошибка: ошибка чтения файла, возможно файл не является файлом проекта.');
end;
if res<>rdOk then halt;
writeln;
writeln('Название проекта: ',P.ProjectName);
writeln('Количество проб в проекте: ',P.TakeCount);
writeln('Количество опрашиваемых каналов: ',P.ACCount);
write('Опрашиваемые каналы: ');
for i:=1 to P.ACCount do
write(P.AC[i],' ');
writeln;
write('Способ синхронизации: ');
case P.Strob of
Detector : writeln('от датчика');
Timer : writeln('от таймера');
Detector_Timer : writeln('от датчика и через заданный интервал времени');
end;
if Tkn>P.TakeCount then
begin
writeln('Номер пробы превышает номер последней имеющейся в пробы проекте.');
goto ex;
end;
XS:=nil;
XS:=LoadTake(ParamStr(1),P,TkN);
if XS=nil then exit;
count:=P.ACCount;
NumWritten:=SizeOf(D.Detector)+SizeOf(word)*count+SizeOf(D.STime);
cc:=1;
Assign(Fo,ParamStr(3));
{$I-} Rewrite(Fo); {$I+}
IF IOResult<>0 then
begin write('Ошибка создания выходного файла !'); exit; end;
writeln(Fo,'Название пробы: '+P.Takes[tkn]^.TakeName);
write(Fo,'Номер Время,с Датчик');
for i:=1 to count do
write(fo,P.AC[i]:7);
writeln(fo);
XS^.Seek(0);
repeat
XS^.Read(D,NumWritten);
if XS^.Status=stOk then
begin
{$I-}
write(Fo,SLeft(cc),' ',TLeft(D.STime/1000000));
IF IOResult<>0 then begin writeln('Write Error!'); Close(Fo); goto ex; end;
if D.Detector then write(Fo,' On ') else write(Fo,' Off ');
for i:=1 to count do
write(Fo,' ',D.D[i]:6);
IF IOResult<>0 then begin writeln('Write Error!'); Close(Fo); goto ex; end;
writeln(Fo);
{$I-}
{repeat until keypressed; readkey;}
end
else
begin writeln('Error in file!'); Close(Fo); goto ex; end;
cc:=cc+1;
until XS^.Position>=XS^.Size; Close(Fo);
ex:
_CloseProject(P); {repeat readkey until keypressed;}
writeln('Data write completed.'); end.
Приложение Г
Фрагмент программы, выводящий данные в графическом виде на экран.
label beg,repg;
begin
gd:=Detect;
InitGraph(gd,gm,'');
if GraphResult<>grOk then begin write(^G); exit; end;
maxc:=GetMaxColor; SetBkColor(1);
LimLine:=56; InitWindow;
SetWindow(1,LimLine+1,maxx-2,maxy-LimLine-2);
ActiveWindow;
{размер одной записи:}
NumRead:=SizeOf(D.Detector)+SizeOf(word)*count+SizeOf(D.STime);
CC:=trunc(XStream^.Size/NumRead); {число опросов}
{позиционирование для получения времени опроса:}
XStream^.Seek((CC-1)*NumRead);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.