*****************************************************************************
*									    *
*	PROGRAM: ReqCh 	(a replacement for RequestChoice)		    *
*	VERSION: 40.1							    *
*   SOURCE CODE: 7							    *
*	   DATE: 23.10.1996						    *
*      LANGUAGE: Assembler						    *
*	 SYSTEM: A1200  KS 40.68 WB 40.42 2MB chip 8MB fast 68030/50mhz	    *
*									    *
*	 AUTHOR: Joerg Riemer 14167 Berlin/SchottmuellerStr.107/Germany	    *
*	  EMAIL: mission@cs.tu-berlin.de				    *
*									    *
*      FUNCTION: ReqCh lets AmigaDOS and ARexx scripts use the		    *
*		 Intuition EasyRequest() feature. It is a replacement	    *
*		 for the bugy command C:RequestChoice (new for [V39])	    *
*		 Read the ReqCh.doc for more information.		    *
*									    *
*  NEW FEATURES: creates a local variable called "ReqChGG" to hold	    *
*		 the gadget number selected by the user			    *
*									    *
*	   BUGS: none (i hope so)					    *
*									    *
*****************************************************************************

		SECTION	ReqCh,CODE

****************************************************************************

Start		link.w	A5,#-$68
		movem.l	D2/D3/D5-D7/A2/A3/A6,-(SP)

		movea.w	#4,A0
		movea.l	(A0),A2
		movea.l	A2,A0
		moveq	#ERROR_INVALID_RESIDENT_LIBRARY,D7
		moveq	#RETURN_FAIL,D6
		move.l	A0,($32,SP)
		move.l	A6,-(SP)
		lea	(DOSName,PC),A1
		moveq	#37,D0
		movea.l	A2,A6
		jsr	(_LVOOpenLibrary,A6)
		movea.l	(SP)+,A6
		movea.l	D0,A3
		movea.l	A3,A0
		move.l	A0,($2E,SP)
		move.l	A3,D0
		beq.w	LC3C8

		move.l	A6,-(SP)
		lea	(INTName,PC),A1
		moveq	#37,D0
		movea.l	A2,A6
		jsr	(_LVOOpenLibrary,A6)
		movea.l	(SP)+,A6
		move.l	D0,($2A,SP)
		tst.l	D0
		beq.w	LC39A

		moveq	#15,D1
		moveq	#0,D2
		lea	(-$24,A5),A0
LC058		move.b	D2,(A0)+
		dbra	D1,LC058
		move.l	A6,-(SP)
		lea	(ArgTemplate,PC),A0
		move.l	A0,D1
		lea	(-$24,A5),A1
		move.l	A1,D2
		moveq	#0,D3
		movea.l	A3,A6
		jsr	(_LVOReadArgs,A6)
		movea.l	(SP)+,A6
		tst.l	D0
		beq.w	LC364

		moveq	#ERROR_REQUIRED_ARG_MISSING,D7
		lea	(Buffer,PC),A3
		move.l	D0,(A3)
		movea.l	(-$20,A5),A3
		movea.l	A3,A0
		movea.l	(-$1C,A5),A2
		move.l	A0,($20,SP)
		move.l	A2,D0
		beq.w	LC370
		tst.l	(A2)
		beq.w	LC370

		movea.l	A3,A1
LC0A0		tst.b	(A1)+
		bne.b	LC0A0
		subq.l	#1,A1
		suba.l	A3,A1
		move.l	A1,D0
		move.w	D0,(-$3E,A5)
		bra.b	LC0FA

LC0B0		movea.l	A3,A0
LC0B2		tst.b	(A0)+
		bne.b	LC0B2
		subq.l	#1,A0
		suba.l	A3,A0
		move.l	A0,D0
		addq.l	#1,D0
		moveq	#0,D1
		move.w	(-$3E,A5),D1
		add.l	D0,D1
		clr.w	(-$40,A5)
		move.w	D1,(-$3E,A5)
		bra.b	LC0EC

LC0D0		move.w	(-$40,A5),D0
		move.l	D0,D1
		addq.w	#1,D1
		moveq	#0,D2
		move.w	D0,D2
		move.w	D1,(-$40,A5)
		moveq	#$25,D0
		cmp.b	(A3,D2.L),D0
		bne.b	LC0EC
		addq.w	#1,(-$3E,A5)
LC0EC		moveq	#0,D0
		move.w	(-$40,A5),D0
		tst.b	(A3,D0.L)
		bne.b	LC0D0
		addq.l	#4,A2
LC0FA		movea.l	(A2),A3
		move.l	A3,D0
		bne.b	LC0B0
		clr.w	(-$40,A5)
		movea.l	($20,SP),A3
		bra.b	LC128

LC10A		move.w	(-$40,A5),D0
		move.l	D0,D1
		addq.w	#1,D1
		moveq	#0,D2
		move.w	D0,D2
		move.w	D1,(-$40,A5)
		moveq	#$25,D0
		cmp.b	(A3,D2.L),D0
		bne.b	LC128
		move.l	D5,D0
		move.w	D0,(-$3E,A5)
