home *** CD-ROM | disk | FTP | other *** search
/ The Equalizer BBS / equalizer-bbs-collection_2004.zip / equalizer-bbs-collection / DEMOSCENE-STUFF / DEMOVT15.ZIP / EXAMPLES.EXE / SETUP / DEVICES.PAS < prev    next >
Pascal/Delphi Source File  |  1994-04-25  |  3KB  |  128 lines

  1. {$A+,B-,D+,E-,F-,G+,I-,L+,N-,O-,R-,S-,V-,X+}
  2. UNIT Devices;
  3.  
  4.    (* Copyright by Jare/Iguana in 1993, but given to the public domain. *)
  5.    (* Want more comments? Write'em!                                     *)
  6.  
  7.    (*    Sound device detection and configuration file various.         *)
  8.  
  9. INTERFACE
  10.  
  11. TYPE
  12.    TDevices = (S_SB16ASP, M_SB16ASP, S_SBPRO, M_SBPRO, SB,
  13.                GUS,
  14.                PAS,
  15.                NONE,
  16.                DEV_INVALID);   (* == No idea of the configuration. *)
  17.  
  18.    TCfg = RECORD
  19.       SoundDevice : TDevices;
  20.       ReplayRate  : WORD;
  21.       Port        : WORD;
  22.       IRQ         : WORD;
  23.       DMA         : WORD;
  24.    END;
  25.  
  26.  
  27. PROCEDURE DetectSoundEnvironment(VAR cfg : TCfg);
  28.  
  29.  
  30.    (* ========================================= *)
  31.  
  32. IMPLEMENTATION
  33.  
  34. USES Dos;
  35.  
  36. PROCEDURE DetectSoundEnvironment(VAR cfg : TCfg);
  37.   VAR
  38.      v : STRING;
  39.      i : INTEGER;
  40.  
  41.   PROCEDURE DoUltraSnd;
  42.     BEGIN
  43.        cfg.SoundDevice := GUS;
  44.        i := 1;
  45.        cfg.Port := 0;
  46.        cfg.IRQ  := 0;
  47.        WHILE (i <= Length(v)) AND (v[i] <> ',') DO BEGIN
  48.           cfg.Port := cfg.Port*16 + ORD(v[i]) - ORD('0');
  49.           INC(i)
  50.        END;
  51.        IF i < Length(v) THEN
  52.           INC(i);
  53.  
  54.        WHILE (i <= Length(v)) AND (v[i] <> ',') DO BEGIN
  55.           cfg.DMA := cfg.DMA*10 + ORD(v[i]) - ORD('0');
  56.           INC(i)
  57.        END;
  58.        IF i < Length(v) THEN
  59.           INC(i);
  60.  
  61.        WHILE (i <= Length(v)) AND (v[i] <> ',') DO
  62.           INC(i);
  63.        IF i < Length(v) THEN
  64.           INC(i);
  65.  
  66.        WHILE (i <= Length(v)) AND (v[i] <> ',') DO BEGIN
  67.           cfg.IRQ := cfg.IRQ*10 + ORD(v[i]) - ORD('0');
  68.           INC(i)
  69.        END;
  70.     END;
  71.  
  72.   PROCEDURE DoSBlaster;
  73.     VAR
  74.       p     : ^WORD;
  75.       dummy : WORD;
  76.       base  : WORD;
  77.     BEGIN
  78.        cfg.SoundDevice := SB;
  79.        i := 1;
  80.        cfg.Port := 0;
  81.        cfg.IRQ  := 0;
  82.        cfg.DMA  := 0;
  83.        WHILE (i <= Length(v)) DO BEGIN
  84.           CASE v[i] OF
  85.              'A' : BEGIN
  86.                       p := @cfg.Port;
  87.                       base := 16
  88.                    END;
  89.              'D' : BEGIN
  90.                       p := @cfg.DMA;
  91.                       base := 10
  92.                    END;
  93.              'I' : BEGIN
  94.                       p := @cfg.IRQ;
  95.                       base := 10
  96.              END ELSE BEGIN
  97.                 p := @dummy;
  98.                 base := 0
  99.              END
  100.           END;
  101.           INC(i);
  102.           WHILE (i <= Length(v)) AND (v[i] <> ' ') DO BEGIN
  103.              p^ := p^*base + ORD(v[i]) - ORD('0');
  104.              INC(i)
  105.           END;
  106.           IF i < Length(v) THEN
  107.             INC(i)
  108.        END
  109.     END;
  110.  
  111.   BEGIN
  112.     v := GetEnv('ULTRASND');
  113.     IF (v <> '') AND (cfg.SoundDevice IN [GUS, DEV_INVALID]) THEN
  114.        DoUltraSnd
  115.     ELSE BEGIN
  116.        v := GetEnv('BLASTER');
  117.        IF (v <> '') AND NOT (cfg.SoundDevice IN [GUS, DEV_INVALID]) THEN
  118.           DoSBlaster
  119.        ELSE BEGIN
  120.           cfg.IRQ  := 4;
  121.           cfg.DMA  := 1;
  122.           cfg.Port := $3F8
  123.        END
  124.     END
  125.   END;
  126.  
  127. END.
  128.