0010  // Demonstration af IO-programmering i AmigaCOMAL
0020  
0030 USE SYSTEM 
0040 USE MESSAGES 
0050 USE DEVICES 
0060 USE TRANSLATOR_LIBRARY 
0070  
0080  // Standard write-request til narrator.device
0090 RECORD narrat@ 
0100   FIELD message@ OF iostdreq@ // Standard IO-request
0110   FIELD rate% // Talehastighed (ord/min)
0120   FIELD pitch% // Stemmeleje (i Hz)
0130   FIELD mode% // 0=med, 1=uden betoning
0140   FIELD sex% // Stemmens køn
0150   FIELD ch_masks# // Adresse på lydkanalsmaske
0160   FIELD nm_masks% // Antal masker
0170   FIELD volume% // Styrke (0 .. 64)
0180   FIELD sampfreq% // Sampling frekvens
0190   FIELD mouths! // ?
0200   FIELD chanmask! // Bruges af Amiga'en internt
0210   FIELD numchan! // Bruges af Amiga'en internt
0220 ENDRECORD narrat@ 
0230  
0240  // Definer array for maske til lydkanal
0250 DIM amaps!(4) 
0260  // Initialiser dem
0270 amaps!(1):=3; amaps!(2):=5; amaps!(3):=10; amaps!(4):=12 
0280  
0290  // Opret outputbuffer for taranslate-proceduren
0300 DIM trans'out!(256) 
0310  
0320  // Opret svarport
0330 POINTER reply@ TO msgport@ 
0340 ^reply@:=createport("TaleReply",0) 
0350 IF ^reply@=0 THEN GOTO AFSLUT // Stop, hvis nul
0360  
0370  // Initialiser narrator-message
0380 ^narrat@.message@.mn_replyport@:=^reply@ 
0390 narrat@.ch_masks#:=^amaps!() 
0400 narrat@.nm_masks%:=4 
0410  
0420  // Åben 'narrator.device'
0430 name$:="narrator.device" 
0440 IF pckopendevice(^name$+4,0,^narrat@,0)<>0 THEN GOTO AFSLUT 
0450  
0460  // Så er vi klar
0470 tekst$:="Hello world" // Det er der tradition for at sige
0480  // Oversæt til lydskrit
0490 dummy:=pcktranslate(^tekst$+4,len(tekst$),^trans'out!(),256) 
0500  
0510 narrat@.message@.io_command%:=cmd_write% 
0520 narrat@.message@.io_length#:=len(c_string$(trans'out!())) 
0530 narrat@.message@.io_data#:=^trans'out!() 
0540 dummy:=pckdoio(^narrat@) // Send besked til tale-device og vent
0550  
0560 pckclosedevice(^narrat@) // Luk device ..
0570 AFSLUT:  
0580 deleteport(^reply@) // .. og fjern svarporten
