'SQUAWK.BAS v 1.0  A sound effects sampler (C) 1987 by Merlin R. Null 4-17-87
'SQUAWK2.BAS v 1.0  A sound effects sampler (C) 1990 by Mark A. Prichard 12-19-90

DEFINT A-X

TYPE REGTYPE
   AX    AS INTEGER
   BX    AS INTEGER
   CX    AS INTEGER
   DX    AS INTEGER
   BP    AS INTEGER
   SI    AS INTEGER
   DI    AS INTEGER
   FLAGS AS INTEGER
END TYPE

DECLARE SUB INTERRUPT (INTNUM%, INREG AS REGTYPE, OUTREG AS REGTYPE)

DIM INREG AS REGTYPE
DIM OUTREG AS REGTYPE

RANDOMIZE TIMER

Cuckoo$ = "T120L16MLO3BF#"
Zap$ = "T255L64MLO4BAGFEDC<BAGFEDEC<BAGFEDC<BAGFEDC<BAGFEDC"
Tifweet$ = "T255L32O4mlDGD<G>DGDDGDGBAGF#EE"
Zang1$ = "T255L64MLO2BCADGEFEGDACBCADGEFEGDACB"
Zang2$ = "T255L64MLO3BCADGEFEGDACBCADGEFEGDACB"
Zang3$ = "T255L64MLO4BCADGEFEGDACBCADGEFEGDACB"
Zang4$ = "T255L64MLO5BCADGEFEGDACBCADGEFEGDACB"
Downer1$ = "T150L64MSO4BGEC<AFL16D"
Downer2$ = "T150L64MSO4BFC<GD<AL16E"
Downer3$ = "T150L64MSO4BE<AD<GC<L32F"
UpScale1$ = "T150L64MSO3DFA>CEGL16B"
UpScale2$ = "T120L64MSO2E.A.>D.G.>C.F.B."
UpScale3$ = "T150L64MSO0F>CG>DA>EB."
Tweedle$ = "T240L64MLO4EGEGEGCFCFCFGEGEGE"
Whoople$ = "T255L64O4CDEFGABO3CDEFGABO2CDEFGAB"
Bongee1$ = "T255L64MLO1BAGFEDC<BAGFEDCP16>CDEFGAB>CDEFGABP32"
Bongee2$ = "T255L64MLO2BAGFEDC<BAGFEDCP16>CDEFGAB>CDEFGABP32"
Bongee3$ = "T255L64MLO3BAGFEDC<BAGFEDCP16>CDEFGAB>CDEFGABP32"
Bongee4$ = "T255L64MLO4BAGFEDC<BAGFEDCP16>CDEFGAB>CDEFGABP32"
Uhoh1$ = "T255L64MLO1CDEFGAB>CDEFGABP16<BAGFEDC<BAGFEDCP32"
Uhoh2$ = "T255L64MLO2CDEFGAB>CDEFGABP16<BAGFEDC<BAGFEDCP32"
Uhoh3$ = "T255L64MLO3CDEFGAB>CDEFGABP16<BAGFEDC<BAGFEDCP32"
Uhoh4$ = "T255L64MLO4CDEFGAB>CDEFGABP16<BAGFEDC<BAGFEDCP32"
BobWhite$ = "T120L16O4C#.P16T255L64mlC#DD#EFF#GG#AA#BO5CC#DD#EF"
Whung$ = "T255L32mlO3CD<CD>>CD<<CD>>CD<<CD>CD"
Phone2$ = "T240L64MLO4EGEGEGEGEGEGEGEGEGEGEGEGEGEGEG"
Tweet$ = "O4T255L64MLB-BB-BAGAG.>EGG>EGG"
Wolf$ = "T200L64MLO4C#DD#EFF#GG#AA#B>CC#DD#EFP8.<C#DD#EFF#GG#AA#B>CC#DD#EFFED#DC#C<BA#AG#GGF#FED#DC#"
Fweet$ = "T255L64MsO4C#DD#EFF#GG#AA#B>CC#DD#EF"

