;TOSPJPKPJPKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHPCAAAAAEHDAAAAAJCKAAAAAAAAAAAAAAAAAGAEPAHH
;
;Fast Assign Plus Rafik/RDST/SCT
;last change 97-V-29

*******************************************************************************
*Program ten tworzy katalog ram:T i assignuje tam t:
*Tworzy równieû assigny:    ENV:, PRINTERS:, CLIPBOARDS:, i pare innych
*Potrzebny system 2.0+
*Eliminuje komendy :
*Assign >NIL: ENV: DH0:ENV
*Assign >NIL: T: RAM:T
*Assign >NIL: CLIPS: DH0:T/Clipboards
*Assign >NIL: REXX: S:			;<nie
*Assign >NIL: PRINTERS: DEVS:Printers
*Assign >NIL: KEYMAPS: DEVS:Keymaps
*Assign >NIL: LOCALE: SYS:Locale
*Assign >NIL: LIBS: SYS:Classes ADD	;<nie
*Assign >NIL: HELP: dh0:Help DEFER
*******************************************************************************

VERSION:	MACRO
	dc.b	'3.03 (97-V-29)'
	ENDM


		incdir	hd1:sources/
		include	macra.s
		include	lvos.i

Start:
			moveq	#36,d0
			lea	DosName(pc),a1
			EXEC
			CALL	OpenLibrary
			move.l	d0,DosBase
			beq.w	WrongSys
			move.l	d0,a6

			bsr	ReadArgs

		ml	array(pc),d0
		bne.s	EndTable

;make directory!
			move.l	#T_Name,d1
			CALL	CreateDir
			move.l	d0,d1
			beq.s	.skip		;CloseLib
;najprawdopodobniej objekt juû istnieje!
			CALL	UnLock
.skip


			lea	AssignTable(pc),a0
AssignLoop:
			tst.b	(a0)
			beq.s	EndTable
			move.l	a0,d1
.1			tst.b	(a0)+
			bne.s	.1

			bsr	doassign

			move.l	DosName,a0
.loop			tst.b	(a0)+
			bne.s	.loop
			bra.s	AssignLoop

EndTable:
			CALL	Output
                        move.l  d0,d1
			beq.s	CloseLib

			move.l	#AboutTXT,d2
			move.l  #AboutTXTEnd-AboutTXT-1,d3
			CALL	Write

CloseLib:
			move.l	a6,a1
			EXEC
			CALL	CloseLibrary
			moveq	#0,d0
			rts
WrongSys:
			moveq	#-1,d0
			rts

doassign:		move.l	a0,TableAdr
			moveq	#-2,d2	;mode read
			CALL	Lock
			move.l	d0,d2
			move.l	d0,Lock
			move.l	TableAdr,d1
			CALL	AssignLock	;d2lock d1name
			tst.l	d0
			bne.s	.ok
;bîâd przy assignie!
			move.l	Lock,d1
			CALL	UnLock
.ok
			rts

ReadArgs:	
		ml	#template,d1	;template
		ml	#array,d2
		q0	d3
		CALL	ReadArgs
		ml	d0,_readargs
		beq.w	rts

	;	bsr	request

		ml	array+4,d0
		beq.s	.skip
		ml	d0,a5
.loop
		tst.l	(a5)
		beq.s	.skip
		ml	(a5)+,a0	;offset volume: name
;--------------------------cut :----------------
		ml	a0,a2
.loo		tst.b	(a2)
		beq.s	.esc
		cmp.b	#':',(a2)+
		bne.s	.loo
		clr.b	-1(a2)
.esc
;--------------------------cut :---------------
		tst.l	(a5)
		beq.s	.skip
		ml	(a5)+,d1	;offset name

		bsr	doassign
		bra.s	.loop
.skip
		ml	_readargs,d1
		CALL	FreeArgs

rts		rts

DosBase:		dc.l	0
array:			dc.l	0,0,0

_readargs:		dc.l	0
			even
TableAdr:		;uûywa adresu DosName poniewaû po otwarciu biblioteki
			;text dos.library nie jest juû nam potrzebny!
Lock:	equ	*+4	;adres DosName+4 tak jak wyûej
DosName:		dc.b	'dos.library',0	;tu wrzucam baze tabeli assig


assign:	MACRO
	dc.b	'\2',0,'\1',0
	ENDM


