Извлечение данных из переменной окружения
unit GetSBInf;
interface
var
base :integer; { базовый адрес ввода-вывода}
irq :integer; { номер IRQ }
dma8 :integer; { 8-битный канал DMA }
dma16 :integer; { 16-битный канал DMA }
midi :integer; { порт MIDI }
cardtype :integer; { номер типа платы }
procedure GetBlasterInfo; {извлечение информации о плате}
implementation
uses dos;
var
s : string; {переменная окружения ?BLASTER?}
e : byte; {позиция в этой строке}
function str2hex:word;
{преобразует последовательность hex-цифр в число}
var
val : word;
begin
val := 0;
inc(e);
while (s[e] <> ? ?) and (s[e] <> char(0)) and
(e <= length(s)) do begin
case UpCase(s[e]) of
?0?..?9? : val := val * 16
+ (byte(s[e]) - byte(?0?));
?A?..?F? : val := val * 16
+ (byte(s[e]) - byte(?A?) + 10);
else begin
writeln(
?Ошибка в цифровых параметрах переменной окружения?);
halt;
end;
end;
inc(e);
end;
str2hex := val;
end;
procedure GetBlasterInfo; {информация о плате}
begin
s := getenv(?BLASTER?);
e := 1;
if (length(s)>0) then begin
while (e < length(s)) do begin
case UpCase(s[e]) of
?A?:base := str2hex;
?I?:irq := str2hex;
?D?:dma8 := str2hex;
?H?:dma16 := str2hex;
?P?:midi := str2hex;
?T?:cardtype := str2hex;
end; {case}
inc(e);
end; {while}
end else begin
writeln(
?Отсутствует переменная окружения BLASTER?);
halt;
end; {if}
end;
end.