INREG.AX = 25088                ' find PSP
CALL INTERRUPT(&H21, INREG, OUTREG)

DEF SEG = OUTREG.BX             ' segment of PSP
NN = PEEK(&H80)                 ' length of command tail
CMD$ = ""
N = &H81 + NN - 1               ' hi end addr of command tail
FOR I = &H81 TO N
   CMD$ = CMD$ + CHR$(PEEK(I))
NEXT

CMD$ = LTRIM$(CMD$)
NN = LEN(CMD$)
IF NN > 0 THEN
  IF CMD$ = "?" THEN
     PRINT "enter 'command' for menu prompt;"
     PRINT "enter 'command n' for sound selection 'n'."
  ELSE
     FOR K = 1 TO NN
	X$ = MID$(CMD$, K, 1)
	IF X$ = "*" THEN
	   DO
	     X = INT(RND * 52) + 65
	     IF X > 90 THEN X = X + 6
	     X$ = CHR$(X)
	     GOSUB SQUAWKER
	   LOOP WHILE (INKEY$ = "")
	ELSE
	   GOSUB SQUAWKER
	END IF
     NEXT
  END IF
  END
END IF

CLS
LOCATE 2, 1
COLOR 15
PRINT "      ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
PRINT "      º                                                                    º"
PRINT "      º                                                                    º"
PRINT "      º                                                                    º"
PRINT "      ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ¹"
PRINT "      º  A  Cuckoo         N  Chang          a  Boingee 1      n  Mew      º"
PRINT "      º  B  Zap            O  Oh!            b  Boingee 2      o  Tweet    º"
PRINT "      º  C  Tifweet        P  Space 1        c  Boingee 3      p  Phone 1  º"
PRINT "      º  D  Zang 1         Q  Space 2        d  Boingee 4      q  Phone 2  º"
PRINT "      º  E  Zang 2         R  Gurgle         e  Uhoh 1         r  Wolf     º"
PRINT "      º  F  Zang 3         S  Spectre        f  Uhoh 2         s  Siren    º"
PRINT "      º  G  Zang 4         T  Grup 1         g  Uhoh 3         t  Fweet    º"
PRINT "      º  H  Downer 1       U  Grup 2         h  Uhoh 4         u  Zhoup    º"
PRINT "      º  I  Downer 2       V  Chirp          i  Bob White      v  Vrowr    º"
PRINT "      º  J  Downer 3       W  Waver          j  Whung          w  Zhou     º"
PRINT "      º  K  UpScale 1      X  Tweedle        k  Kazango        x  Art      º"
PRINT "      º  L  UpScale 2      Y  Blurp          l  Who 1          y  Coo      º"
PRINT "      º  M  UpScale 3      Z  Whoople        m  Who 2          z  Squawk   º"
PRINT "      º                                                                    º"
PRINT "      º           F10 - Calcophony       Numerics - Random Sounds          º"
PRINT "      ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ¼"

COLOR 14
LOCATE 3, 10
PRINT "Squawkers and Zangers and Off-Key Loud Clangers and Things that";
LOCATE 4, 10
PRINT "go Bleep in the Night.   (C) 1987 Merlin R. Null    version 1.0";
LOCATE 5, 10
PRINT "              (C) 1990 Mark A. Prichard   version 2.0";

LOCATE 24, 19, 1
PRINT "Noise (A-Z, a-z) or <Esc> to exit ? ";

