Google
 

Trailing-Edge - PDP-10 Archives - decuslib10-07 - 43,50433/pasult.mac
There are 2 other files named pasult.mac in the archive. Click here to see a list.
	title PASCAL interface to Ultimate command scanner
	subttl	By Bill Westfield    Sept 16,1980
	internal CLREOL
	extern	SUBCMD,getcmd,tPUTCH

	entry	PASULT

	search	UTILS
	%NEAT
	%INIT
	%EST

comment ~
	This inteface allows the Ultamate command scanner (ULTCMD) to
	be called from Pascal, as in :

-------------------------------------------------------------------------------
	program	test;

var	I : integer;
	CEOL : packed array[0..1] of char;

function PASULT(num_of_strings : integer ; CLREOL,PROMPT : string ;
		a,b,c,d,e,f,g,h,j,k,l : string ) : integer; extern;


begin
	CEOL[0] := chr(16);
	CEOL[1] := chr(28);	{ gp-100 Clear to EOL codes }
	while TRUE do begin
	I := PASULT (11,CEOL,'% ','read','rename','renumber','request',
		'require','delete','offer','open','optimize','munge','mangle');
	writeln(tty);
	writeln(tty,'Index : ',I:0)
	end
end.
-------------------------------------------------------------------------------

	The value returned is the relative command number eg an integer
	between 1 and num_of_strings.

~
PASULT:	move	13,[point 7,STRSTG]	;string storage area
	movei	7,3			;where to start getting strings
	movnm	2,TABLE			;put the -arg count into the table
	addi	2,1			;get all strings + prompt
	setz	14,
	call	GETSTR			;get CLREOL string
	hrlm	1,TABLE(14)		;returns address of string in ac1
	caige	14,-1(2)
	aoja	14,ARGLP
	movei	1,TABLE			;standard calling sequence for ULTCMD
	call	GETCMD			;call command subroutine
	subi	1,TABLE			;compute the relative command Number
	movem	1,1(P)			;and return it to Pascal
	return

getstr:	caig	7,20				;are we past acs yet ?
	caig	7,6				;have we exceeded ac6 ?
	jrst	OK
	  movei	7,1(P)			;set up adlress so we get the rest
	  addi	2,(2)			;of the arguments from the satck
	  sub	7,2
	  idivi	2,2			;put 2 back where it was
OK:	hrli	10,(point 7,0)		;make a byte pointer
	hrr	10,(7)			;to the string
	movei	1,(13)			;and to a temporary storage area
	move	11,1(7)				;get the length
STRLP:	ildb	12,10			;and copy it all, since we can't
	idpb	12,13			;count on Pascal giving us ASCIZ
	sojg	11,STRLP
	setz	12,			;make sure we create asciz
	idpb	12,13
	addi	13,1				;ready for next word
	hrli	13,(point 7,)
	addi	7,2
	return

TABLE:	block 30			;up to 29 commands, easilly changeable

CLREOL:					;clreol string is the first item in
STRSTG:	block 200			;the string storage area. size variable


glop:	tputch

	end