;
; Narrator tester V1.01
; (c) 1993 by Jan Hagqvist
;
; V0.02  23-June-1993
; V0.03  24-June-1993
; V0.04  25-June-1993
; V1.00  26-June-1993
; V1.01  27-June-1993
;


  XREF _LVOOpenLibrary
  XREF _LVOCloseLibrary
  XREF _LVOCreateMsgPort
  XREF _LVODeleteMsgPort
  XREF _LVOCreateIORequest
  XREF _LVODeleteIORequest
  XREF _LVOOpenDevice
  XREF _LVOCloseDevice
  XREF _LVODoIO
  XREF _LVOOpenWindow
  XREF _LVOCloseWindow
  XREF _LVORefreshGList
  XREF _LVOActivateGadget
  XREF _LVOWaitPort
  XREF _LVOGT_GetIMsg
  XREF _LVOGT_ReplyIMsg
  XREF _LVOSendIO
  XREF _LVOTranslate
  XREF _LVOCreateGadgetA
  XREF _LVOFreeGadgets
  XREF _LVOGetVisualInfoA
  XREF _LVOOpenWorkBench
  XREF _LVOCreateContext
  XREF _LVOAddGList
  XREF _LVORemoveGList
  XREF _LVOGT_RefreshWindow
  XREF _LVOFreeVisualInfo
  XREF _LVOGT_SetGadgetAttrsA
  XREF _LVOFindTask
  XREF _LVOGetMsg
  XREF _LVOReplyMsg


BUTTON_KIND		equ 1
CYCLE_KIND		equ 7
SLIDER_KIND		equ 11
STRING_KIND		equ 12
PLACETEXT_LEFT		equ $1
PLACETEXT_RIGHT		equ $2
PLACETEXT_ABOVE		equ $4
PLACETEXT_BELOW		equ $8
PLACETEXT_IN		equ $10
NG_HIGHLABEL		equ $20
GT_Underscore		equ $80080040
GT_VisualInfo		equ $80080034
GTMX_Active		equ $8008000a
GTMX_Labels		equ $80080009
GTMX_Spacing		equ $8008003d
GTCY_Labels		equ $8008000e
GTCY_Active		equ $8008000f
GTST_MaxChars		equ $8008002e
GTSL_Min		equ $80080026
GTSL_Max		equ $80080027
GTSL_Level		equ $80080028
GTSL_MaxLevelLen	equ $80080029
GTSL_LevelFormat	equ $8008002a
GTSL_LevelPlace		equ $8008002b
GTSL_DispFunc		equ $8008002c
GA_Disabled		equ $8003000e
GA_Immediate		equ $80030015
GA_RelVerify		equ $80030016
TAG_DONE		equ $0

CMD_WRITE	equ 3
NDF_NEWIORB	equ 1

io_Command	equ 28
io_Length	equ 36
io_Data		equ 40
rate		equ 48
pitch		equ 50
mode		equ 52
sex		equ 54
ch_masks	equ 56
nm_masks	equ 60
volume		equ 62
flags		equ 69
F0enthusiasm	equ 70
F0perturb	equ 71
F1adj		equ 72
F2adj		equ 73
F3adj		equ 74
A1adj		equ 75
A2adj		equ 76
A3adj		equ 77
articulate	equ 78
centralize	equ 79
centphon	equ 80
AVbias		equ 84
AFbias		equ 85

IDCMP_MOUSEMOVE		equ $10
IDCMP_GADGETDOWN	equ $20
IDCMP_GADGETUP		equ $40
IDCMP_CLOSEWINDOW	equ $200
WFLG_SMART_REFRESH	equ $0
WFLG_DRAGBAR		equ $2
WFLG_DEPTHGADGET	equ $4
WFLG_CLOSEGADGET	equ $8
WFLG_ACTIVATE		equ $1000

GFLG_GADGHCOMP		equ $0000
GFLG_SELECTED		equ $0080
GACT_STRINGLEFT		equ $0000
GACT_RELVERIFY		equ $0001
GACT_TOGGLESELECT	equ $0100
GTYP_BOOLGADGET		equ $0001
GTYP_STRGADGET		equ $0004
JAM1			equ 0
WBENCHSCREEN		equ 1
NATURALF0		equ 0
ROBOTICF0		equ 1
MANUALF0		equ 2
MALE			equ 0
FEMALE			equ 1
pr_MsgPort		equ 92
pr_CLI			equ 172

NarTest
  move.l  4,a6			; Check if we're run from WB
  sub.l   a1,a1
  jsr     _LVOFindTask(a6)
  move.l  d0,a4
  tst.l   pr_CLI(a4)		; CLI or WB?
  bne.s   NoWorkbench
  lea     pr_MsgPort(a4),a0
  jsr     _LVOWaitPort(a6)	; Wait for message
  lea     pr_MsgPort(a4),a0
  jsr     _LVOGetMsg(a6)	; Get it
  move.l  d0,WorkbenchMsg	; Store it