WHILE X$ <> CHR$(27)
  IF DemoFlag THEN
    IF INKEY$ = "" THEN
      X = INT(RND * 52) + 65
      IF X > 90 THEN
	X = X + 6
      END IF
      X$ = CHR$(X)
    ELSE
      DemoFlag = 0
      LOCATE 24, 19
      PRINT STRING$(40, 32);
      LOCATE 24, 19, 1
      PRINT "Noise (A-Z, a-z) or <Esc> to exit ? ";
    END IF
  ELSEIF RandomSounds > 0 THEN
    X = INT(RND * 52) + 65
    IF X > 90 THEN X = X + 6
    X$ = CHR$(X)
    RandomSounds = RandomSounds - 1
  ELSE
    DO
      X$ = INKEY$
    LOOP WHILE (X$ = "")
  END IF

  IF LEN(X$) = 2 THEN
    IF RIGHT$(X$, 1) = "D" THEN           '<F10>
      DemoFlag = -1
      LOCATE 24, 19
      PRINT STRING$(45, 32);
      LOCATE 24, 19, 0
      COLOR 12
      PRINT "Press Any Key to Stop... ";
      COLOR 15
    END IF
  ELSEIF X$ > "0" AND X$ < ":" THEN     '1-9
    RandomSounds = VAL(X$)
  END IF

  IF LEN(X$) = 1 AND X$ > CHR$(31) THEN
    IF DemoFlag THEN
      LOCATE 24, 44
      PRINT X$;
      LOCATE 24, 44
    ELSE
      LOCATE 24, 55
      PRINT X$;
      LOCATE 24, 55
    END IF
  END IF

  GOSUB SQUAWKER
WEND
COLOR 7
CLS
END