AssignTable:		;podajesz gdzie zaasignowaê i nazwe assigna!

		assign	ENV,sys:env
T_Name:		assign	T,ram:T
		assign	CLIPS,ram:t
		assign	PRINTERS,devs:printers
		assign	KEYMAPS,devs:keymaps
		assign	LOCALE,sys:locale
		assign	HELP,ram:

;KONIEC TABELI NA 2 zerach!!!
		dc.b	0,0

			dc.b	'$VER:'
AboutTXT:		dc.b	' FastAssign V3.03 (97-V-29)',$A
			dc.b	' by Rafik & Big Foot of RDST',$a
			dc.b	' email: rafik@mat29_1.univ.gda.pl',$a
			dc.b	0
AboutTXTEnd:


template:		dc.b	'ARGONLY/S,DIRS/M',0

*Assign >NIL: ENV: DH0:ENV
*Assign >NIL: T: RAM:T
*Assign >NIL: CLIPS: DH0:T/Clipboards
*Assign >NIL: PRINTERS: DEVS:Printers
*Assign >NIL: KEYMAPS: DEVS:Keymaps
*Assign >NIL: LOCALE: SYS:Locale
*Assign >NIL: HELP: dh0:Help DEFER	;na ram:t/ help!

*Assign >NIL: LIBS: SYS:Classes ADD	;<-nie
*Assign >NIL: REXX: S:			;<-nie


;	even
;request:
;>>>>>test
;----------example request
;	pusha
;
;	EXEC
;	lea	rq_Name,a1
;	CALL	OldOpenLibrary
;	ml	d0,b_rq
;
;	movel	rq
;	q0 d0
;	CALL	rq_AllocRequest
;	ml	d0,__request
;
;	lea	TestTxt,a0
;	lea	Response,a1
;	lea	Tags,a2
;	lea	array,a4
;	ml	array,a4
;	ml	_readargs,a4
;	ml	a4,string
;	lea	string,a4
;
;	ml	#array,string+4
;
;
;	ml __request,d0 ;lea RequestStr,a5 ;TO POWINNO BYÊ ZAALOCOWANE!
;	CALL	rq_Request
;			;jsr	-42(a6)	;rq_Request
;
;	ml __request,d0 ;lea RequestStr,a5 ;TO POWINNO BYÊ ZAALOCOWANE!
;	CALL	rq_FreeRequest
;
;	popa
;
;	rts
;__request:	dc.l	0
;
;
;Tags:	;dc.l	rqLOGO,rq_logo
;	dc.l	rqWindowTitle,title
;	dc.l	rqScreenTitle,title
;	dc.l	rqStringMax,10
;
;	dc.l	0
;
;b_rq:	dc.l	0
;
;
;string:	dc.l	0
;	dc.l	0
;	dc.l	0
;	dc.l	0
;	dc.l	0
;	dc.l	0
;
;
;Response:	dc.b	'ok|ok',0
;title:	dc.b	'Wersja testowa!!',0
;
;TestTxt:	dc.b	'Request Library',$a
;	dc.b	'structre = %ld',$a
;	dc.b	'bitmap adr = %ld',$a
;	dc.b	'%ld,%ld,',0
;
;rq_Name:	dc.b	'request.library',0
;
;	even
;
;>>>>>test
;--------------------------tags definition
;definicja tagów
;tu set $80000000
;
;tag:	macro
;\1=tu
;tu set tu+1
;	endm
;
;	tag	rqLOGO	;structure image
;	tag	rqWindowB
;	tag	rqWindowPtr
;	tag	rqWindowTitle
;	tag	rqScreenTitle
;	tag	rqScreenB
;	tag	rqScreenPtr	;*
;	tag	rqCenterScreen
;	tag	rqLockWindow	;*
;	tag	rqMouseMove	;R*
;	tag	rqCloseGad
;	tag	rqString	;s adres textu (buffor dla string gad..)
;	tag	rqStringMax	;s maxymalna iloôê tekstu
;
;
;
;--------------------------tags definition
;--------------------------jumps
;to set -30
;cal:	macro
;_\1=to
;to set to-6
;	endm
;
;	cal	rq_AllocRequest
;	cal	rq_FreeRequest
;	cal	rq_Request
;	cal	rq_OpenLib
;
;--------------------------jumps