NoWorkbench
  jsr     _LVOCreateMsgPort(a6)
  cmp.l   #0,d0
  beq     Quit
  move.l  d0,NarratorPort
  move.l  d0,a0
  moveq.l #88,d0
  jsr     _LVOCreateIORequest(a6)
  cmp.l   #0,d0
  beq     Quit
  move.l  d0,NarratorRequest
  move.l  d0,a1
  move.b  #NDF_NEWIORB,flags(a1)	; use the new fields
  lea     NarratorName(pc),a0
  moveq.l #0,d0
  move.l  d0,d1
  jsr     _LVOOpenDevice(a6)
  cmp.l   #0,d0
  bne     Quit
  lea     IntuitionName(pc),a1
  moveq.l #37,d0
  jsr     _LVOOpenLibrary(a6)
  cmp.l   #0,d0
  beq     Quit
  move.l  d0,IntuitionBase
  lea     TranslatorName(pc),a1
  moveq.l #0,d0
  jsr     _LVOOpenLibrary(a6)
  cmp.l   #0,d0
  beq     Quit
  move.l  d0,TranslatorBase
  lea     GadToolsName(pc),a1
  moveq.l #0,d0
  jsr     _LVOOpenLibrary(a6)
  cmp.l   #0,d0
  beq     Quit
  move.l  d0,GadToolsBase

  move.l  IntuitionBase(pc),a6
  lea     NewWindow(pc),a0
  jsr     _LVOOpenWindow(a6)
  cmp.l   #0,d0
  beq     Quit
  move.l  d0,NarWindow
  move.l  d0,a0
  move.l  50(a0),NarRastPort
  move.l  62(a0),FirstGadget
  move.l  86(a0),NarUserPort

  move.l  IntuitionBase(pc),a6
  jsr     _LVOOpenWorkBench(a6)
  move.l  d0,WBScreen
  move.l  #0,GList
  move.l  GadToolsBase(pc),a6
  lea     GList(pc),a0
  jsr     _LVOCreateContext(a6)
  move.l  d0,LastGadget
  move.l  WBScreen(pc),a0
  sub.l   a1,a1
  jsr     _LVOGetVisualInfoA(a6)
  move.l  d0,VisualInfo

  move.l  NarratorRequest(pc),a1
  move.w  mode(a1),InitialMode
  move.w  sex(a1),InitialSex
  move.w  volume(a1),InitialVolume
  move.w  rate(a1),InitialRate
  move.w  pitch(a1),InitialPitch
  move.b  centralize(a1),InitialCentralize
  move.b  articulate(a1),InitialArticulate
  move.l  NarratorRequest(pc),a5

  move.l  VisualInfo(pc),TextVisual		; Create Text-gadget
  lea     TextGadget(pc),a1
  lea     TextGadgetTags(pc),a2
  bsr     CreateString
  move.l  d0,TextBase
  move.l  (a0),TextBuffer

  move.l  VisualInfo(pc),TextVisual2		; Create Phonetic-gadget
  lea     TextGadget2(pc),a1
  lea     TextGadget2Tags(pc),a2
  bsr     CreateString
  move.l  d0,TextBase2
  move.l  (a0),TextBuffer2

  move.l  VisualInfo(pc),ModeVisual		; Create Mode-gadget
  lea     ModeGadget(pc),a1
  lea     ModeGadgetTags(pc),a2
  bsr     CreateCycle
  move.l  d0,ModeBase

  move.l  VisualInfo(pc),SexVisual		; Create Sex-gadget
  lea     SexGadget(pc),a1
  lea     SexGadgetTags(pc),a2
  bsr     CreateCycle
  move.l  d0,SexBase

  move.l  VisualInfo(pc),VolumeVisual		; Create Volume-gadget
  lea     VolumeGadget(pc),a1
  lea     VolumeGadgetTags(pc),a2
  bsr     CreateSlider
  move.l  d0,VolumeBase

  move.l  VisualInfo(pc),RateVisual		; Create Rate-gadget
  lea     RateGadget(pc),a1
  lea     RateGadgetTags(pc),a2
  bsr     CreateSlider
  move.l  d0,RateBase

  move.l  VisualInfo(pc),PitchVisual		; Create Pitch-gadget
  lea     PitchGadget(pc),a1
  lea     PitchGadgetTags(pc),a2
  bsr     CreateSlider
  move.l  d0,PitchBase

  move.b  F0enthusiasm(a5),InitialF0
  move.l  VisualInfo(pc),F0EnthusiasmVisual	; Create F0Enthusiasm-gadget
  lea     F0EnthusiasmGadget(pc),a1
  lea     F0GadgetTags(pc),a2
  bsr     CreateSlider
  move.l  d0,F0EnthusiasmBase

  move.b  F0perturb(a5),InitialF0
  move.l  VisualInfo(pc),F0PerturbVisual	; Create F0Perturb-gadget
  lea     F0PerturbGadget(pc),a1
  lea     F0GadgetTags(pc),a2
  bsr     CreateSlider
  move.l  d0,F0PerturbBase

  move.b  F1adj(a5),InitialF123Adj
  move.l  VisualInfo(pc),F1AdjVisual		; Create F1Adj-gadget
  lea     F1AdjGadget(pc),a1
  lea     F123AdjGadgetTags(pc),a2
  bsr     CreateSlider
  move.l  d0,F1AdjBase

  move.b  F2adj(a5),InitialF123Adj
  move.l  VisualInfo(pc),F2AdjVisual		; Create F2Adj-gadget
  lea     F2AdjGadget(pc),a1
  lea     F123AdjGadgetTags(pc),a2
  bsr     CreateSlider
  move.l  d0,F2AdjBase

  move.b  F3adj(a5),InitialF123Adj
  move.l  VisualInfo(pc),F3AdjVisual		; Create F3Adj-gadget
  lea     F3AdjGadget(pc),a1
  lea     F123AdjGadgetTags(pc),a2
  bsr     CreateSlider
  move.l  d0,F3AdjBase

  move.b  A1adj(a5),InitialA123Adj
  move.l  VisualInfo(pc),A1AdjVisual		; Create A1Adj-gadget
  lea     A1AdjGadget(pc),a1
  lea     A123AdjGadgetTags(pc),a2
  bsr     CreateSlider
  move.l  d0,A1AdjBase

  move.b  A2adj(a5),InitialA123Adj
  move.l  VisualInfo(pc),A2AdjVisual		; Create A2Adj-gadget
  lea     A2AdjGadget(pc),a1
  lea     A123AdjGadgetTags(pc),a2
  bsr     CreateSlider
  move.l  d0,A2AdjBase

  move.b  A1adj(a5),InitialA123Adj
  move.l  VisualInfo(pc),A3AdjVisual		; Create A3Adj-gadget
  lea     A3AdjGadget(pc),a1
  lea     A123AdjGadgetTags(pc),a2
  bsr     CreateSlider
  move.l  d0,A3AdjBase

  move.b  AVbias(a5),InitialA123Adj
  move.l  VisualInfo(pc),AVBiasVisual		; Create AVBias-gadget
  lea     AVBiasGadget(pc),a1
  lea     A123AdjGadgetTags(pc),a2
  bsr     CreateSlider
  move.l  d0,AVBiasBase

  move.b  AFbias(a5),InitialA123Adj
  move.l  VisualInfo(pc),AFBiasVisual		; Create AFBias-gadget
  lea     AFBiasGadget(pc),a1
  lea     A123AdjGadgetTags(pc),a2
  bsr     CreateSlider
  move.l  d0,AFBiasBase

  move.l  VisualInfo(pc),CentralizeVisual	; Create Centralize-gadget
  lea     CentralizeGadget(pc),a1
  lea     CentralizeGadgetTags(pc),a2
  bsr.s   CreateSlider
  move.l  d0,CentralizeBase

  move.l  VisualInfo(pc),CentphonVisual		; Create Centphon-gadget
  lea     CentphonGadget(pc),a1
  lea     CentphonGadgetTags(pc),a2
  bsr.s   CreateCycle
  move.l  d0,CentphonBase

  move.l  VisualInfo(pc),ArticulateVisual	; Create Articulate-gadget
  lea     ArticulateGadget(pc),a1
  lea     ArticulateGadgetTags(pc),a2
  bsr.s   CreateSlider
  move.l  d0,ArticulateBase

  move.l  VisualInfo(pc),ResetVisual		; Create Reset-gadget
  moveq.l #BUTTON_KIND,d0
  move.l  LastGadget(pc),a0
  lea     ResetGadget(pc),a1
  sub.l   a2,a2
  jsr     _LVOCreateGadgetA(a6)
  move.l  d0,LastGadget
  move.l  d0,ResetBase
  bra.s   GadgetsCreated