LC128		moveq	#0,D0
		move.w	(-$3E,A5),D0
		move.l	D0,D5
		addq.l	#1,D5
		moveq	#0,D0
		move.w	(-$40,A5),D0
		tst.b	(A3,D0.L)
		bne.b	LC10A

		moveq	#ERROR_NO_FREE_STORE,D7
		move.l	A6,-(SP)
		move.l	D5,D0
		moveq	#0,D1
		movea.l	($36,SP),A6
		jsr	(_LVOAllocVec,A6)
		movea.l	(SP)+,A6
		movea.l	D0,A2
		movea.l	A2,A0
		move.l	A0,($26,SP)
		move.l	A2,D0
		beq.w	LC370

		moveq	#0,D0
		move.w	D0,(-$42,A5)
		move.w	D0,(-$40,A5)
		bra.b	LC1AA

LC16A		move.w	($24,SP),D0
		move.b	(A3),(A2)
		move.w	(-$40,A5),D1
		move.l	D1,D2
		addq.w	#1,D2
		movea.l	($20,SP),A3
		moveq	#0,D3
		move.w	D1,D3
		movea.l	($26,SP),A2
		move.w	D0,(-$42,A5)
		movem.w	D2,(-$40,A5)
		moveq	#$25,D0
		cmp.b	(A3,D3.L),D0
		bne.b	LC1AA
		move.w	(-$42,A5),D1
		move.l	D1,D2
		addq.w	#1,D2
		moveq	#0,D3
		move.w	D1,D3
		move.b	D0,(A2,D3.L)
		move.w	D2,(-$42,A5)
LC1AA		moveq	#0,D0
		move.w	(-$40,A5),D0
		adda.l	D0,A3
		moveq	#0,D0
		move.w	(-$42,A5),D0
		adda.l	D0,A2
		addq.w	#1,D0
		move.w	D0,($24,SP)
		tst.b	(A3)
		bne.b	LC16A
		move.w	($24,SP),(-$42,A5)
		clr.b	(A2)
		movea.l	(-$1C,A5),A3
		bra.b	LC238

LC1D2		clr.w	(-$40,A5)
		bra.b	LC212

LC1D8		addq.w	#1,(-$42,A5)
		move.b	(A3),(A2)
		move.w	(-$40,A5),D0
		move.l	D0,D1
		addq.w	#1,D1
		movea.l	($20,SP),A3
		moveq	#0,D2
		move.w	D0,D2
		movea.l	($26,SP),A2
		move.w	D1,(-$40,A5)
		moveq	#$25,D0
		cmp.b	(A3,D2.L),D0
		bne.b	LC212
		move.w	(-$42,A5),D1
		move.l	D1,D2
		addq.w	#1,D2
		moveq	#0,D3
		move.w	D1,D3
		move.b	D0,(A2,D3.L)
		move.w	D2,(-$42,A5)
LC212		moveq	#0,D0
		move.w	(-$40,A5),D0
		adda.l	D0,A3
		moveq	#0,D0
		move.w	(-$42,A5),D0
		adda.l	D0,A2
		tst.b	(A3)
		bne.b	LC1D8
		movea.l	(-$3C,A5),A3
		addq.l	#4,A3
		tst.l	(A3)
		beq.b	LC238
		addq.w	#1,(-$42,A5)
		move.b	#$7C,(A2)
LC238		move.l	A3,(-$3C,A5)
		movea.l	(A3),A3
		movea.l	A3,A0
		movea.l	($26,SP),A2
		move.l	A0,($20,SP)
		move.l	A3,D0
		bne.b	LC1D2
		moveq	#0,D0
		move.w	(-$42,A5),D0
		clr.b	(A2,D0.L)

		movea.l	($2A,SP),A3
		moveq	#0,D0
		move.l	D0,-(SP)
		moveq	#1,D1
		move.l	D1,-(SP)
		move.l	#WA_RMBTrap,-(SP)
		move.l	D1,-(SP)
		move.l	#WA_NoCareRefresh,-(SP)
		move.l	D1,-(SP)
		move.l	#WA_Borderless,-(SP)
		move.l	D1,-(SP)
		move.l	#WA_Backdrop,-(SP)
		moveq	#$10,D2
		move.l	D2,-(SP)
		move.l	#WA_Height,-(SP)
		move.l	D2,-(SP)
		move.l	#WA_Width,-(SP)
		move.l	D0,-(SP)
		move.l	#WA_Top,-(SP)
		move.l	D0,-(SP)
		move.l	#WA_Left,-(SP)
		move.l	(-$18,A5),-(SP)
		move.l	#WA_PubScreenName,-(SP)
		move.l	A3,-(SP)
		bsr.w	LC3D2
		lea	($50,SP),SP
		move.l	D0,($20,SP)
		tst.l	D0
		beq.w	LC350

		moveq	#$14,D1
		move.l	D1,(-$38,A5)
		clr.l	(-$34,A5)
		move.l	(-$24,A5),(-$30,A5)
		move.l	A2,(-$2C,A5)
		movea.l	A2,A0
		moveq	#0,D1
		move.w	($24,SP),D1
		adda.l	D1,A0
		move.l	A0,(-$28,A5)

		movem.l	A2/A3/A6,-(SP)
		movea.l	D0,A0
		movea.l	A3,A6
		lea	(-$38,A5),A1
		suba.l	A2,A2
		movea.l	A2,A3
		jsr	(_LVOEasyRequestArgs,A6)
		movem.l	(SP)+,A2/A3/A6

		move.l	D0,D7
		moveq	#0,D6
		move.l	D7,-(SP)
		pea	(OutputString,PC)
		pea	(-$52,A5)
		jsr	(LC3F6,PC)
		lea	(12,SP),SP

		move.l	A6,-(SP)

		lea	(-$52,A5),A0
		move.l	A0,D1
		movea.l	($32,SP),A6
		jsr	(_LVOPutStr,A6)

		lea	(VarName,PC),A0
		move.l	A0,D1
		lea	(-$52,A5),A0
		move.l	A0,D2
		moveq	#-1,D3
