home *** CD-ROM | disk | FTP | other *** search
/ Boot Disc 8 / boot-disc-1997-04.iso / PDA_Soft / Psion / sounds / SAYNUM.OPL < prev    next >
Text File  |  1993-11-24  |  2KB  |  101 lines

  1. REM SAYNUM v0.3
  2. REM by Roger Burton-West <ubte30e@ucl.ac.uk>
  3. REM copy freely and of your own will
  4.  
  5. PROC stub:
  6.     local n
  7.     do
  8.         input n
  9.         saynum:(gen$(n,40))
  10.     until 0
  11. ENDP
  12.  
  13. PROC saynum:(a$)
  14.     num2txt:(a$,-1)
  15. ENDP
  16.  
  17. PROC num2txt:(nn$,z%)
  18.     local a$(15),v%,n$(255),m%
  19.     n$=zstrip$:(nn$)
  20.     if n$=""
  21.         n$="0"
  22.     endif
  23.     if val(n$)=0 and z%=0
  24.         return
  25.     endif
  26.     if left$(n$,1)="-"
  27.         say:("minus")
  28.         n$=right$(n$,len(n$)-1)
  29.     endif
  30.     if loc(n$,".")
  31.         num2txt:(left$(n$,loc(n$,".")-1),-1)
  32.         say:("point")
  33.         n$=mid$(n$,loc(n$,".")+1,255)
  34.         v%=1
  35.         do
  36.             say:(mid$(n$,v%,1))
  37.             v%=v%+1
  38.         until v%>len(n$)
  39.         return
  40.     endif
  41.     if len(n$)>6
  42.         num2txt:(left$(n$,len(n$)-6),0)
  43.         say:("000000")
  44.         n$=zstrip$:(right$(n$,6))
  45.         m%=1
  46.     endif
  47.     if len(n$)>3
  48.         num2txt:(left$(n$,len(n$)-3),0)
  49.         say:("000")
  50.         n$=zstrip$:(right$(n$,3))
  51.         m%=1
  52.     endif
  53.     if len(n$)>2
  54.         num2txt:(left$(n$,len(n$)-2),0)
  55.         say:("00")
  56.         n$=zstrip$:(right$(n$,2))
  57.         m%=1
  58.     endif
  59.     n$=zstrip$:(n$)
  60.     if m%=1 and n$<>""
  61.         say:("and")
  62.     endif
  63.     if n$="" and z%=-1 and m%=0
  64.         say:("0")
  65.         return
  66.     elseif n$=""
  67.         return
  68.     endif
  69.     if val(n$)<21
  70.         say:(n$)
  71.     else
  72.         say:(left$(n$,1)+"0")
  73.         if right$(n$,1)<>"0"
  74.             say:(right$(n$,1))
  75.         endif
  76.     endif
  77. ENDP
  78.  
  79. PROC say:(a$)
  80.     playw%:("*"+a$,0,0)
  81. ENDP
  82.  
  83. PROC zstrip$:(a$)
  84.     local b$(255)
  85.     b$=a$
  86.     while left$(b$,1)="0"
  87.         b$=right$(b$,len(b$)-1)
  88.     endwh
  89.     return b$
  90. ENDP
  91.  
  92. PROC playw%:(inname$,ticks%,vol%)
  93.     LOCAL name$(128),p%,ret%
  94.     p%=PEEKW($1c)+6
  95.     name$=inname$+chr$(0)
  96.     ret%=call($1f86,uadd(addr(name$),1),ticks%,vol%)
  97.     if peekw(p%) and 1
  98.         return ret% or $FF00
  99.     endif
  100. ENDP
  101.