CreateSlider
  moveq.l #SLIDER_KIND,d0
  bsr.s   CreateGadget
  rts

CreateCycle
  moveq.l #CYCLE_KIND,d0
  bsr.s   CreateGadget
  rts

CreateString
  moveq.l #STRING_KIND,d0
  bsr.s   CreateGadget
  move.l  d0,a0
  move.l  34(a0),a0
  rts

CreateGadget
  move.l  LastGadget(pc),a0
  jsr     _LVOCreateGadgetA(a6)
  move.l  d0,LastGadget
  rts

GadgetsCreated
  move.l  IntuitionBase(pc),a6
  move.l  NarWindow(pc),a0
  move.l  GList(pc),a1
  move.l  #-1,d0
  move.l  #-1,d1
  sub.l   a2,a2
  jsr     _LVOAddGList(a6)
  move.l  TextBase(pc),a0
  move.l  NarWindow(pc),a1
  sub.l   a2,a2
  jsr     _LVOActivateGadget(a6)
  bsr     RefreshGadgets
  move.l  GadToolsBase(pc),a6
  move.l  NarWindow(pc),a0
  sub.l   a1,a1
  jsr     _LVOGT_RefreshWindow(a6)

  move.l  4,a6
  move.l  NarratorRequest(pc),a1
  move.w  #CMD_WRITE,io_Command(a1)
  lea     WelcomeText(pc),a0
  move.l  a0,io_Data(a1)
  bsr     StrLen
  move.l  d0,io_Length(a1)
  lea     AudioChan(pc),a0
  move.l  a0,ch_masks(a1)
  move.w  #4,nm_masks(a1)
  move.w  #140,rate(a1)
  jsr     _LVODoIO(a6)

SetValues
  move.l  NarratorRequest(pc),a1
  move.l  TextBuffer2(pc),a0
  move.l  a0,io_Data(a1)
  lea     Values,a0
SetValues2
  move.b  (a1)+,(a0)+
  cmp.l   #ValuesEnd,a0
  bne.s   SetValues2

WaitForMessage
  move.l  4,a6
  move.l  NarUserPort(pc),a0
  jsr     _LVOWaitPort(a6)	; Wait for a message
