home *** CD-ROM | disk | FTP | other *** search
/ Global Amiga Experience / globalamigaexperience.iso / compressed / development / modula2demo.lha / m2 / TalkDemo / txt / TalkFile.mod < prev    next >
Text File  |  1992-08-29  |  4KB  |  176 lines

  1. IMPLEMENTATION MODULE TalkFile;
  2. (*$ LargeVars:=FALSE StackParms:=FALSE Volatile:=FALSE *)
  3.  
  4. FROM SYSTEM    IMPORT    ADR,ADDRESS,CAST;
  5. FROM IconL    IMPORT    FreeDiskObject,GetDiskObject,PutDiskObject;
  6. FROM String    IMPORT    noOccur,Concat,LastPos;
  7. FROM WorkbenchD    IMPORT    DiskObjectPtr;
  8. IMPORT
  9.     A:Arts,
  10.     TB:TalkBase,
  11.     TG:TalkGadgets,
  12.     ASLReq2,
  13.     S:String,
  14.     Req:Requester,
  15.     DD:DosD,
  16.     DL:DosL,
  17.     IL:IconL,
  18.     WD:WorkbenchD;
  19.  
  20. CONST
  21.   phonMagic =CAST(LONGINT,"PHN.");
  22.   voiceMagic=CAST(LONGINT,"VCE.");
  23.   defIcon="DefIcon";
  24.  
  25. TYPE
  26.   PhonFile=RECORD
  27.     magic:LONGINT;
  28.     phon:TB.Str255;
  29.   END;
  30.   VoiceFile=RECORD
  31.     magic:LONGINT;
  32.     voice:TB.NarrData;
  33.   END;
  34.   Str128 = ARRAY [0..127] OF CHAR;
  35.  
  36. VAR
  37.   phonName :=Str128{".phn"};
  38.   voiceName:=Str128{".vce"};
  39.   fh:DD.FileHandlePtr;
  40.   phon:PhonFile;
  41.   voice:VoiceFile;
  42.  
  43.  
  44. PROCEDURE MakeIcon(name: ARRAY OF CHAR);
  45. VAR
  46.  do: WD.DiskObjectPtr;
  47.  (*$ CopyDyn:=FALSE *)
  48. BEGIN
  49.   do:=IL.GetDiskObject(ADR(name));
  50.   IF do=NIL THEN (* noch keins da. *)
  51.     do:=IL.GetDiskObject(ADR(defIcon));
  52.     IF do#NIL THEN
  53.       IF IL.PutDiskObject(ADR(name),do) THEN END;
  54.       IL.FreeDiskObject(do)
  55.     END;
  56.   ELSE (* gibt es schon, alles klar. *)
  57.     IL.FreeDiskObject(do);
  58.   END;
  59. END MakeIcon;
  60.  
  61. PROCEDURE CloseFile;
  62. BEGIN
  63.   IF fh#NIL THEN
  64.     DL.Close(fh);
  65.     fh:=NIL
  66.   END;
  67. END CloseFile;
  68.  
  69. PROCEDURE GetVoice():BOOLEAN;
  70. VAR
  71.   ok:BOOLEAN;
  72. BEGIN
  73.   fh:=DL.Open(ADR(voiceName),DD.oldFile);
  74.   ok:=(fh#NIL)&(DL.Read(fh,ADR(voice),SIZE(voice)) = SIZE(voice))
  75.       &(voice.magic=voiceMagic);
  76.   CloseFile;
  77.   RETURN ok;
  78. END GetVoice;
  79.  
  80. PROCEDURE PutVoice():BOOLEAN;
  81. VAR
  82.   ok:BOOLEAN;
  83. BEGIN
  84.   fh:=DL.Open(ADR(voiceName),DD.newFile);
  85.   ok:=(fh#NIL)&(DL.Write(fh,ADR(voice),SIZE(voice)) = SIZE(voice));
  86.   CloseFile;
  87.   IF ok THEN MakeIcon(voiceName) END;
  88.   RETURN ok;
  89. END PutVoice;
  90.  
  91. PROCEDURE GetPhonemes():BOOLEAN;
  92. VAR
  93.   ok:BOOLEAN;
  94. BEGIN
  95.   fh:=DL.Open(ADR(phonName),DD.oldFile);
  96.   ok:=(fh#NIL)&(DL.Read(fh,ADR(phon),SIZE(phon))=SIZE(phon))
  97.       &(phon.magic=phonMagic);
  98.   CloseFile;
  99.   RETURN ok;
  100. END GetPhonemes;
  101.  
  102. PROCEDURE PutPhonemes():BOOLEAN;
  103. VAR
  104.   ok:BOOLEAN;
  105. BEGIN
  106.   fh:=DL.Open(ADR(phonName),DD.newFile);
  107.   ok:=(fh#NIL)&(DL.Write(fh,ADR(phon),SIZE(phon))=SIZE(phon));
  108.   IF ok THEN MakeIcon(phonName) END;
  109.   CloseFile;
  110.   RETURN ok;
  111. END PutPhonemes;
  112.  
  113. PROCEDURE SavePhonemes;
  114. BEGIN
  115.   TB.SetBusy(TRUE);
  116.   IF S.Length(TB.phonBuff)>0 THEN
  117.     IF ASLReq2.FileReq(phonName,"Save Phonemes","#?.phn",TRUE) THEN
  118.       phon.magic:=phonMagic;
  119.       phon.phon:=TB.phonBuff;
  120.       IF ~PutPhonemes() THEN
  121.         Req.OKRequest("Kann Datei nicht sichern!")
  122.       END;
  123.     END;
  124.   ELSE
  125.     Req.OKRequest("Keine Phoneme definiert!");
  126.   END;
  127.   TB.SetBusy(FALSE);
  128. END SavePhonemes;
  129.  
  130. PROCEDURE LoadPhonemes();
  131. BEGIN
  132.   TB.SetBusy(TRUE);
  133.   IF ASLReq2.FileReq(phonName,"Load Phonemes","#?.phn",FALSE) THEN
  134.     IF GetPhonemes() THEN
  135.       TB.phonBuff:=phon.phon;
  136.       TG.UpdatePhonemes;
  137.     ELSE
  138.       Req.OKRequest("Datei nicht zu laden\noder falscher Schlüssel!");
  139.     END;
  140.   END;
  141.   TB.SetBusy(FALSE);
  142. END LoadPhonemes;
  143.  
  144. PROCEDURE SaveVoice;
  145. BEGIN
  146.   TB.SetBusy(TRUE);
  147.   IF ASLReq2.FileReq(voiceName,"Save Voice","#?.vce",TRUE) THEN
  148.     voice.magic:=voiceMagic;
  149.     voice.voice:=TB.myNarr;
  150.     IF ~PutVoice() THEN
  151.       Req.OKRequest("Kann Datei nicht sichern!")
  152.     END;
  153.   END;
  154.   TB.SetBusy(FALSE);
  155. END SaveVoice;
  156.  
  157. PROCEDURE LoadVoice;
  158. BEGIN
  159.   TB.SetBusy(TRUE);
  160.   IF ASLReq2.FileReq(voiceName,"Load Voice","#?.vce",FALSE) THEN
  161.     IF GetVoice() THEN
  162.       TB.myNarr:=voice.voice;
  163.       TG.SetNarr(TB.myNarr);
  164.     ELSE
  165.       Req.OKRequest("Datei nicht zu laden\noder falscher Schlüssel!");
  166.     END;
  167.   END;
  168.   TB.SetBusy(FALSE);
  169. END LoadVoice;
  170.  
  171. BEGIN
  172.  
  173. CLOSE
  174.   CloseFile;
  175. END TalkFile.mod
  176.