DevCall NDev * DevInit(register __a0 APTR seg) { static func_ptr DevVectors[] = { (func_ptr)DevOpen, (func_ptr)DevClose, (func_ptr)DevExpunge, (func_ptr)DevReserved, (func_ptr)DevBeginIO, (func_ptr)DevAbortIO, (func_ptr)-1 }; NDev *db; DevBase = db = (NDev *)MakeLibrary((long **)DevVectors,NULL,NULL,sizeof(NDev),NULL); db->Lib.lib_Node.ln_Type = NT_DEVICE; db->Lib.lib_Node.ln_Name = DeviceName; db->Lib.lib_Flags = LIBF_CHANGED|LIBF_SUMUSED; db->Lib.lib_Version = 1; db->Lib.lib_IdString= (APTR)IdString; DevSegment = seg; AddDevice((DEV *)db); return(db); }
void CompileLibrary(FObject expr) { if (PairP(Rest(expr)) == 0) RaiseExceptionC(R.Syntax, "define-library", "expected a library name", List(expr)); FObject ln = LibraryName(First(Rest(expr))); if (PairP(ln) == 0) RaiseExceptionC(R.Syntax, "define-library", "library name must be a list of symbols and/or integers", List(First(Rest(expr)))); FObject env = MakeEnvironment(ln, FalseObject); FObject body = ReverseListModify(ExpandLibraryDeclarations(env, Rest(Rest(expr)), EmptyListObject)); FObject proc = CompileLibraryCode(env, body); FObject exports = CompileExports(env, body); FObject akalst = CompileAkas(env, body); UndefinedList = EmptyListObject; EqHashMapVisit(AsEnvironment(env)->HashMap, Visit, NoValueObject); if (UndefinedList != EmptyListObject) RaiseExceptionC(R.Syntax, "define-library", "identifier(s) used but never defined", List(UndefinedList, expr)); FObject lib = MakeLibrary(ln, exports, proc); while (akalst != EmptyListObject) { FAssert(PairP(akalst)); FAssert(LibraryP(lib)); MakeLibrary(First(akalst), AsLibrary(lib)->Exports, NoValueObject); akalst = Rest(akalst); } }
static int libInit(LIBBASETYPEPTR nh) { struct NepSerialBase *ret = NULL; KPRINTF(10, ("libInit nh: 0x%08lx SysBase: 0x%08lx\n", nh, SysBase)); nh->nh_UtilityBase = OpenLibrary("utility.library", 39); #define UtilityBase nh->nh_UtilityBase if(UtilityBase) { NewList(&nh->nh_Units); if((nh->nh_DevBase = (struct NepSerDevBase *) MakeLibrary((APTR) DevFuncTable, NULL, (APTR) devInit, sizeof(struct NepSerDevBase), NULL))) { nh->nh_DevBase->np_ClsBase = nh; /*NewList(&nh->nh_DummyUnit.unit_MsgPort.mp_MsgList); nh->nh_DummyUnit.unit_MsgPort.mp_SigBit = 0; nh->nh_DummyUnit.unit_MsgPort.mp_SigTask = NULL; nh->nh_DummyUnit.unit_MsgPort.mp_Node.ln_Type = NT_MSGPORT; nh->nh_DummyUnit.unit_MsgPort.mp_Flags = PA_IGNORE;*/ Forbid(); AddDevice((struct Device *) nh->nh_DevBase); nh->nh_DevBase->np_Library.lib_OpenCnt++; Permit(); ret = nh; } else { KPRINTF(20, ("failed to create palmpda.device\n")); } if(!ret) { CloseLibrary(UtilityBase); } } else { KPRINTF(20, ("libInit: OpenLibrary(\"utility.library\", 39) failed!\n")); } KPRINTF(10, ("libInit: Ok\n")); return(ret ? TRUE : FALSE); }
struct DevData *DevInit(REG(d0, ULONG num), REG(a0, void *seglist), REG(a6, struct Library *sysb)) { struct DevData *dd; struct Library *SysBase = sysb; if (dd = (struct DevData*)MakeLibrary(FuncTable, NULL, NULL, sizeof(struct DevData), 0)) { dd->dd_Lib.lib_Node.ln_Type = NT_DEVICE; dd->dd_Lib.lib_Node.ln_Name = (TEXT *)romtag.rt_Name; dd->dd_Lib.lib_Flags = LIBF_CHANGED | LIBF_SUMUSED; dd->dd_Lib.lib_Version = DEV_VERSION; dd->dd_Lib.lib_Revision = DEV_REVISION; dd->dd_Lib.lib_IdString = (TEXT *)romtag.rt_IdString; dd->dd_Lib.lib_OpenCnt = 0; dd->dd_SegList = seglist; dd->dd_SysBase = SysBase; if (OpenDeviceLibraries(dd)) { USE_D(DOSBase) WORD i; for (i = 0; i < 4; i++) dd->dd_Units[i] = NULL; #ifdef PDEBUG strcpy(dd->dpath, "KCON:0/17/400/300/prm-rtl8029.device (main)/AUTO/CLOSE/WAIT"); GetVar("PrometheusDebug", dd->dpath, 128, 0); dd->debug = Open(dd->dpath, MODE_NEWFILE); #endif DBG1("Device initialized, base at $%08lx.", dd); AddDevice((struct Device*)dd); return dd; } CloseDeviceLibraries(dd); } return NULL; }
FObject MakeLibrary(FObject nam) { return(MakeLibrary(nam, EmptyListObject, NoValueObject)); }