Annotation of qemu/roms/openbios/libopenbios/forth_load.c, revision 1.1

1.1     ! root        1: /* tag: forth source loader
        !             2:  *
        !             3:  * Copyright (C) 2004 Stefan Reinauer
        !             4:  *
        !             5:  * See the file "COPYING" for further information about
        !             6:  * the copyright and warranty status of this work.
        !             7:  */
        !             8: 
        !             9: #include "config.h"
        !            10: #include "kernel/kernel.h"
        !            11: #include "libopenbios/bindings.h"
        !            12: #include "libopenbios/sys_info.h"
        !            13: #include "libc/diskio.h"
        !            14: #include "libopenbios/forth_load.h"
        !            15: #define printk printk
        !            16: #define debug printk
        !            17: 
        !            18: static int fd;
        !            19: static char *forthtext=NULL;
        !            20: 
        !            21: int is_forth(char *forth)
        !            22: {
        !            23:        return (forth[0] == '\\' && forth[1] == ' ');
        !            24: }
        !            25: 
        !            26: int forth_load(ihandle_t dev)
        !            27: {
        !            28:     char magic[2];
        !            29:     unsigned long forthsize;
        !            30:     int retval = -1;
        !            31: 
        !            32:     /* Mark the saved-program-state as invalid */
        !            33:     feval("0 state-valid !");
        !            34: 
        !            35:     fd = open_ih(dev);
        !            36:     if (fd == -1) {
        !            37:        goto out;
        !            38:     }
        !            39: 
        !            40:     if (read_io(fd, magic, 2) != 2) {
        !            41:        debug("Can't read magic header\n");
        !            42:        retval = LOADER_NOT_SUPPORT;
        !            43:        goto out;
        !            44:     }
        !            45: 
        !            46:     if (!is_forth(magic)) {
        !            47:        debug("No forth source image\n");
        !            48:        retval = LOADER_NOT_SUPPORT;
        !            49:        goto out;
        !            50:     }
        !            51: 
        !            52:     /* Calculate the file size by seeking to the end of the file */
        !            53:     seek_io(fd, -1);
        !            54:     forthsize = tell(fd);
        !            55:     forthtext = malloc(forthsize+1);
        !            56:     seek_io(fd, 0);
        !            57: 
        !            58:     printk("Loading forth source ...");
        !            59:     if ((size_t)read_io(fd, forthtext, forthsize) != forthsize) {
        !            60:        printk("Can't read forth text\n");
        !            61:        goto out;
        !            62:     }
        !            63:     forthtext[forthsize]=0;
        !            64:     printk("ok\n");
        !            65: 
        !            66:     // Initialise saved-program-state
        !            67:     PUSH((ucell)forthtext);
        !            68:     feval("saved-program-state >sps.entry !");
        !            69:     PUSH((ucell)forthsize);
        !            70:     feval("saved-program-state >sps.file-size !");
        !            71:     feval("forth saved-program-state >sps.file-type !");
        !            72: 
        !            73:     feval("-1 state-valid !");
        !            74: 
        !            75:     retval=0;
        !            76: 
        !            77: out:
        !            78:     //if (forthtext)
        !            79:     // free(forthtext);
        !            80:     return retval;
        !            81: }
        !            82: 
        !            83: void 
        !            84: forth_init_program(void)
        !            85: {
        !            86:        // Currently not implemented
        !            87:        feval("0 state-valid !");
        !            88: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.