PROLOG-REQUEST@SUSHI.STANFORD.EDU (Chuck Restivo, The Moderator) (09/21/87)
PROLOG Digest Tuesday, 22 Sep 1987 Volume 5 : Issue 62 Today's Topics: Implementation - MU Note, LP Library - ansi_io.pro & env_funt.pro ---------------------------------------------------------------------- Date: 19 Sep 87 04:09:51 GMT From: Lee Naish <munnari!mulga!lee@uunet.uu.net> Subject: MU MU-Prolog and (some versions of) CProlog also have foreign function interfaces (though not quite as easy to use). -- Lee Naish ------------------------------ Date: Sun, 13 Sep 87 22:38:46 PDT From: Edouard Lagache <lagache@violet.Berkeley.EDU> Subject: PROLOG library file: ansi_io.pro /* File: ANSI_IO.PRO */ /******************************************************************************/ /* */ /* ANSI standard terminal input/output predicate definition file */ /* */ /* This file contains predicates and data which provide commonly */ /* needed input/output capabilities for interactive programming. It also*/ /* contains predicates to control any terminal which supports the ANSI */ /* standard terminal type. For IBM PC's and compatibles these commands */ /* will work only if the systems is booted up the the ANSI.SYS device */ /* driver. */ /* */ /* E. Lagache, Version - 1.00, February - 1987 */ /* Copyright(C) 1987, ALL RIGHTS RESERVED */ /* */ /* */ /* NOTE: This file has been designed for use with ADA PROLOG. */ /* Also these predicates were developed for use with a Texas */ /* Instruments Professional computer. Some adjustment of the */ /* screen attributes may be necessary for other machines. */ /* */ /******************************************************************************/ /* * * * * * * * * * * * * * * * * * * * * * * */ /* 'center_stg' prints out a string centered */ /* on an 80 column terminal screen. */ /* */ /* E. Lagache, Vers. - 1.00, Nov - 86 */ /* * * * * * * * * * * * * * * * * * * * * * * */ center_stg(String):- comp_tabs(String,Tabs), tab(Tabs),prtstr(String), nl. /*##> 'comp_tabs' computes the number of <##*/ /*##> spaced needed to center the string. <##*/ /*##> <##*/ /*##> Used by Predicate: 'center_stg' <##*/ comp_tabs(String,Tabs):- length(String,Length), X is 80-Length, evenp(X), Tabs is X/2, !. comp_tabs(String,Tabs):- length(String,Length), X is 79-Length, evenp(X), Tabs is X/2, !. /* * * * * * * * * * * * * * * * * * * * * * * */ /* 'clear_end' deletes all characters after */ /* the cursor to the end of the screen */ /* */ /* E. Lagache, Vers. - 1.00, Feb - 87 */ /* * * * * * * * * * * * * * * * * * * * * * * */ clear_end:- prtstr("[J"). /* * * * * * * * * * * * * * * * * * * * * * * */ /* 'clear_line' deletes all characters after */ /* the cursor on a given line */ /* */ /* E. Lagache, Vers. - 1.00, Feb - 87 */ /* * * * * * * * * * * * * * * * * * * * * * * */ clear_line:- prtstr("[K"). /* * * * * * * * * * * * * * * * * * * * * * * */ /* 'clear_screen' send the required escape */ /* sequence to the terminal. */ /* */ /* E. Lagache, Vers. - 1.00, Feb - 87 */ /* * * * * * * * * * * * * * * * * * * * * * * */ clear_screen:- prtstr("[2J"). /* * * * * * * * * * * * * * * * * * * * * * * */ /* 'locate_cursor' moves the cursor to the */ /* desired location on the screen */ /* */ /* E. Lagache, Vers. - 1.00, Feb - 87 */ /* * * * * * * * * * * * * * * * * * * * * * * */ locate_cursor(Row, Column):- prtstr("["),write(Row),write(';'), write(Column),prtstr("H"),!. /* * * * * * * * * * * * * * * * * * * * * * * */ /* 'prtstr' sends a string to the current */ /* output string by converting the string to */ /* a name and using the 'write' predicate. */ /* */ /* E. Lagache, Vers. - 1.00, Feb - 87 */ /* */ /* Note: 'prtstr' is builtin to ADA VML */ /* PROLOG. */ /* * * * * * * * * * * * * * * * * * * * * * * */ /* prtstr(String) :- name(Atom,String), write(Atom). */ /* * * * * * * * * * * * * * * * * * * * * * * */ /* 'push_up' sends the requested number of */ /* newlnes to the output stream. */ /* */ /* E. Lagache, Vers. - 1.00, Dec - 86 */ /* * * * * * * * * * * * * * * * * * * * * * * */ push_up(0):- !. push_up(I):- J is I-1, nl, push_up(J). /* * * * * * * * * * * * * * * * * * * * * * * */ /* 'set_attribute' sets the charactaristics */ /* of characters after command. Argument */ /* specifies attribute */ /* */ /* E. Lagache, Vers. - 1.00, Feb - 87 */ /* * * * * * * * * * * * * * * * * * * * * * * */ set_attribute(reset):- prtstr("[1m"). /* Reset to default setup */ set_attribute(underline):-prtstr("[4;m"). /* underline characters */ set_attribute(blink):-prtstr("[5;m"). /* blinking characters */ set_attribute(reverse):-prtstr("[7;m"). /* reverse video characters */ /* Set character color */ set_attribute(black):-prtstr("[30m"). /* black characters */ set_attribute(red):-prtstr("[31m"). /* red characters */ set_attribute(green):-prtstr("[32m"). /* green characters */ set_attribute(yellow):-prtstr("[33m"). /* yellow characters */ set_attribute(blue):-prtstr("[34m"). /* blue characters */ set_attribute(magenta):-prtstr("[35m"). /* magenta characters */ set_attribute(cyan):-prtstr("[36m"). /* cyan characters */ set_attribute(white):-prtstr("[37m"). /* white characters */ /* End file: ANSI_IO.PRO */ ------------------------------ Date: Sun, 13 Sep 87 22:39:13 PDT From: Edouard Lagache <lagache@violet.Berkeley.EDU> Subject: PROLOG library file: env_funt.pro /* File: 'env-funt.pro' */ /***************************************************************************/ /* */ /* PROLOG environment enrichment functions */ /* */ /* This function library contains a number of predicates and operators */ /*that make the process or developing PROLOG programs under VML PROLOG */ /* more pleasant and productive. */ /* */ /* */ /* */ /* E. Lagache, Version - 1.10, July - 1987 */ /* (C) Copyright 1987, Edouard Lagache, All Rights Reserved */ */ /* Note: To use these predicates with your favorite editor, replace */ /* the 'edit' name in the functor and operator with the name of */ /* your editor. Use whatever convention you like on the predicate */ /* of edit and load a file. */ /* */ /***************************************************************************/ ?- op(255, fx, edit). /* define operators to reduce typing */ ?- op(255, fx, ledit). ?- op(255, fx, run). /* Define shortcut for executing a shell command */ /* * * * * * * * * * * * * * * * * * * * * * * */ /* 'edit' calls up the editor to edit a file */ /* */ /* E. Lagache, Vers. - 1.10, Jul - 87 */ /* */ /* Note: 'concat' is specific to ADA PROLOG */ /* * * * * * * * * * * * * * * * * * * * * * * */ edit(Filename) :- name(Filename,Filestg), append(Filestg,".pro",Filext), append("edit ",Filext,Command),name(Form,Command), exec(Form),!. /* Solution using ADA specific predicates */ /*edit(Filename):- concat(Command,['Edit ',Filename,'.pro']),exec(Command).*/ /* * * * * * * * * * * * * * * * * * * * * * * */ /* 'dos' invokes the operating system shell */ /* */ /* E. Lagache, Vers. - 1.00, Feb - 87 */ /* * * * * * * * * * * * * * * * * * * * * * * */ dos :- exec(command). /* * * * * * * * * * * * * * * * * * * * * * * */ /* 'ledit' calls up the editor to edit a file */ /* and then loads it into the system. */ /* */ /* E. Lagache, Vers. - 1.10, Jul - 87 */ /* */ /* Note: 'concat' is specific to ADA PROLOG */ /* * * * * * * * * * * * * * * * * * * * * * * */ ledit(Filename) :- name(Filename,Filestg), append(Filestg,".pro",Filext), append("edit ",Filext,Command),name(Form,Command), exec(Form),forget(Filename),consult(Filename),!. /* Solution using ADA specific predicates */ /* ledit(Filename) :- concat(Command,['Edit ',Filename,'.pro']), */ /* exec(Command),forget(Filename),consult(Filename). */ /* * * * * * * * * * * * * * * * * * * * * * * */ /* 'run' runs passes a command to the */ /* operating system for execution. */ /* */ /* E. Lagache, Vers. - 1.00, Feb - 87 */ /* * * * * * * * * * * * * * * * * * * * * * * */ run(Command) :- exec(Command). /* End file: ENV_FUNT.PRO */ ------------------------------ End of PROLOG Digest ********************