Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
    }
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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;
  }
Esempio n. 5
0
FObject MakeLibrary(FObject nam)
{
    return(MakeLibrary(nam, EmptyListObject, NoValueObject));
}