WaitForMessage2
  move.l  GadToolsBase,a6
  move.l  NarUserPort(pc),a0	; Got it
  jsr     _LVOGT_GetIMsg(a6)
  move.l  d0,a1
  cmp.l   #0,d0
  beq.s   WaitForMessage	; What? No Message?!
WaitForMessage2.1
  move.l  20(a1),Class
  move.w  24(a1),Code
  move.w  26(a1),Qualifier
  move.l  28(a1),IAddress
  jsr     _LVOGT_ReplyIMsg(a6)
WaitForMessage3
  cmp.l   #IDCMP_CLOSEWINDOW,Class
  bne.s   WaitForMessage4
  bra.s   Quit
WaitForMessage4
  cmp.l   #IDCMP_GADGETUP,Class
  bne.s   WaitForMessage5
  move.l  IAddress(pc),a4
  move.l  40(a4),a3
  move.l  NarratorRequest(pc),a1
  jsr     (a3)
  bra     WaitForMessage2
WaitForMessage5
  bra     WaitForMessage2


Quit
  move.l  IntuitionBase(pc),a6
  move.l  NarWindow(pc),a0
  cmp.l   #0,a0
  beq.s   Quit9
  move.l  GList(pc),a1
  cmp.l   #0,a1
  beq.s   Quit9
  move.l  #-1,d0
  jsr     _LVORemoveGList(a6)
Quit9
  move.l  GadToolsBase(pc),a6
  cmp.l   #0,a6
  beq.s   Quit8
  move.l  GList(pc),a0
  jsr     _LVOFreeGadgets(a6)
  move.l  VisualInfo(pc),a0
  jsr     _LVOFreeVisualInfo(a6)
Quit8
  move.l  IntuitionBase(pc),a6
  move.l  NarWindow(pc),a0
  cmp.l   #0,a0
  beq.s   Quit5
  jsr     _LVOCloseWindow(a6)
Quit5
  move.l  4,a6
  move.l  GadToolsBase(pc),a1
  cmp.l   #0,a1
  beq.s   Quit7
  jsr     _LVOCloseLibrary(a6)
Quit7
  move.l  TranslatorBase(pc),a1
  cmp.l   #0,a1
  beq.s   Quit6
  jsr     _LVOCloseLibrary(a6)
Quit6
  move.l  IntuitionBase(pc),a1
  cmp.l   #0,a1
  beq.s   Quit4
  jsr     _LVOCloseLibrary(a6)
Quit4
  move.l  NarratorRequest(pc),a1
  cmp.l   #0,a1
  beq.s   Quit2
  jsr     _LVOCloseDevice(a6)
  move.l  NarratorRequest(pc),a0
  jsr     _LVODeleteIORequest(a6)
Quit2
  move.l  NarratorPort(pc),a0
  cmp.l   #0,a0
  beq.s   Quit3
  jsr     _LVODeleteMsgPort(a6)
Quit3
  move.l  WorkbenchMsg(pc),a1
  cmp.l   #0,a1
  bne.s   WBQuit			; We were started from WB
  moveq.l #0,d0
  rts					; Exit to CLI

WBQuit
  move.l  4,a6
  jsr     _LVOReplyMsg(a6)
  rts					; Exit to WB

RefreshGadgets
  movem.l a0-a6/d0-d7,-(sp)
  move.l  IntuitionBase(pc),a6
  move.l  GList(pc),a0
  move.l  NarWindow(pc),a1
  sub.l   a2,a2
  move.l  #-1,d0
  jsr     _LVORefreshGList(a6)
  movem.l (sp)+,a0-a6/d0-d7
  rts

ConvertString
  move.l  TextBuffer(pc),a0
  bsr     UpperCase
  bsr.s   ClearBuffer2
  move.l  TranslatorBase(pc),a6
  move.l  TextBuffer(pc),a0
  move.l  TextBuffer2(pc),a1
  move.l  #200,d0
  move.l  #800,d1
  jsr     _LVOTranslate(a6)
  bsr     RefreshGadgets
  bsr     TextActivate
  bsr.s   Say
  rts

ConvertString2
  move.l  TextBuffer2(pc),a0
  bsr     UpperCase
  bsr     RefreshGadgets
  move.l  IntuitionBase(pc),a6
  move.l  TextBase2(pc),a0
  move.l  NarWindow(pc),a1
  sub.l   a2,a2
  jsr     _LVOActivateGadget(a6)
  bsr.s   Say
  rts

Say
  move.l  4,a6
  move.l  NarratorRequest(pc),a1
  move.w  #CMD_WRITE,io_Command(a1)
  move.l  TextBuffer2(pc),a0
  bsr     StrLen
  move.l  d0,io_Length(a1)
  jsr     _LVODoIO(a6)
  rts

ClearBuffer2
  move.l  TextBuffer2(pc),a0
  moveq.l #0,d0
ClearBuffer2.2
  move.b  #0,(a0)+
  addq.l  #1,d0
  cmp.w   #800,d0
  bne.s   ClearBuffer2.2
  rts

SetMode
  move.w  Code(pc),mode(a1)
  bsr     TextActivate
  rts

SetSex
  move.w  Code(pc),sex(a1)
  bsr     TextActivate
  rts

SetVolume
  move.w  Code(pc),volume(a1)
  bsr     TextActivate
  rts

SetRate
  move.w  Code(pc),rate(a1)
  bsr     TextActivate
  rts