LC32E		addq.l	#1,D3
		cmpi.b	#10,(A0)+
		bne.b	LC32E
		move.l	#GVF_LOCAL_ONLY,D4
		jsr	(_LVOSetVar,A6)

		movea.l	(SP)+,A6

		move.l	A6,-(SP)
		movea.l	($24,SP),A0
		movea.l	A3,A6
		jsr	(_LVOCloseWindow,A6)
		movea.l	(SP)+,A6

LC350		movea.l	($32,SP),A2
		movea.l	($26,SP),A1
		move.l	A6,-(SP)
		movea.l	A2,A6
		jsr	(_LVOFreeVec,A6)
		movea.l	(SP)+,A6
		bra.b	LC370

*****************************************************************************

LC364		move.l	A6,-(SP)
		movea.l	A3,A6
		jsr	(_LVOIoErr,A6)
		move.l	D0,D7
		movea.l	(SP)+,A6

LC370		lea	(Buffer,PC),A3
		move.l	(A3),D1
		beq.b	LC388
		clr.l	(A3)
		movea.l	($2E,SP),A3
		move.l	A6,-(SP)
		movea.l	A3,A6
		jsr	(_LVOFreeArgs,A6)
		movea.l	(SP)+,A6

LC388		movea.l	($32,SP),A2
		move.l	A6,-(SP)
		movea.l	($2E,SP),A1
		movea.l	A2,A6
		jsr	(_LVOCloseLibrary,A6)
		movea.l	(SP)+,A6

LC39A		tst.l	D6
		beq.b	LC3BC

		movea.l	($2E,SP),A3
		move.l	A6,-(SP)
		move.l	D7,D1
		movea.l	A3,A6
		jsr	(_LVOSetIoErr,A6)
		movea.l	(SP)+,A6

		move.l	A6,-(SP)
		move.l	D7,D1
		moveq	#0,D2
		movea.l	A3,A6
		jsr	(_LVOPrintFault,A6)
		movea.l	(SP)+,A6

LC3BC		move.l	A6,-(SP)
		movea.l	A3,A1
		movea.l	A2,A6
		jsr	(_LVOCloseLibrary,A6)
		movea.l	(SP)+,A6

LC3C8		move.l	D6,D0
		movem.l	(SP)+,D2/D3/D5-D7/A2/A3/A6
		unlk	A5
		rts

*****************************************************************************

LC3D2		link.w	A5,#0
		movem.l	A3/A6,-(SP)
		movea.l	(8,A5),A3
		move.l	A6,-(SP)
		suba.l	A0,A0
		lea	(12,A5),A1
		movea.l	A3,A6
		jsr	(_LVOOpenWindowTagList,A6)
		movea.l	(SP)+,A6
		movem.l	(SP)+,A3/A6
		unlk	A5
		rts

*****************************************************************************

LC3F6		movem.l	A2-A4/A6,-(SP)
		movea.l	($14,SP),A3
		movea.l	($18,SP),A0
		lea	($1C,SP),A1
		lea	(LC41A,PC),A2
		movea.l	(4).l,A6
		jsr	(_LVORawDoFmt,A6)
		movem.l	(SP)+,A2-A4/A6
		rts

LC41A		move.b	D0,(A3)+
		rts

*****************************************************************************

Buffer		dc.l	0

VarName		dc.b	"ReqChGG",0
DOSName		dc.b	"dos.library",0
INTName		dc.b	"intuition.library",0
ArgTemplate	dc.b	"TITLE/A,BODY/A,GADGETS/M,PUBSCREEN/K",0,0
OutputString	dc.b	"%ld",$A,0,0

*****************************************************************************
		
Version dc.b "$VER: reqch 40.1 (23.10.96) replacement for requestchoice",0

* eof ***********************************************************************