SQUAWKER:
  SELECT CASE X$
    CASE "A"
      PLAY "X" + VARPTR$(Cuckoo$)
    CASE "B"
      PLAY "X" + VARPTR$(Zap$)
    CASE "C"
      PLAY "X" + VARPTR$(Tifweet$)
    CASE "D"
      PLAY "X" + VARPTR$(Zang1$)
    CASE "E"
      PLAY "X" + VARPTR$(Zang2$)
    CASE "F"
      PLAY "X" + VARPTR$(Zang3$)
    CASE "G"
      PLAY "X" + VARPTR$(Zang4$)
    CASE "H"
      PLAY "X" + VARPTR$(Downer1$)
    CASE "I"
      PLAY "X" + VARPTR$(Downer2$)
    CASE "J"
      PLAY "X" + VARPTR$(Downer3$)
    CASE "K"
      PLAY "X" + VARPTR$(UpScale1$)
    CASE "L"
      PLAY "X" + VARPTR$(UpScale2$)
    CASE "M"
      PLAY "X" + VARPTR$(UpScale3$)
    CASE "N"
      FOR J = 1 TO 4                      'Chang
	FOR I = 2000 TO 50 STEP -400
	  SOUND I, .2
	NEXT
	FOR I = 800 TO 2000 STEP 400
	  SOUND I, .2
	NEXT
      NEXT
    CASE "O"
      FOR I = 800 TO 2000 STEP 100        'Oh
	SOUND I, .2
      NEXT
      FOR I = 2000 TO 50 STEP -100
	SOUND I, .2
      NEXT
    CASE "P"
      FOR I = 1000 TO 40 STEP -20         'Space 1
	SOUND I, .2
      NEXT
    CASE "Q"
      FOR I = 10000 TO 500 STEP -500      'Space 2
	SOUND I, .2
      NEXT
    CASE "R"
      FOR I = 10 TO 50 STEP 10            'Gurgle
	FOR J = 50 TO 10 STEP -10
	  SOUND I ^ 2 + J ^ 2, .1
	NEXT
      NEXT
    CASE "S"
      FOR Z = 1 TO 30 STEP .4             'Spectre
	SOUND (SIN(Z) + 40) * 50, .2
      NEXT
    CASE "T"
      FOR I = 10 TO 50 STEP 10            'Grup 1
	FOR J = 50 TO 10 STEP -10
	  SOUND I * J, .1
	NEXT
      NEXT
    CASE "U"
      FOR I = 30 TO 70 STEP 10            'Grup 2
	FOR J = 70 TO 30 STEP -10
	  SOUND I * J, .1
	NEXT
      NEXT
    CASE "V"
      FOR I = 30 TO 60 STEP 10            'Chirp
	FOR J = 60 TO 30 STEP -10
	  SOUND I * J, .2
	NEXT
      NEXT
    CASE "W"
      FOR Z = 1 TO 30 STEP .7             'Waver
	SOUND (SIN(Z) + 20) * 30, .2
      NEXT
    CASE "X"
      PLAY "X" + VARPTR$(Tweedle$)
    CASE "Y"
      FOR I = 1 TO 40                     'Blurp
	SOUND INT(RND * 1400) + 450, .1
      NEXT
    CASE "Z"
      PLAY "X" + VARPTR$(Whoople$)
    CASE "a"
      PLAY "X" + VARPTR$(Bongee1$)
    CASE "b"
      PLAY "X" + VARPTR$(Bongee2$)
    CASE "c"
      PLAY "X" + VARPTR$(Bongee3$)
    CASE "d"
      PLAY "X" + VARPTR$(Bongee4$)
    CASE "e"
      PLAY "X" + VARPTR$(Uhoh1$)
    CASE "f"
      PLAY "X" + VARPTR$(Uhoh2$)
    CASE "g"
      PLAY "X" + VARPTR$(Uhoh3$)
    CASE "h"
      PLAY "X" + VARPTR$(Uhoh4$)
    CASE "i"
      PLAY "X" + VARPTR$(BobWhite$)
    CASE "j"
      PLAY "X" + VARPTR$(Whung$)
    CASE "k"
      FOR I = 10000 TO 500 STEP -500      'Space 2
	SOUND I, .2
      NEXT
      PLAY "X" + VARPTR$(Zap$)
    CASE "l"
      FOR Y = 10.2 TO 8.2 STEP -.2        'Who 1
	SOUND (TAN(Y) + 36) * 25, .8
	SOUND (SIN(Y) + 20) * 50, .4
      NEXT
    CASE "m"
      FOR Y = 10.2 TO 8.2 STEP -.2        'Who 2
	SOUND (TAN(Y) + 36) * 10, .8
	SOUND (SIN(Y) + 20) * 20, .4
      NEXT
    CASE "n"
      FOR Y = 10.8 TO 8 STEP -.1          'Mew
	SOUND (TAN(Y) + 50) * 25, .4
      NEXT
    CASE "o"
      FOR I = 1 TO 3
	PLAY "X" + VARPTR$(Tweet$)
      NEXT
    CASE "p"
      FOR Y = 1 TO 10                     'Phone 1
	SOUND 1195, .4
	SOUND 2571, .4
      NEXT
    CASE "q"
      PLAY "X" + VARPTR$(Phone2$)
    CASE "r"
      PLAY "X" + VARPTR$(Wolf$)
    CASE "s"
      FOR Y = 1 TO 3                      'siren
	SOUND 550, 9
	SOUND 400, 9
      NEXT
    CASE "t"
      FOR I = 1 TO 2
	PLAY "X" + VARPTR$(Fweet$)
      NEXT
    CASE "u"
      FOR Z = 3 TO 9 STEP .2              'Zhoup
	SOUND 120 + Z ^ 4, .1
	SOUND 0, .1
      NEXT
    CASE "v"
      FOR Z = 9 TO 3 STEP -.1             'Vrowr
	SOUND 120 + Z ^ 4, .1
	SOUND 0, .1
      NEXT
    CASE "w"
      FOR I = 40 TO 15 STEP -1            'Zhou
	SOUND I * 90, .1
	SOUND I * 80, .1
	SOUND I * 70, .1
	SOUND I * 60, .1
	SOUND I * 50, .1
      NEXT
    CASE "x"
      FOR I = 1 TO 10                      'Art
	SOUND 1195 - 50 * I, .3
	SOUND 1195 + 50 * I, .3
      NEXT
    CASE "y"
      FOR I = 0 TO 150 STEP 10            'Coo
	SOUND 1295 - I, .4
	SOUND 1095 + I, .4
      NEXT
    CASE IS = "z"
      FOR I = 1 TO 20                     'Squawk
	SOUND I * 50, .1
	SOUND I * 100, .1
	SOUND I * 150, .1
      NEXT
    END SELECT
    RETURN

END

