mathtex-portable-engine-generated 0.1.2

Machine generated portable TeX engine core for mathtex, translated from the TeX, eTeX and XeTeX sources
Documentation
//! shared TeX core candidates auto-patched from TeX source when compatible (group `t`).
//! Generated by `cargo run -p mathtex-web2c-import --bin patch_engine`.

#![allow(dead_code, non_camel_case_types, non_snake_case, unused_assignments, unused_must_use, unused_mut, unused_variables)]

use crate::runtime::*;

impl<'resources> PortableTexEngine<'resources> {

    pub(crate) unsafe fn terminput(&mut self) -> EngineFlow<()> {
        let mut k: integer = 0;
        Self::boundary_flush_file(self.state.terminal_output);
        if Self::boundary_input_line(
            self as *mut PortableTexEngine<'_>,
            self.state.termin as *mut UFILE,
        ) == 0
        {
            self.state.curinput.limitfield = 0 as i32 as halfword;
            match (&mut *(self as *mut PortableTexEngine<'_>))
                .zfatalerror(65543 as i64 as strnumber)?
            {};
        }
        self.state.termoffset = 0 as i32 as integer;
        self.state.selector = self.state.selector.wrapping_sub(1);
        if self.state.last != self.state.first {
            let mut for_end: integer = 0;
            k = self.state.first;
            for_end = (self.state.last as i32 - 1 as i32) as integer;
            if k <= for_end {
                loop {
                    (&mut *(self as *mut PortableTexEngine<'_>))
                        .zprint(*self.state.buffer.offset(k as isize));
                    let fresh8 = k;
                    k = k + 1;
                    if !(fresh8 < for_end) {
                        break;
                    }
                }
            }
        }
        (&mut *(self as *mut PortableTexEngine<'_>)).println();
        self.state.selector = self.state.selector.wrapping_add(1);
        Ok(())
    }
    pub(crate) unsafe fn thetoks(&mut self) -> EngineFlow<halfword> {
        let mut Result: halfword = 0;
        let mut mem: *mut memoryword = self.state.zmem.as_mut_ptr();
        let mut oldsetting_0: eightbits = 0;
        let mut p: halfword = 0;
        let mut q: halfword = 0;
        let mut r: halfword = 0;
        let mut b: poolpointer = 0;
        let mut c_0: smallnumber = 0;
        if self.state.curchr as i32 & 1 as i32 != 0 {
            c_0 = self.state.curchr as smallnumber;
            (&mut *(self as *mut PortableTexEngine<'_>)).scangeneraltext()?;
            if c_0 as i32 == 1 as i32 {
                Result = self.state.curval as halfword;
            } else {
                oldsetting_0 = self.state.selector;
                self.state.selector = 21 as eightbits;
                b = self.state.poolptr;
                p = (&mut *(self as *mut PortableTexEngine<'_>)).getavail()?;
                (*mem.offset(p as isize)).hh.v.RH = (*mem
                    .offset((self.state.memtop as i32 - 3 as i32) as isize))
                    .hh
                    .v
                    .RH;
                (&mut *(self as *mut PortableTexEngine<'_>)).ztokenshow(p);
                (&mut *(self as *mut PortableTexEngine<'_>)).zflushlist(p);
                self.state.selector = oldsetting_0;
                Result = (&mut *(self as *mut PortableTexEngine<'_>)).zstrtoks(b)?;
            }
            return Ok(Result);
        }
        (&mut *(self as *mut PortableTexEngine<'_>)).getxtoken()?;
        (&mut *(self as *mut PortableTexEngine<'_>))
            .zscansomethinginternal(5 as i32 as smallnumber, 0 as i32)?;
        if self.state.curvallevel as i32 >= 4 as i32 {
            p = (self.state.memtop as i32 - 3 as i32) as halfword;
            (*mem.offset(p as isize)).hh.v.RH = -(268435455 as i64) as halfword;
            if self.state.curvallevel as i32 == 4 as i32 {
                q = (&mut *(self as *mut PortableTexEngine<'_>)).getavail()?;
                (*mem.offset(p as isize)).hh.v.RH = q;
                (*mem.offset(q as isize)).hh.v.LH = (33554431 as i64
                    + self.state.curval as i64) as halfword;
                p = q;
            } else if self.state.curval as i64 != -(268435455 as i64) {
                r = (*mem.offset(self.state.curval as isize)).hh.v.RH;
                while r as i64 != -(268435455 as i64) {
                    q = self.state.avail;
                    if q as i64 == -(268435455 as i64) {
                        q = (&mut *(self as *mut PortableTexEngine<'_>)).getavail()?;
                    } else {
                        self.state.avail = (*mem.offset(q as isize)).hh.v.RH;
                        (*mem.offset(q as isize)).hh.v.RH = -(268435455 as i64)
                            as halfword;
                        self.state.dynused += 1;
                    }
                    (*mem.offset(p as isize)).hh.v.RH = q;
                    (*mem.offset(q as isize)).hh.v.LH = (*mem.offset(r as isize))
                        .hh
                        .v
                        .LH;
                    p = q;
                    (&mut *(self as *mut PortableTexEngine<'_>)).zsrctokencopy(p, r);
                    r = (*mem.offset(r as isize)).hh.v.RH;
                }
            }
            Result = p;
        } else {
            oldsetting_0 = self.state.selector;
            self.state.selector = 21 as eightbits;
            b = self.state.poolptr;
            match self.state.curvallevel as i32 {
                0 => {
                    (&mut *(self as *mut PortableTexEngine<'_>))
                        .zprintint(self.state.curval);
                }
                1 => {
                    (&mut *(self as *mut PortableTexEngine<'_>))
                        .zprintscaled(self.state.curval);
                    (&mut *(self as *mut PortableTexEngine<'_>))
                        .zprint(65697 as i64 as integer);
                }
                2 => {
                    (&mut *(self as *mut PortableTexEngine<'_>))
                        .zprintspec(self.state.curval, 65697 as i64 as strnumber);
                    (&mut *(self as *mut PortableTexEngine<'_>))
                        .zdeleteglueref(self.state.curval);
                }
                3 => {
                    (&mut *(self as *mut PortableTexEngine<'_>))
                        .zprintspec(self.state.curval, 65625 as i64 as strnumber);
                    (&mut *(self as *mut PortableTexEngine<'_>))
                        .zdeleteglueref(self.state.curval);
                }
                _ => {}
            }
            self.state.selector = oldsetting_0;
            Result = (&mut *(self as *mut PortableTexEngine<'_>)).zstrtoks(b)?;
        }
        return Ok(Result);
    }
    pub(crate) unsafe fn trapzeroglue(&mut self) {
        let mut mem: *mut memoryword = self.state.zmem.as_mut_ptr();
        if (*mem.offset((self.state.curval as i32 + 1 as i32) as isize)).u.CINT
            == 0 as i32
            && (*mem.offset((self.state.curval as i32 + 2 as i32) as isize)).u.CINT
                == 0 as i32
            && (*mem.offset((self.state.curval as i32 + 3 as i32) as isize)).u.CINT
                == 0 as i32
        {
            let ref mut fresh171 = (*mem.offset(self.state.membot as isize)).hh.v.RH;
            *fresh171 += 1;
            (&mut *(self as *mut PortableTexEngine<'_>))
                .zdeleteglueref(self.state.curval);
            self.state.curval = self.state.membot;
        }
    }
}