diff options
author | Vincent Sanders <vince@kyllikki.org> | 2016-05-05 22:28:51 +0100 |
---|---|---|
committer | Vincent Sanders <vince@kyllikki.org> | 2016-05-15 13:44:34 +0100 |
commit | d21447d096a320a08b3efb2b8768fad0dcdcfd64 (patch) | |
tree | 1a83814b7c9e94b2f13c473261f23dd3a17dee64 /amiga/os3support.c | |
parent | 2cbb337756d9af5bda4d594964d446439f602551 (diff) | |
download | netsurf-d21447d096a320a08b3efb2b8768fad0dcdcfd64.tar.gz netsurf-d21447d096a320a08b3efb2b8768fad0dcdcfd64.tar.bz2 |
move frontends into sub directory
Diffstat (limited to 'amiga/os3support.c')
-rw-r--r-- | amiga/os3support.c | 431 |
1 files changed, 0 insertions, 431 deletions
diff --git a/amiga/os3support.c b/amiga/os3support.c deleted file mode 100644 index b251448a6..000000000 --- a/amiga/os3support.c +++ /dev/null @@ -1,431 +0,0 @@ -/* - * Copyright 2014 Chris Young <chris@unsatisfactorysoftware.co.uk> - * - * This file is part of NetSurf, http://www.netsurf-browser.org/ - * - * NetSurf is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * NetSurf is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -/** \file - * Minimal compatibility header for AmigaOS 3 - */ - -#ifndef __amigaos4__ -#include "os3support.h" - -#include <inttypes.h> -#include <stdarg.h> -#include <stdio.h> - -#include <proto/bullet.h> -#include <proto/exec.h> -#include <proto/intuition.h> -#include <proto/dos.h> -#include <proto/utility.h> - -#include <diskfont/diskfont.h> -#include <diskfont/diskfonttag.h> -#include <intuition/gadgetclass.h> - -#include "utils/log.h" - -#define SUCCESS (TRUE) -#define FAILURE (FALSE) -#define NO ! - -/* Diskfont */ -struct OutlineFont *OpenOutlineFont(STRPTR fileName, struct List *list, ULONG flags) -{ - BPTR fh = 0; - int64 size = 0; - struct TagItem *ti; - UBYTE *buffer; - STRPTR fname, otagpath, fontpath; - struct BulletBase *BulletBase; - struct OutlineFont *of = NULL; - struct GlyphEngine *gengine; - char *p = 0; - struct FontContentsHeader fch; - - if(p = strrchr(fileName, '.')) - *p = '\0'; - - fontpath = (STRPTR)ASPrintf("FONTS:%s.font", fileName); - fh = Open(fontpath, MODE_OLDFILE); - - if(fh == 0) { - LOG("Unable to open FONT %s", fontpath); - FreeVec(fontpath); - return NULL; - } - - if(Read(fh, &fch, sizeof(struct FontContentsHeader)) != sizeof(struct FontContentsHeader)) { - LOG("Unable to read FONT %s", fontpath); - FreeVec(fontpath); - Close(fh); - return NULL; - } - - Close(fh); - - if(fch.fch_FileID != OFCH_ID) { - LOG("%s is not an outline font!", fontpath); - FreeVec(fontpath); - return NULL; - } - - otagpath = (STRPTR)ASPrintf("FONTS:%s.otag", fileName); - fh = Open(otagpath, MODE_OLDFILE); - - if(p) *p = '.'; - - if(fh == 0) { - LOG("Unable to open OTAG %s", otagpath); - FreeVec(otagpath); - return NULL; - } - - size = GetFileSize(fh); - buffer = (struct TagItem *)AllocVec(size, MEMF_ANY); - if(buffer == NULL) { - LOG("Unable to allocate memory"); - Close(fh); - FreeVec(otagpath); - return NULL; - } - - Read(fh, buffer, size); - Close(fh); - - /* The first tag is supposed to be OT_FileIdent and should equal 'size' */ - struct TagItem *tag = (struct TagItem *)buffer; - if((tag->ti_Tag != OT_FileIdent) || (tag->ti_Data != (ULONG)size)) { - LOG("Invalid OTAG file"); - FreeVec(buffer); - FreeVec(otagpath); - return NULL; - } - - /* Relocate all the OT_Indirect tags */ - while (ti = NextTagItem(&tag)) { - if(ti->ti_Tag & OT_Indirect) { - ti->ti_Data += buffer; - } - } - - /* Find OT_Engine and open the font engine */ - if(ti = FindTagItem(OT_Engine, buffer)) { - LOG("Using font engine %s", ti->ti_Data); - fname = ASPrintf("%s.library", ti->ti_Data); - } else { - LOG("Cannot find OT_Engine tag"); - FreeVec(buffer); - FreeVec(otagpath); - return NULL; - } - - BulletBase = OpenLibrary(fname, 0L); - - if(BulletBase == NULL) { - LOG("Unable to open font engine %s", fname); - FreeVec(buffer); - FreeVec(fname); - FreeVec(otagpath); - } - - FreeVec(fname); - - gengine = OpenEngine(); - - SetInfo(gengine, - OT_OTagPath, otagpath, - OT_OTagList, buffer, - TAG_DONE); - - of = AllocVec(sizeof(struct OutlineFont), MEMF_CLEAR); - if(of == NULL) return NULL; - - of->BulletBase = BulletBase; - of->GEngine = gengine; - of->OTagPath = otagpath; - of->olf_OTagList = buffer; - - return of; -} - -void CloseOutlineFont(struct OutlineFont *of, struct List *list) -{ - struct BulletBase *BulletBase = of->BulletBase; - - CloseEngine(of->GEngine); - CloseLibrary(BulletBase); - - FreeVec(of->OTagPath); - FreeVec(of->olf_OTagList); - FreeVec(of); -} - - -/* DOS */ -int64 GetFileSize(BPTR fh) -{ - int32 size = 0; - struct FileInfoBlock *fib = AllocVec(sizeof(struct FileInfoBlock), MEMF_ANY); - if(fib == NULL) return 0; - - ExamineFH(fh, fib); - size = fib->fib_Size; - - FreeVec(fib); - return (int64)size; -} - -void FreeSysObject(ULONG type, APTR obj) -{ - switch(type) { - case ASOT_PORT: - DeleteMsgPort(obj); - break; - case ASOT_IOREQUEST: - DeleteIORequest(obj); - break; - } -} - - -/* Exec */ -struct Node *GetHead(struct List *list) -{ - struct Node *res = NULL; - - if ((NULL != list) && (NULL != list->lh_Head->ln_Succ)) - { - res = list->lh_Head; - } - return res; -} - -struct Node *GetPred(struct Node *node) -{ - if (node->ln_Pred->ln_Pred == NULL) return NULL; - return node->ln_Pred; -} - -struct Node *GetSucc(struct Node *node) -{ - if (node->ln_Succ->ln_Succ == NULL) return NULL; - return node->ln_Succ; -} - - -/* Intuition */ -uint32 GetAttrs(Object *obj, Tag tag1, ...) -{ - va_list ap; - Tag tag = tag1; - ULONG data = 0; - int i = 0; - - va_start(ap, tag1); - - while(tag != TAG_DONE) { - data = va_arg(ap, ULONG); - i += GetAttr(tag, obj, (void *)data); - tag = va_arg(ap, Tag); - } - va_end(ap); - - return i; -} - -ULONG RefreshSetGadgetAttrsA(struct Gadget *g, struct Window *w, struct Requester *r, struct TagItem *tags) -{ - ULONG retval; - BOOL changedisabled = FALSE; - BOOL disabled; - - if (w) { - if (FindTagItem(GA_Disabled,tags)) { - changedisabled = TRUE; - disabled = g->Flags & GFLG_DISABLED; - } - } - retval = SetGadgetAttrsA(g,w,r,tags); - if (w && (retval || (changedisabled && disabled != (g->Flags & GFLG_DISABLED)))) { - RefreshGList(g,w,r,1); - retval = 1; - } - return retval; -} - -ULONG RefreshSetGadgetAttrs(struct Gadget *g, struct Window *w, struct Requester *r, Tag tag1, ...) -{ - return RefreshSetGadgetAttrsA(g,w,r,(struct TagItem *) &tag1); -} - -APTR NewObject(struct IClass * classPtr, CONST_STRPTR classID, ULONG tagList, ...) -{ - return NewObjectA(classPtr, classID, (const struct TagItem *) &tagList); -} - -/* Utility */ -struct FormatContext -{ - STRPTR Index; - LONG Size; - BOOL Overflow; -}; - -STATIC VOID ASM -StuffChar( - REG(a3, struct FormatContext * Context), - REG(d0, UBYTE Char)) -{ - /* Is there still room? */ - if(Context->Size > 0) - { - (*Context->Index) = Char; - - Context->Index++; - Context->Size--; - - /* Is there only a single character left? */ - if(Context->Size == 1) - { - /* Provide null-termination. */ - (*Context->Index) = '\0'; - - /* Don't store any further characters. */ - Context->Size = 0; - } - } - else - { - Context->Overflow = TRUE; - } -} - -BOOL -VSPrintfN( - LONG MaxLen, - STRPTR Buffer, - const STRPTR FormatString, - const va_list VarArgs) -{ - BOOL result = FAILURE; - - /* format a text, but place only up to MaxLen - * characters in the output buffer (including - * the terminating NUL) - */ - - if (Buffer == NULL || FormatString == NULL) return(result); - - if(MaxLen > 1) - { - struct FormatContext Context; - - Context.Index = Buffer; - Context.Size = MaxLen; - Context.Overflow = FALSE; - - RawDoFmt(FormatString,(APTR)VarArgs,(VOID (*)())StuffChar,(APTR)&Context); - - if(NO Context.Overflow) - result = SUCCESS; - } - - return(result); -} - -BOOL -SPrintfN( - LONG MaxLen, - STRPTR Buffer, - const STRPTR FormatString, - ...) -{ - va_list VarArgs; - BOOL result = FAILURE; - - /* format a text, varargs version */ - - if (Buffer == NULL && FormatString == NULL) return result; - - va_start(VarArgs,FormatString); - result = VSPrintfN(MaxLen,Buffer,FormatString,VarArgs); - va_end(VarArgs); - - return(result); -} - -char *ASPrintf(const char *fmt, ...) -{ - int r; - va_list ap; - static char buffer[2048]; - char *rbuf; - - va_start(ap, fmt); - r = VSPrintfN(2048, buffer, (const STRPTR)fmt, ap); - va_end(ap); - - r = strlen(buffer); - rbuf = AllocVec(r+1, MEMF_CLEAR); - if (rbuf != NULL) - { - strncpy(rbuf, buffer, r); - } - return rbuf; -} - -/* C */ -char *strlwr(char *str) -{ - size_t i; - size_t len = strlen(str); - - for(i=0; i<len; i++) - str[i] = tolower((unsigned char)str[i]); - - return str; -} - -char *strsep(char **s1, const char *s2) -{ - char *const p1 = *s1; - - if (p1 != NULL) { - *s1 = strpbrk(p1, s2); - if (*s1 != NULL) { - *(*s1)++ = '\0'; - } - } - return p1; -} - -int scandir(const char *dir, struct dirent ***namelist, - int (*filter)(const struct dirent *), - int (*compar)(const struct dirent **, const struct dirent **)) -{ - /*\todo stub function, needs writing, preferably into clib2 */ - return 0; -} - -long long int strtoll(const char *nptr, char **endptr, int base) -{ - return (long long int)strtol(nptr, endptr, base); -} - -#endif - |