ðÛSyntax10.Scn.Fnt(ÿÿÿ€8ÀÔFoldElemsNew#Syntax10.Scn.FntÃÃ VAR i: INTEGER; PROCEDURE Digit (x: LONGINT); BEGIN IF x >= 10 THEN Digit(x DIV 10) END; s[i] := CHR(x MOD 10 + ORD("0")); INC(i) END Digit; BEGIN i := 0; Digit(x); s[i] := 0X END IntToStr; ÿÿÿÿ€8ÀÔ<óþÿÿ€8ÀÔ#Syntax10.Scn.Fntëë VAR beg: INTEGER; BEGIN x := 0; beg := 0; WHILE (s[beg] # 0X) & ((s[beg] < "0") OR ("9" < s[beg])) DO INC(beg) END; WHILE ("0" <= s[beg]) & (s[beg] <= "9") DO x := 10 * x + (ORD(s[beg]) - ORD("0")); INC(beg) END END StrToInt; ÿÿÿÿ€8ÀÔ=ÿÿÿÿ€8ÀÔSyntax10i.Scn.Fnt+þ1:ÿÿÿÿ€8ÀÔgÿÿÿÿ€8ÀÔÿÿÿÿ€8ÀÔÿÿÿÿ€8ÀÔkÿÿÿÿ€8ÀÔ Syntax10b.Scn.Fntÿÿÿÿ€8ÀÔ~ÿÿÿÿ€8ÀÔÿÿÿÿ€8ÀÔÿÿÿÿ€8ÀÔ aMODULE MailQ; IMPORT Directories, In, Out, Mail, PostOffice, Strings, TextFrames, Texts, Viewers; CONST oBox = "out"; oDir = "Out/"; LF = 0DX; Text = 1; Box = 2; VAR max: LONGINT; start: LONGINT; w: Texts.Writer; options: SET; PROCEDURE IntToStr (x: LONGINT; VAR s: ARRAY OF CHAR);  PROCEDURE StrToInt (VAR s: ARRAY OF CHAR; VAR x: LONGINT);  PROCEDURE SaveOutgoing (V: Viewers.Viewer; t: Texts.Text);  VAR filename, buf: ARRAY 256 OF CHAR; box: PostOffice.Mailbox; mail: PostOffice.Mail; pos: LONGINT; r: Texts.Reader; ch: CHAR; t2: Texts.Text; BEGIN IF Text IN options THEN COPY(PostOffice.mDir, filename); Strings.Append(oDir, filename); Strings.Append("Mail", filename); IntToStr(max, buf); Strings.Append(buf, filename); Strings.Append(".Text", filename); Texts.Close(t, filename); INC(max); Out.String("Outgoing mail saved to Mail"); Out.String(buf); Out.String(".Text"); Out.Ln END; IF Box IN options THEN (* create a copy of the original text *) t2 := TextFrames.Text(""); (* write sender *) pos := PostOffice.SearchPatt2(t, "To:", 0); ASSERT(pos # - 1); Texts.OpenReader(r, t, pos); Texts.Read(r, ch); WHILE ~r.eot & (ch # LF) DO Texts.Read(r, ch) END; Texts.WriteString(w, "From: "); Texts.Save(t, pos, Texts.Pos(r), w.buf); (* write subject *) pos := PostOffice.SearchPatt2(t, "Subject:", 0); ASSERT(pos # - 1); Texts.OpenReader(r, t, pos); Texts.Read(r, ch); WHILE ~r.eot & (ch # LF) DO Texts.Read(r, ch) END; Texts.WriteString(w, "Subject: "); Texts.Save(t, pos, Texts.Pos(r), w.buf); Texts.WriteLn(w); (* append a copy of the original text to t2 *) t2 := TextFrames.Text(""); Texts.Save(t, 0, t.len, w.buf); Texts.Insert(t2, 0, w.buf); NEW(mail); PostOffice.ParseMail(t2, mail); PostOffice.GetBox(oBox, box); box.AppendMail(mail, t2); Out.String("Outgoing mail saved to "); Out.String(oBox); Out.String(".mbx"); Out.Ln; END; END SaveOutgoing;  PROCEDURE GetMax (d: Directories.Directory; name: ARRAY OF CHAR; isDir: BOOLEAN; VAR cont: BOOLEAN);  VAR buffer: ARRAY 64 OF CHAR; x: LONGINT; BEGIN cont := TRUE; IF ~isDir & Strings.Match(name, "Mail*.Text") THEN Strings.Extract(name, 4, Strings.Pos(".Text", name, 0) - 4, buffer); StrToInt(buffer, x); IF x > max THEN max := x END END END GetMax;  PROCEDURE Init;  VAR sender: PostOffice.Sender; filename, opt: ARRAY 256 OF CHAR; BEGIN IF ~PostOffice.Get("MailQStore", opt) THEN opt := "Box"; END; Strings.Cap(opt); IF opt = "BOTH" THEN options := {Text, Box}; ELSIF opt = "TEXT" THEN options := {Text}; ELSE options := {Box}; END; IF Text IN options THEN max := 0; COPY(PostOffice.mDir, filename); Strings.Append(oDir, filename); Directories.Create(filename); Directories.Enumerate(Directories.This(filename), GetMax); INC(max); start := max; END; NEW(sender); sender.next := Mail.sender; sender.do := SaveOutgoing; Mail.sender := sender END Init;  PROCEDURE Send*;  VAR t: Texts.Text; path, filename, buffer: ARRAY 256 OF CHAR; i, a, b: LONGINT; BEGIN In.Open; In.LongInt(a); In.LongInt(b); IF In.Done THEN start := a; max := b + 1 END; COPY(PostOffice.mDir, path); Strings.Append(oDir, path); Strings.Append("Mail", path); FOR i := start TO max - 1 DO IntToStr(i, buffer); COPY(path, filename); Strings.Append(buffer, filename); Strings.Append(".Text", filename); t := TextFrames.Text(filename); Mail.DoSend(NIL, t) END; COPY(PostOffice.mDir, filename); Strings.Append(oDir, filename); Directories.Enumerate(Directories.This(filename), GetMax); INC(max); start := max END Send;  BEGIN Init; Texts.OpenWriter(w);  END MailQ.