SetPitch
  move.w  Code(pc),pitch(a1)
  bsr     TextActivate
  rts

SetF0Enthusiasm
  move.w  Code(pc),d0
  move.b  d0,F0enthusiasm(a1)
  bsr     TextActivate
  rts

SetF0Perturb
  move.w  Code(pc),d0
  move.b  d0,F0perturb(a1)
  bsr     TextActivate
  rts

SetF1Adj
  move.w  Code(pc),d0
  move.b  d0,F1adj(a1)
  bsr     TextActivate
  rts

SetF2Adj
  move.w  Code(pc),d0
  move.b  d0,F2adj(a1)
  bsr     TextActivate
  rts

SetF3Adj
  move.w  Code(pc),d0
  move.b  d0,F3adj(a1)
  bsr     TextActivate
  rts

SetA1Adj
  move.w  Code(pc),d0
  move.b  d0,A1adj(a1)
  bsr     TextActivate
  rts

SetA2Adj
  move.w  Code(pc),d0
  move.b  d0,A2adj(a1)
  bsr     TextActivate
  rts

SetA3Adj
  move.w  Code(pc),d0
  move.b  d0,A3adj(a1)
  bsr     TextActivate
  rts

SetAVBias
  move.w  Code(pc),d0
  move.b  d0,AVbias(a1)
  bsr     TextActivate
  rts

SetAFBias
  move.w  Code(pc),d0
  move.b  d0,AFbias(a1)
  bsr     TextActivate
  rts

SetCentralize
  move.w  Code(pc),d0
  move.b  d0,centralize(a1)
  bsr     TextActivate
  rts

SetCentphon
  lea     CentphonNone(pc),a0
  moveq.l #0,d0
  move.w  Code(pc),d0
  asl.l   #2,d0
  add.l   d0,a0
  move.l  a0,centphon(a1)
  bsr     TextActivate
  rts

SetArticulate
  move.w  Code(pc),d0
  move.b  d0,articulate(a1)
  bsr     TextActivate
  rts

ResetValues
  move.l  a1,a5
  lea     Values,a0
ResetValues2
  move.b  (a0)+,(a1)+
  cmp.l   #ValuesEnd,a0
  bne.s   ResetValues2
  move.l  GadToolsBase(pc),a6
  move.l  ModeBase(pc),a0
  move.w  mode(a5),CycleValueW
  bsr     ResetCycle
  move.l  SexBase(pc),a0
  move.w  sex(a5),CycleValueW
  bsr     ResetCycle
  move.l  CentphonBase(pc),a0
  move.w  #0,CycleValueW
  bsr     ResetCycle
  move.l  A1AdjBase(pc),a0
  move.b  A1adj(a5),SliderValueB
  bsr     ResetSlider
  move.l  A2AdjBase(pc),a0
  move.b  A2adj(a5),SliderValueB
  bsr     ResetSlider
  move.l  A3AdjBase(pc),a0
  move.b  A3adj(a5),SliderValueB
  bsr     ResetSlider
  move.l  F1AdjBase(pc),a0
  move.b  F1adj(a5),SliderValueB
  bsr     ResetSlider
  move.l  F2AdjBase(pc),a0
  move.b  F2adj(a5),SliderValueB
  bsr     ResetSlider
  move.l  F3AdjBase(pc),a0
  move.b  F3adj(a5),SliderValueB
  bsr     ResetSlider
  move.l  F0EnthusiasmBase(pc),a0
  move.b  F0enthusiasm(a5),SliderValueB
  bsr.s   ResetSlider
  move.l  F0PerturbBase(pc),a0
  move.b  F0perturb(a5),SliderValueB
  bsr.s   ResetSlider
  move.l  PitchBase(pc),a0
  move.w  pitch(a5),SliderValueW
  bsr.s   ResetSlider
  move.l  RateBase(pc),a0
  move.w  rate(a5),SliderValueW
  bsr.s   ResetSlider
  move.l  AVBiasBase(pc),a0
  move.b  AVbias(a5),SliderValueB
  bsr.s   ResetSlider
  move.l  AFBiasBase(pc),a0
  move.b  AFbias(a5),SliderValueB
  bsr.s   ResetSlider
  move.l  CentralizeBase(pc),a0
  move.b  centralize(a5),SliderValueB
  bsr.s   ResetSlider
  move.l  ArticulateBase(pc),a0
  move.b  articulate(a5),SliderValueB
  bsr.s   ResetSlider
  bsr     TextActivate
  rts

ResetCycle
  move.l  NarWindow(pc),a1
  sub.l   a2,a2
  lea     ResetCycleTags(pc),a3
  jsr     _LVOGT_SetGadgetAttrsA(a6)
  rts

ResetSlider
  move.l  NarWindow(pc),a1
  sub.l   a2,a2
  lea     ResetSliderTags(pc),a3
  jsr     _LVOGT_SetGadgetAttrsA(a6)
  move.w  #0,SliderValueW
  rts

TextActivate
  move.l  IntuitionBase(pc),a6
  move.l  TextBase(pc),a0
  move.l  NarWindow(pc),a1
  sub.l   a2,a2
  jsr     _LVOActivateGadget(a6)
  rts

StrLen		; in: a0=string, out: d0=length of the string
  movem.l a0,-(sp)
  moveq.l #0,d0
