home *** CD-ROM | disk | FTP | other *** search
/ Computer Club Elmshorn Atari PD / CCE_PD.iso / pc / 0600 / CCE_0606.ZIP / CCE_0606.PD / SPEAK / SAM.LST next >
File List  |  1989-12-16  |  4KB  |  202 lines

  1. ' ************************************
  2. ' *                                  *
  3. ' *   SPRACHAUSGABE MIT ST-SPEECH    *
  4. ' *                                  *
  5. ' *   (C) 1988 MARTIN MALICH         *
  6. ' *            ECKHARD GRAH          *
  7. ' *                                  *
  8. ' ************************************
  9. '
  10. Procedure Init_say
  11.   Local Relo_table%,Relo_end%,Relo_adr%,Say_start%,R%,A%
  12.   '
  13.   Dim Say!(40000*8)               ! Platz für speaktex.tos
  14.   Dim Puffer!(1000*8)             ! Sprachpuffer
  15.   '
  16.   Puffer%=Lpeek(Arrptr(Puffer!()))+500
  17.   Say%=Varptr(Say!(0))
  18.   '
  19.   If Exist("speaktex.tos")
  20.     Bload "speaktex.tos",Say%
  21.   Else
  22.     Alert 3,"SPEAKTEX.TOS nicht vorhanden",1," Abbruch ",Dummy%
  23.     End
  24.   Endif
  25.   '
  26.   Relo_table%=Say%+28256
  27.   Relo_end%=Say%+28359
  28.   Relo_adr%=Say%+80
  29.   Say_start%=Say%+28
  30.   '
  31.   For R%=Relo_table% To Relo_end%
  32.     A%=Peek(R%)
  33.     If A%=1
  34.       Add Relo_adr%,254
  35.     Else
  36.       Add Relo_adr%,A%
  37.       Lpoke Relo_adr%,Lpeek(Relo_adr%)+Say_start%
  38.     Endif
  39.   Next R%
  40.   '
  41.   Add Say%,&H52
  42.   '
  43. Return
  44. '
  45. '
  46. Procedure Exit_say
  47.   '
  48.   @Wait_say
  49.   Erase Say!()
  50.   Erase Puffer!()
  51.   '
  52. Return
  53. '
  54. '
  55. Procedure Say(A$)
  56.   '
  57.   If Len(A$)>0
  58.     Bmove Varptr(A$),Puffer%,Len(A$)+1
  59.     Void C:Say%(L:Puffer%,Len(A$))
  60.   Endif
  61.   '
  62. Return
  63. '
  64. '
  65. Procedure Wait_say
  66.   Local Er%
  67.   '
  68.   Clr Er%
  69.   Repeat
  70.     If Peek(&HFFFA0B)=32
  71.       Inc Er%
  72.     Else
  73.       Clr Er%
  74.     Endif
  75.   Until Er%=50
  76.   Spoke &HFFFA19,0
  77.   '
  78. Return
  79. '
  80. '
  81. Procedure Say_number(Num%)
  82.   Local Num1%,Num1$,I%,Num$
  83.   '
  84.   If Num%<0
  85.     @Say("minus")
  86.     Num%=-Num%
  87.   Endif
  88.   '
  89.   If Num%=0
  90.     @Say("0")
  91.   Else
  92.     Num$=Str$(Num%)
  93.     For I%=Int(Len(Num$)/3)*3 To 0 Step -3
  94.       '
  95.       If Num%>9
  96.         Num1%=Int(Num%/10^I%)
  97.       Else
  98.         Num1%=Num%
  99.       Endif
  100.       '
  101.       Num1$=Str$(Num1%)
  102.       If Num1%>0
  103.         If Num1%>=100
  104.           '
  105.           @Say(Left$(Num1$,1))
  106.           @Say("hundred")
  107.           Num1$=Right$(Num1$,2)
  108.           Num1%=Val(Num1$)
  109.           If Left$(Num1$,1)="0" And Left$(Num1$,2)<>"00"
  110.             @Say("and")
  111.           Endif
  112.           '
  113.         Endif
  114.         If Num1%>=20
  115.           A$=Left$(Num1$,1)
  116.           If A$="2"
  117.             @Say("twenty")
  118.           Else
  119.             If A$="3"
  120.               @Say("thirty")
  121.             Else
  122.               If A$="4"
  123.                 @Say("fourty")
  124.               Else
  125.                 If A$="5"
  126.                   @Say("fifty")
  127.                 Else
  128.                   If A$="6"
  129.                     @Say("sixty")
  130.                   Else
  131.                     If A$="7"
  132.                       @Say("seventy")
  133.                     Else
  134.                       If A$="8"
  135.                         @Say("eighty")
  136.                       Else
  137.                         If A$="9"
  138.                           @Say("nine te")
  139.                         Endif
  140.                       Endif
  141.                     Endif
  142.                   Endif
  143.                 Endif
  144.               Endif
  145.             Endif
  146.           Endif
  147.           Num1$=Right$(Num1$,1)
  148.           Num1%=Val(Num1$)
  149.           If Num1%<>0
  150.             @Say(Num1$)
  151.           Endif
  152.         Else
  153.           If Num1%<=9 And Num1%>0
  154.             @Say(Str$(Num1%))
  155.           Else
  156.             If Num1%=10
  157.               @Say("ten")
  158.             Else
  159.               If Num1%=11
  160.                 @Say("eleven")
  161.               Else
  162.                 If Num1%=12
  163.                   @Say("twelve")
  164.                 Else
  165.                   If Num1%=13
  166.                     @Say("thirteen")
  167.                   Else
  168.                     If Num1%=14
  169.                       @Say("4teen")
  170.                     Else
  171.                       If Num1%=15
  172.                         @Say("fifteen")
  173.                       Else
  174.                         If Num1%>=16
  175.                           @Say(Right$(Num1$,1)+"teen")
  176.                         Endif
  177.                       Endif
  178.                     Endif
  179.                   Endif
  180.                 Endif
  181.               Endif
  182.             Endif
  183.           Endif
  184.         Endif
  185.         If I%=9
  186.           @Say("billion")
  187.         Else
  188.           If I%=6
  189.             @Say("million")
  190.           Else
  191.             If I%=3
  192.               @Say("thousand")
  193.             Endif
  194.           Endif
  195.         Endif
  196.         Num%=Num%-Int(Num%/10^I%)*10^I%
  197.       Endif
  198.     Next I%
  199.   Endif
  200.   '
  201. Return
  202.