Artifact 55456cde8c08a89c18fdd2d3ac15cd57a9caa379d6d9b9caabea82e84a3bce3a:
- Executable file
r37/packages/rlisp/inter.red
— part of check-in
[f2fda60abd]
at
2011-09-02 18:13:33
on branch master
— Some historical releases purely for archival purposes
git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/trunk/historical@1375 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 3456) [annotate] [blame] [check-ins using] [more...]
- Executable file
r38/packages/rlisp/inter.red
— part of check-in
[f2fda60abd]
at
2011-09-02 18:13:33
on branch master
— Some historical releases purely for archival purposes
git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/trunk/historical@1375 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 3456) [annotate] [blame] [check-ins using]
module inter; % Functions for interactive support. % Author: Anthony C. Hearn. % Copyright (c) 1993 RAND. All rights reserved. fluid '(!*echo !*int); global '(!$eof!$ !$eol!$ !*lessspace cloc!* contl!* curline!* edit!* eof!* erfg!* flg!* ifl!* ipl!* key!* ofl!* opl!* techo!*); symbolic procedure pause; %Must appear at the top-most level; if null !*int then nil else if key!* eq 'pause then pause1 nil else %typerr('pause,"lower level command"); pause1 nil; % Allow at lower level for now. symbolic procedure pause1 bool; begin scalar x; if bool then if getd 'edit1 and erfg!* and cloc!* and yesp "Edit?" then return <<contl!* := nil; if ofl!* then <<lprim list(car ofl!*,'shut); close cdr ofl!*; opl!* := delete(ofl!*,opl!*); ofl!* := nil>>; edit1(cloc!*,nil)>> else if flg!* then return (edit!* := nil); if null ifl!* or yesp "Cont?" then return nil; ifl!* := list(car ifl!*,cadr ifl!*,curline!*); if x := assoccar(car ifl!*,contl!*) then <<contl!* := delete(x,contl!*); close cadar x>>; contl!* := (ifl!* . cdr ipl!* . !*echo) . contl!*; ifl!* := ipl!* := nil; rds nil; !*echo := techo!* end; symbolic procedure assoccar(u,v); % Returns element of v in which caar of that element = u. if null v then nil else if u=caaar v then car v else assoccar(u,cdr v); symbolic procedure yesp u; begin scalar ifl,ofl,x,y; if ifl!* then <<ifl := ifl!* := list(car ifl!*,cadr ifl!*,curline!*); rds nil>>; if ofl!* then <<ofl:= ofl!*; wrs nil>>; if null !*lessspace then terpri(); if atom u then prin2 u else lpri u; prin2t " (Y or N)"; if null !*lessspace then terpri(); y := setpchar '!?; x := yesp1(); setpchar y; if ofl then wrs cdr ofl; if ifl then rds cadr ifl; cursym!* := '!*semicol!*; return x end; symbolic procedure yesp1; % Basic loop for reading response. begin scalar bool,x,y; a: x := readch(); if x eq !$eol!$ then go to a % Assume an end-of-file means lost control and exit. else if x eq !$eof!$ then eval '(bye) %% else if (y := x eq 'y) or x eq 'n then return y else if (y := x memq '(!y !Y)) or x memq '(!n !N) then return y % F.J. Wright. else if null bool then <<prin2t "Type Y or N"; bool := t>>; go to a end; symbolic procedure cont; begin scalar fl,techo; if ifl!* then return nil % CONT only active from terminal. else if null contl!* then rerror(rlisp,28,"No file open"); fl := caar contl!*; ipl!* := fl . cadar contl!*; techo := cddar contl!*; contl!* := cdr contl!*; if car fl=caar ipl!* and cadr fl=cadar ipl!* then <<ifl!* := fl; if fl then <<rds cadr fl; curline!* := caddr fl>> else rds nil; !*echo := techo>> else <<eof!* := 1; lprim list(fl,"not open"); error1()>> end; deflist ('((cont endstat) (pause endstat) (retry endstat)),'stat); flag ('(cont),'ignore); endmodule; end;