StrLen2
  cmp.b   #0,(a0)+
  beq.s   StrLen3
  addq.l  #1,d0
  bra.s   StrLen2
StrLen3
  movem.l (sp)+,a0
  rts

UpperCase		; in: a0=string
  movem.l a0,-(sp)
UpperCase1
  cmp.b   #'a',(a0)
  bmi.s   UpperCase2
  cmp.b   #'z'+1,(a0)
  bpl.s   UpperCase2
  sub.b   #32,(a0)
UpperCase2
  cmp.b   #0,(a0)+
  bne.s   UpperCase1
  movem.l (sp)+,a0
  rts

IntuitionBase		dc.l 0
TranslatorBase		dc.l 0
GadToolsBase		dc.l 0
WorkbenchMsg		dc.l 0
NarWindow		dc.l 0
NarUserPort		dc.l 0
NarRastPort		dc.l 0
NarratorPort		dc.l 0
NarratorRequest		dc.l 0
Code			dc.l 0
Class			dc.l 0
IAddress		dc.l 0
Qualifier		dc.l 0
FirstGadget		dc.l 0
LastGadget		dc.l 0
VisualInfo		dc.l 0
WBScreen		dc.l 0
GList			dc.l 0
TextBuffer		dc.l 0
TextBuffer2		dc.l 0

TextBase		dc.l 0
TextBase2		dc.l 0
ModeBase		dc.l 0
SexBase			dc.l 0
VolumeBase		dc.l 0
RateBase		dc.l 0
PitchBase		dc.l 0
F0EnthusiasmBase	dc.l 0
F0PerturbBase		dc.l 0
F1AdjBase		dc.l 0
F2AdjBase		dc.l 0
F3AdjBase		dc.l 0
A1AdjBase		dc.l 0
A2AdjBase		dc.l 0
A3AdjBase		dc.l 0
AVBiasBase		dc.l 0
AFBiasBase		dc.l 0
CentralizeBase		dc.l 0
CentphonBase		dc.l 0
ArticulateBase		dc.l 0
ResetBase		dc.l 0

NewWindow		dc.w 30,30,420,165
			dc.b 0,1
			dc.l IDCMP_GADGETUP!IDCMP_CLOSEWINDOW!IDCMP_MOUSEMOVE!IDCMP_GADGETDOWN
			dc.l WFLG_DRAGBAR!WFLG_DEPTHGADGET!WFLG_CLOSEGADGET!WFLG_SMART_REFRESH!WFLG_ACTIVATE
			dc.l 0,0,NarWindowName,0,0
			dc.w 420,165,420,165,WBENCHSCREEN

IntuitionName		dc.b 'intuition.library',0
TranslatorName		dc.b 'translator.library',0
GadToolsName		dc.b 'gadtools.library',0
NarratorName		dc.b 'narrator.device',0
Font0Name		dc.b 'topaz.font',0

VolumeString		dc.b '%02ld',0
RateString		dc.b '%03ldwpm',0
PitchString		dc.b '%03ldHz',0
TriNumberString		dc.b '%03ld',0
SignedBiNumberString	dc.b '%3ld',0
VersionString		dc.b '$VER: '
NarWindowName		dc.b 'Narrator tester V1.01  27-June-1993',0
TextName		dc.b 'English: ',0
TextName2		dc.b 'Phonetic:',0
ModeName		dc.b 'Mode',0
SexName			dc.b 'Sex',0
VolumeName		dc.b 'Volume',0
RateName		dc.b 'Rate ',0
PitchName		dc.b 'Pitch',0
F0EnthusiasmName	dc.b 'F0enthus ',0
F0PerturbName		dc.b 'F0perturb',0
F1AdjName		dc.b 'F1adj',0
F2AdjName		dc.b 'F2adj',0
F3AdjName		dc.b 'F3adj',0
A1AdjName		dc.b 'A1adj',0
A2AdjName		dc.b 'A2adj',0
A3AdjName		dc.b 'A3adj',0
AVBiasName		dc.b 'AVBias',0
AFBiasName		dc.b 'AFBias',0
CentralizeName		dc.b 'Centralize',0
CentphonName		dc.b 'Centphon',0
ArticulateName		dc.b 'Articulate',0
ResetName		dc.b 'Reset Values',0
AudioChan		dc.b 3,5,10,12
WelcomeText		dc.b 'WEH4LKAHM TUW NAE2RAETER TEH4STER. '
			dc.b 'DHIHS IHZ VER4SHUN WAHN POYNT '
			dc.b 'ZIYROW WAHN.',0

ModeNatural		dc.b 'Natural',0
ModeRobotic		dc.b 'Robotic',0
ModeManual		dc.b 'Manual',0
SexMale			dc.b 'Male',0
SexFemale		dc.b 'Female',0

 ds.l 0

CentphonNone		dc.b 0,0,0,0
CentphonIY		dc.b 'IY',0,0
CentphonIH		dc.b 'IH',0,0
CentphonEH		dc.b 'EH',0,0
CentphonAE		dc.b 'AE',0,0
CentphonAA		dc.b 'AA',0,0
CentphonAH		dc.b 'AH',0,0
CentphonAO		dc.b 'AO',0,0
CentphonOW		dc.b 'OW',0,0
CentphonUH		dc.b 'UH',0,0
CentphonER		dc.b 'ER',0,0
CentphonUW		dc.b 'UW',0,0

