Kevin_Crowston@XV.MIT.EDU (02/09/88)
I'm trying to convert a Koto application to Lyric and in
the processing, trying to compile a function with a PROG
and a bunch of GO's (so much for GOTOless programming).
The function compiles fine under Koto, and I think it
also works with the old compiler. With the new compiler,
however (that is, CL:COMPILE-FILE), I get an incomprehensible
error message (paraphrased):
Assert failed: uncertainty size went negative.
I'm pretty sure the error has something to do with the PROG,
since I took nearly everything else out of the functions, but
maybe I'm just getting hung up on gotos...
Anyway, does anyone know what the error message means?
Alternately, am I doing something wrong with the PROG? I'm
using the InterLisp package, if there's a difference between
CL:PROG and IL:PROG, but I don't think there is...
The functions used follow:
(Outgoing.Do.Command Command ExpectedReply ErrorMessage)
Sends the command and waits for the given reply;
if it gets it, it returns NIL;
if it gets anything else or nothing at all, it
prints the given error message, sets Status to T
and returns T.
Uses InStream, OutStream, Status and Dialogue as SPECVARS.
(SMTP.Handle.Reply InStream ExpectedReply ErrorMessage)
Waits for the given reply on InStream.
If it gets it, it returns NIL;
if it gets anything else or nothing at all, it
prints the given error message, sets Status to T
and returns T.
Uses Status and Dialogue as SPECVARS.
The function that won't compile:
(LAMBDA (InStream OutStream Host From Receivers Parse)
(DECLARE (SPECVARS Service Dialogue))
(* ; Edited 5-Feb-88 18:08 by kgc)
(PROG
((Count 0)
Status)
(* * Wait for the server's opening message)
(if (SMTP.Handle.Reply InStream "2"
(CONCAT "No server on recipient's host " Host))
then (GO FINISH))
(* * say hello)
(if (Outgoing.Do.Command
(CONCAT "HELO " SMTP.SiteName) "2"
(CONCAT
"No response from server on recipient's host" Host))
then (GO FINISH))
(* * Send the From line)
(if (Outgoing.Do.Command
(CONCAT "MAIL FROM:<"
(SMTP.ARPA.Address From) ">")
"2" "From line rejected")
then (GO DONE))
(* * Send the destinations)
(if (ZEROP
(for Person in Receivers count
(NOT (Outgoing.Do.Command
(CONCAT "RCPT TO:<"
(SMTP.ARPA.Address Person) ">")
"2"
(CONCAT "To line rejected by " Host)))))
then (printout Dialogue
"None of the recipients were accepted by the host" T)
(GO DONE))
(* * Send the message itself)
(if (Outgoing.Do.Command "DATA" "3"
"Error sending message body")
then (GO DONE))
(SMTP.Header Parse OutStream Host)
(SMTP.Body Parse OutStream)
(SMTP.Send OutStream "
.")
(if (SMTP.Handle.Reply InStream "2"
"Error sending message")
then (GO DONE))
(* * That's it)
DONE
(Outgoing.Do.Command "QUIT" "2"
"QUIT command rejected")
FINISH
(* * Close the connection)
(NLSETQ
(PROGN (CLOSEF? InStream)
(CLOSEF? OutStream)))
(* * Tell the world)
(Monitor.Print Service
(if Status
then "Error in delivery"
else "Delivery okay"))
(RETURN (NOT Status))))
Kevin Crowston
MIT Sloan School