home *** CD-ROM | disk | FTP | other *** search
- /*
- libinit.c
-
- EnthΣlt Standard Library Funtionen der amigauucpplus.library.
-
- Copyright (C) 1991 Ingo Feulner. Alle Rechte vorbehalten.
- */
-
- #include "uucpbase.h"
- #include "uucpproto.h"
-
- // Prototypes
- ULONG __asm LibExpunge(register __a6 struct UUCPBase *libbase);
- struct UUCPBase *__asm LibInit(register __d0 ULONG,
- register __a0 ULONG);
- struct UUCPBase *__asm LibOpen(register __a6 struct UUCPBase *);
- ULONG __asm LibClose(register __a6 struct UUCPBase *);
- ULONG __asm LibNull(VOID);
-
-
-
-
- struct UUCPBase *__asm LibInit(register __d0 ULONG lb,
- register __a0 ULONG seglist)
- {
- struct UUCPBase *UUCPBase;
-
- UUCPBase = (struct UUCPBase *)lb;
- UUCPBase->ub_SegList = seglist;
- UUCPBase->ConfigBuffer = NULL;
- UUCPBase->TempCounter = 0;
- UUCPBase->Error = NULL;
-
- // DOS Library V36 ÷ffnen (OS 2.0)
- UUCPBase->ub_DOSBase = (struct DosLibrary *)OpenLibrary(DOSNAME, 36L);
- if(UUCPBase->ub_DOSBase != NULL)
- {
- /* Memory Liste und Semaphore initialisieren */
- NewList((struct List *)&(UUCPBase->ub_MemList.ml_List));
- InitSemaphore(&(UUCPBase->ub_MemList.ml_Semaphore));
-
- return UUCPBase;
- }
-
- return NULL;
- }
-
- ULONG __asm LibExpunge(register __a6 struct UUCPBase *UUCPBase)
- {
- ULONG seglist;
-
- if(UUCPBase->LibNode.lib_OpenCnt == 0)
- {
- /* really expunge: remove libbase and freemem */
- Remove((struct Node *)UUCPBase);
-
- seglist = UUCPBase->ub_SegList;
-
- /* Meinen eigens allozierten Speicher wieder freigeben: */
- if(UUCPBase->ConfigBuffer != NULL)
- FreeMem(UUCPBase->ConfigBuffer, UUCPBase->CB_Length);
-
- UUFreeAllMem(NULL);
-
- /* Die DosLibrary wieder Schlie▀en: */
- CloseLibrary((struct Library *)UUCPBase->ub_DOSBase);
-
- FreeMem((void *)(((long)UUCPBase) - UUCPBase->LibNode.lib_NegSize),
- UUCPBase->LibNode.lib_NegSize + UUCPBase->LibNode.lib_PosSize);
-
- return (ULONG)seglist;
- }
- else
- {
- UUCPBase->LibNode.lib_Flags |= LIBF_DELEXP;
- return (ULONG)0;
- }
- }
-
- struct UUCPBase *__asm LibOpen(register __a6 struct UUCPBase *UUCPBase)
- {
- /* mark us as having another customer */
- UUCPBase->LibNode.lib_OpenCnt++;
-
- /* clear delayed expunges (standard procedure) */
- UUCPBase->LibNode.lib_Flags &= ~LIBF_DELEXP;
-
- return UUCPBase;
- }
-
- ULONG __asm LibClose(register __a6 struct UUCPBase *UUCPBase)
- {
- ULONG retval = 0;
-
- UUCPBase->LibNode.lib_OpenCnt--;
-
- // Speicher freigeben, der von der Library fⁿr diesen Task belegt wurde
- UUFreeAllMem(FindTask(NULL));
-
- if ((UUCPBase->LibNode.lib_OpenCnt == 0) &&
- (UUCPBase->LibNode.lib_Flags & LIBF_DELEXP ))
- {
- /* no more people have me open,
- * and I have a delayed expunge pending
- */
- retval = LibExpunge(UUCPBase); /* return segment list */
- }
- return retval;
- }
-
-
- ULONG __asm LibNull(VOID)
- {
- return 0;
- }
-