Font0
  dc.l Font0Name
  dc.w 8
  dc.b 0,1

TextGadget			; GADGETUP
  dc.w 85,15,320,12
  dc.l TextName,Font0
  dc.w 1000
  dc.l PLACETEXT_LEFT!NG_HIGHLABEL
TextVisual
  dc.l 0,ConvertString

TextGadgetTags
  dc.l GTST_MaxChars,200
  dc.l TAG_DONE

TextGadget2			; GADGETUP
  dc.w 85,30,320,12
  dc.l TextName2,Font0
  dc.w 1001
  dc.l PLACETEXT_LEFT!NG_HIGHLABEL
TextVisual2
  dc.l 0,ConvertString2

TextGadget2Tags
  dc.l GTST_MaxChars,800
  dc.l TAG_DONE

ModeGadget
  dc.w 46,45,88,12
  dc.l ModeName,Font0
  dc.w 1002
  dc.l PLACETEXT_LEFT!NG_HIGHLABEL
ModeVisual
  dc.l 0,SetMode

ModeGadgetTags
  dc.l GTCY_Labels,ModeLabels
  dc.l GTCY_Active
  dc.w 0
InitialMode
  dc.w 0
  dc.l TAG_DONE

ModeLabels
  dc.l ModeNatural,ModeRobotic,ModeManual,0

SexGadget
  dc.w 170,45,80,12
  dc.l SexName,Font0
  dc.w 1003
  dc.l PLACETEXT_LEFT!NG_HIGHLABEL
SexVisual
  dc.l 0,SetSex

SexGadgetTags
  dc.l GTCY_Labels,SexLabels
  dc.l GTCY_Active
  dc.w 0
InitialSex
  dc.w 0
  dc.l TAG_DONE

SexLabels
  dc.l SexMale,SexFemale,0

VolumeGadget
  dc.w 308,45,84,12
  dc.l VolumeName,Font0
  dc.w 1004
  dc.l PLACETEXT_LEFT!NG_HIGHLABEL
VolumeVisual
  dc.l 0,SetVolume

VolumeGadgetTags
  dc.l GTSL_Min,0
  dc.l GTSL_Max,64
  dc.l GTSL_MaxLevelLen,2
  dc.l GTSL_LevelPlace,PLACETEXT_RIGHT
  dc.l GTSL_LevelFormat,VolumeString
  dc.l GTSL_Level
  dc.w 0
InitialVolume
  dc.w 0
  dc.l GA_RelVerify,1
  dc.l TAG_DONE

RateGadget
  dc.w 264,105,96,12
  dc.l RateName,Font0
  dc.w 1005
  dc.l PLACETEXT_LEFT!NG_HIGHLABEL
RateVisual
  dc.l 0,SetRate

RateGadgetTags
  dc.l GTSL_Min,40
  dc.l GTSL_Max,400
  dc.l GTSL_MaxLevelLen,6
  dc.l GTSL_LevelPlace,PLACETEXT_RIGHT
  dc.l GTSL_LevelFormat,RateString
  dc.l GTSL_Level
  dc.w 0
InitialRate
  dc.w 0
  dc.l GA_RelVerify,1
  dc.l TAG_DONE

PitchGadget
  dc.w 264,90,96,12
  dc.l PitchName,Font0
  dc.w 1006
  dc.l PLACETEXT_LEFT!NG_HIGHLABEL
PitchVisual
  dc.l 0,SetPitch

PitchGadgetTags
  dc.l GTSL_Min,65
  dc.l GTSL_Max,320
  dc.l GTSL_MaxLevelLen,5
  dc.l GTSL_LevelPlace,PLACETEXT_RIGHT
  dc.l GTSL_LevelFormat,PitchString
  dc.l GTSL_Level
  dc.w 0
InitialPitch
  dc.w 0
  dc.l GA_RelVerify,1
  dc.l TAG_DONE

F0EnthusiasmGadget
  dc.w 85,90,90,12
  dc.l F0EnthusiasmName,Font0
  dc.w 1007
  dc.l PLACETEXT_LEFT!NG_HIGHLABEL
F0EnthusiasmVisual
  dc.l 0,SetF0Enthusiasm

F0GadgetTags
  dc.l GTSL_Min,0
  dc.l GTSL_Max,255
  dc.l GTSL_MaxLevelLen,3
  dc.l GTSL_LevelPlace,PLACETEXT_RIGHT
  dc.l GTSL_LevelFormat,TriNumberString
  dc.l GTSL_Level
  dc.b 0,0,0
InitialF0
  dc.b 0
  dc.l GA_RelVerify,1
  dc.l TAG_DONE

F0PerturbGadget
  dc.w 85,105,90,12
  dc.l F0PerturbName,Font0
  dc.w 1008
  dc.l PLACETEXT_LEFT!NG_HIGHLABEL
F0PerturbVisual
  dc.l 0,SetF0Perturb

F1AdjGadget
  dc.w 54,75,50,12
  dc.l F1AdjName,Font0
  dc.w 1009
  dc.l PLACETEXT_LEFT!NG_HIGHLABEL
F1AdjVisual
  dc.l 0,SetF1Adj

