;/* sc resopt link optimize debug=line idir=include: nostartup nostackcheck opt data=far romver.c quit */ /* ** Example code on how to get currently used ROM version and revision ** ** Written by Harry "Piru" Sintonen ** Public Domain. ** */ #include #include #include #include #include #include #include int main(void) { int ret = RETURN_FAIL; struct ExecBase *SysBase; struct DosLibrary *DOSBase; SysBase = *((struct ExecBase **) 4); DOSBase = (struct DosLibrary *) OpenLibrary("dos.library", 37); if (DOSBase) { struct Resident *romtag; UWORD ver, rev; if (SysBase->LibNode.lib_Version >= 45 && (romtag = FindResident("AmigaOS ROM Update"))) { STRPTR ptr; LONG skip, val; ver = SysBase->LibNode.lib_Version; ptr = (STRPTR) romtag->rt_IdString; while (*ptr) { if (*ptr++ == ' ') { break; } } skip = StrToLong(ptr, &val); (void) StrToLong(ptr + 1 + skip, &val); rev = val; } else if (FindResident("MorphOS")) { ver = SysBase->LibNode.lib_Version; rev = SysBase->SoftVer; } else { ULONG rombase; /*rombase = (ULONG) SysBase->LibNode.lib_Node.ln_Name & 0xffff0000;*/ rombase = 0x01000000 - *((ULONG *) 0x00FFFFEC); ver = *((UWORD *) (rombase + 0xC)); rev = *((UWORD *) (rombase + 0xE)); } Printf("Kickstart %lu.%lu\n", ver, rev); ret = RETURN_OK; CloseLibrary((struct Library *) DOSBase); } return ret; }