;TOSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPPPPPPBO
;
;Fast Assign Rafik/RDST/SCT
;last change 96-Dec-29

;TO add your own assign find label AssignTable:
;and write almost as in dos 
;in dos                             in source
;assign JFIF: dh0:jfif		    assign jfif,dh0:jfif
;Written in Trashmone 2.0

;NOTE dont add : in first argument!

*******************************************************************************
*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
*******************************************************************************

CALL:		MACRO
			jsr	_\1(a6)
		ENDM
EXEC:		MACRO
			move.l	4.w,a6
		ENDM


Start:
			moveq	#36,d0
			lea	DosName(pc),a1
			EXEC
			CALL	OpenLibrary
			move.l	d0,DosBase
			beq.w	WrongSys
			move.l	d0,a6
;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
			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
			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
DosBase:		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.0 (29.Dec.1996)',$A
			dc.b	' by Rafik/rdst',$a,0
AboutTXTEnd:

*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


;				includy

_CloseLibrary                    EQU                     -414
_OpenLibrary                     EQU                     -552
*************************************************************************
_Write                           EQU                     -48
_Output                          EQU                     -60
_Lock                            EQU                     -84
_UnLock                          EQU                     -90
_DupLock                         EQU                     -96
_CreateDir                       EQU                     -120
_AssignLock                      EQU                     -612
*************************************************************************
*unfold