F123AdjGadgetTags
  dc.l GTSL_Min,-20
  dc.l GTSL_Max,20
  dc.l GTSL_MaxLevelLen,3
  dc.l GTSL_LevelPlace,PLACETEXT_RIGHT
  dc.l GTSL_LevelFormat,SignedBiNumberString
  dc.l GTSL_Level
  dc.b 0,0,0
InitialF123Adj
  dc.b 0
  dc.l GA_RelVerify,1
  dc.l TAG_DONE

F2AdjGadget
  dc.w 190,75,50,12
  dc.l F2AdjName,Font0
  dc.w 1010
  dc.l PLACETEXT_LEFT!NG_HIGHLABEL
F2AdjVisual
  dc.l 0,SetF2Adj

F3AdjGadget
  dc.w 326,75,50,12
  dc.l F3AdjName,Font0
  dc.w 1011
  dc.l PLACETEXT_LEFT!NG_HIGHLABEL
F3AdjVisual
  dc.l 0,SetF3Adj

A1AdjGadget
  dc.w 54,60,50,12
  dc.l A1AdjName,Font0
  dc.w 1012
  dc.l PLACETEXT_LEFT!NG_HIGHLABEL
A1AdjVisual
  dc.l 0,SetA1Adj

A123AdjGadgetTags
  dc.l GTSL_Min,-32
  dc.l GTSL_Max,31
  dc.l GTSL_MaxLevelLen,3
  dc.l GTSL_LevelPlace,PLACETEXT_RIGHT
  dc.l GTSL_LevelFormat,SignedBiNumberString
  dc.l GTSL_Level
  dc.b 0,0,0
InitialA123Adj
  dc.b 0
  dc.l GA_RelVerify,1
  dc.l TAG_DONE

A2AdjGadget
  dc.w 190,60,50,12
  dc.l A2AdjName,Font0
  dc.w 1013
  dc.l PLACETEXT_LEFT!NG_HIGHLABEL
A2AdjVisual
  dc.l 0,SetA2Adj

A3AdjGadget
  dc.w 326,60,50,12
  dc.l A3AdjName,Font0
  dc.w 1014
  dc.l PLACETEXT_LEFT!NG_HIGHLABEL
A3AdjVisual
  dc.l 0,SetA3Adj

AVBiasGadget
  dc.w 85,120,90,12
  dc.l AVBiasName,Font0
  dc.w 1015
  dc.l PLACETEXT_LEFT!NG_HIGHLABEL
AVBiasVisual
  dc.l 0,SetAVBias

AFBiasGadget
  dc.w 264,120,96,12
  dc.l AFBiasName,Font0
  dc.w 1016
  dc.l PLACETEXT_LEFT!NG_HIGHLABEL
AFBiasVisual
  dc.l 0,SetAFBias

CentralizeGadget
  dc.w 264,135,96,12
  dc.l CentralizeName,Font0
  dc.w 1017
  dc.l PLACETEXT_LEFT!NG_HIGHLABEL
CentralizeVisual
  dc.l 0,SetCentralize

CentralizeGadgetTags
  dc.l GTSL_Min,0
  dc.l GTSL_Max,100
  dc.l GTSL_MaxLevelLen,3
  dc.l GTSL_LevelPlace,PLACETEXT_RIGHT
  dc.l GTSL_LevelFormat,TriNumberString
  dc.l GTSL_Level
  dc.b 0,0,0
InitialCentralize
  dc.b 0
  dc.l GA_RelVerify,1
  dc.l TAG_DONE

CentphonGadget
  dc.w 85,135,90,12
  dc.l CentphonName,Font0
  dc.w 1018
  dc.l PLACETEXT_LEFT!NG_HIGHLABEL
CentphonVisual
  dc.l 0,SetCentphon

CentphonGadgetTags
  dc.l GTCY_Labels,CentphonLabels
  dc.l TAG_DONE

CentphonLabels
  dc.l CentphonNone,CentphonIY,CentphonIH,CentphonEH,CentphonAE
  dc.l CentphonAA,CentphonAH,CentphonAO,CentphonOW,CentphonUH
  dc.l CentphonER,CentphonUW,0

ArticulateGadget
  dc.w 264,150,96,12
  dc.l ArticulateName,Font0
  dc.w 1019
  dc.l PLACETEXT_LEFT!NG_HIGHLABEL
ArticulateVisual
  dc.l 0,SetArticulate

ArticulateGadgetTags
  dc.l GTSL_Min,0
  dc.l GTSL_Max,255
  dc.l GTSL_MaxLevelLen,3
  dc.l GTSL_LevelPlace,PLACETEXT_RIGHT
  dc.l GTSL_LevelFormat,TriNumberString
  dc.l GTSL_Level
  dc.b 0,0,0
InitialArticulate
  dc.b 0
  dc.l GA_RelVerify,1
  dc.l TAG_DONE

ResetGadget
  dc.w 14,150,160,12
  dc.l ResetName,Font0
  dc.w 1020
  dc.l PLACETEXT_IN
ResetVisual
  dc.l 0,ResetValues

ResetCycleTags
  dc.l GTCY_Active
  dc.w 0
CycleValueW
  dc.w 0
  dc.l TAG_DONE

ResetSliderTags
  dc.l GTSL_Level
  dc.w 0
SliderValueW
  dc.b 0
SliderValueB
  dc.b 0
  dc.l TAG_DONE

  SECTION 2,BSS

Values		ds.b 88
ValuesEnd

  END
