⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bfunc.java

📁 类似于Windows上的Excel
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
    public static final int INDEX_SCREEN_SETMODE = INDEX_DEBUG_SET + 1;
    public static final int INDEX_SCREEN_SETFORMULABAR = INDEX_SCREEN_SETMODE + 1;
    public static final int INDEX_FORMULABAR_REPAINT = INDEX_SCREEN_SETFORMULABAR + 1;
    public static final int INDEX_SCREEN_GETMODE = INDEX_FORMULABAR_REPAINT + 1;
    public static final int INDEX_SCREEN_GETFORMULABAR = INDEX_SCREEN_GETMODE + 1;
    public static final int INDEX_PARSE_WS = INDEX_SCREEN_GETFORMULABAR + 1;
    public static final int INDEX_CELL_CREATE_WS = INDEX_PARSE_WS + 1;
    public static final int INDEX_SCREEN_SETFONT = INDEX_CELL_CREATE_WS + 1;
    public static final int INDEX_SHEET_SETDEFAULTSIZE = INDEX_SCREEN_SETFONT + 1;
    public static final int INDEX_HISTORY_GET = INDEX_SHEET_SETDEFAULTSIZE + 1;
    
    public static final int INDEX_CELL_ADDRESS = INDEX_HISTORY_GET + 1;
    public static final int INDEX_SHEET_ISCHANGED = INDEX_CELL_ADDRESS + 1;
    public static final int INDEX_SHEET_SETCHANGED = INDEX_SHEET_ISCHANGED + 1;
    public static final int INDEX_COLORS_SET = INDEX_SHEET_SETCHANGED + 1;
    public static final int INDEX_QLIST = INDEX_COLORS_SET + 1;
    public static final int INDEX_COLOR_RGB = INDEX_QLIST + 1;
    public static final int INDEX_APP_GETPROPERTY = INDEX_COLOR_RGB + 1;

    public static final int INDEXSTART_MINIMAL_SET = INDEX_APP_GETPROPERTY+1;
//#ifndef MINIMAL_SET
    public static final int INDEX_QLIST_TO_SHEET = INDEXSTART_MINIMAL_SET;
    public static final int INDEX_DEFMACRO = INDEX_QLIST_TO_SHEET+1;
    public static final int INDEX_SEXP_GETTYPE = INDEX_DEFMACRO+1;
    public static final int INDEX_SEXP_PREPROCESS = INDEX_SEXP_GETTYPE+1;
    public static final int INDEX_GOLD_SET = INDEX_SEXP_PREPROCESS+1;
    public static final int INDEX_THROW_ERROR = INDEX_GOLD_SET+1;
    public static final int INDEXSTOP_MINIMAL_SET = INDEX_THROW_ERROR+1;
//#else
//#    public static final int INDEXSTOP_MINIMAL_SET = INDEXSTART_MINIMAL_SET;
//#endif    

    public static final int INDEXSTART_JAVA_COMPILER = INDEXSTOP_MINIMAL_SET;
//#ifdef JAVA_COMPILER
    public static final int INDEX__IF = INDEXSTART_JAVA_COMPILER;
    public static final int INDEX__INCLUDE = INDEX__IF+1;
    public static final int INDEXSTOP_JAVA_COMPILER = INDEX__INCLUDE+1;
//#else
//#    public static final int INDEXSTOP_JAVA_COMPILER = INDEXSTART_JAVA_COMPILER;
//#endif    
  
    
    public void initializeNames() {
        
        namesArray = _namesArray.getBytes();
        
        namesArrayCount = namesArray.length;
        
        table = new ModuleName[] {
                new ModuleName(NAME_IF),
                new ModuleName(NAME_WHILE),
                new ModuleName(NAME_SETQ),
                new ModuleName(NAME_DEFUN),
                new ModuleName(NAME_SADD),
                new ModuleName(NAME_SSUB),
                new ModuleName(NAME_SMUL),
                new ModuleName(NAME_SDIV),
                new ModuleName(NAME_SGT),
                new ModuleName(NAME_SGE),
                new ModuleName(NAME_SLT),
                new ModuleName(NAME_SLE),
                new ModuleName(NAME_SEQ),
                new ModuleName(NAME_SNE),
                new ModuleName(NAME_LOAD),
                new ModuleName(NAME_MODULE_LOAD),
                new ModuleName(NAME_ISNIL),

				new ModuleName(NAME_SHEET_CREATE),
                new ModuleName(NAME_CELL_CREATE),
                new ModuleName(NAME_REF),
                new ModuleName(NAME_CURSOR_SET),
                new ModuleName(NAME_CURSOR_MOVE),
                new ModuleName(NAME_CURSOR_GET),
                new ModuleName(NAME_SHEET_ADDCELL),
                new ModuleName(NAME_CELL_GETFORMULA),
                new ModuleName(NAME_CELL_SETFORMULA),
                new ModuleName(NAME_CELL_GETWSFORMULA),
                new ModuleName(NAME_CELL_SETWSFORMULA),
                new ModuleName(NAME_SHEET_GETCELL),
                new ModuleName(NAME_SEXP_PARSE),
                new ModuleName(NAME_CELL_ACTIVE),
                new ModuleName(NAME_SHEET_RECALCULATE),
                new ModuleName(NAME_SEXP_EVALUATE),
                new ModuleName(NAME_CELL_REPAINT),
                new ModuleName(NAME_DATE),
                new ModuleName(NAME_ROWCOLUMN),
                new ModuleName(NAME_SHEET_ACTIVATE),
                new ModuleName(NAME_SHEET_ACTIVE),
                new ModuleName(NAME_SHEET_SAVE),
                new ModuleName(NAME_SHEET_LOAD),
                new ModuleName(NAME_SHEET_GETNAME),
                new ModuleName(NAME_SHEET_SETNAME),
                new ModuleName(NAME_SHEET_LIST),
                new ModuleName(NAME_CELL_SETFORMAT),
                new ModuleName(NAME_CELL_GETFORMAT),
                new ModuleName(NAME_SHEET_DELETE),
                new ModuleName(NAME_MESSAGE),
                new ModuleName(NAME_SHEET_GETWIDTHHEIGHT),
                new ModuleName(NAME_SHEET_SETWIDTHHEIGHT),
                new ModuleName(NAME_SHEET_REPAINT),
                new ModuleName(NAME_SELECTION_GET),
                new ModuleName(NAME_SELECTION_SET),
                new ModuleName(NAME_GOLD_KEY),
                new ModuleName(NAME_CELL_CLEAR),
                new ModuleName(NAME_REFERENCE_PROCESS),
                new ModuleName(NAME_SELECTION),
                new ModuleName(NAME_SETSHEETSIZE),
                new ModuleName(NAME_SHEET_INSERT),
                new ModuleName(NAME_CELL_GETWSVALUE),
                new ModuleName(NAME_STR_GETWIDTH),
                new ModuleName(NAME_CELL_COPY),
                new ModuleName(NAME_CELL_COPYFROM),
                new ModuleName(NAME_CELL_GETTYPE),
                new ModuleName(NAME_ERROR),
                new ModuleName(NAME_SYSTEM_INFO),
                new ModuleName(NAME_DEBUG_SET),
                new ModuleName(NAME_SCREEN_SETMODE),
                new ModuleName(NAME_SCREEN_SETFORMULABAR),
                new ModuleName(NAME_FORMULABAR_REPAINT),
                new ModuleName(NAME_SCREEN_GETMODE),
                new ModuleName(NAME_SCREEN_GETFORMULABAR),
                new ModuleName(NAME_PARSE_WS),
                new ModuleName(NAME_CELL_CREATE_WS),
                new ModuleName(NAME_SCREEN_SETFONT),
                new ModuleName(NAME_SHEET_SETDEFAULTSIZE),
                new ModuleName(NAME_HISTORY_GET),
				
                new ModuleName(NAME_CELL_ADDRESS),
                new ModuleName(NAME_SHEET_ISCHANGED),
                new ModuleName(NAME_SHEET_SETCHANGED),
                new ModuleName(NAME_COLORS_SET),
                new ModuleName(NAME_QLIST),
                new ModuleName(NAME_COLOR_RGB),
                new ModuleName(NAME_APP_GETPROPERTY),
//#ifndef MINIMAL_SET                
                new ModuleName(NAME_QLIST_TO_SHEET),
                new ModuleName(NAME_DEFMACRO),
                new ModuleName(NAME_SEXP_GETTYPE),
                new ModuleName(NAME_SEXP_PREPROCESS),
                new ModuleName(NAME_GOLD_SET),
                new ModuleName(NAME_THROW_ERROR),
//#endif                
//#ifdef JAVA_COMPILER                
                new ModuleName(NAME__IF),
                new ModuleName(NAME__INCLUDE),
//#endif				
        };
        
        namesCount = table.length;
    }
    
    // implementation for BFUNC, children classes must have their own implementation
    public LispObject evaluate( ModuleName modulename, FunctorList sexp ) throws EvaluateException {
            int size = sexp.listSize();
//#ifdef NOGUI    
//            CanvasHandler1 canvasHandler = null;
			Sheet sheet = null;
//#else            
//#            CanvasHandler1 canvasHandler = CanvasHandler1.canvasHandler;
//#            Sheet sheet = canvasHandler.sheet;
//#endif
            
//            NameObject name = sexp.functor;

            int optype = modulename.offset;
            switch( optype ) {
                // control ops
                case NAME_IF:
                {
                    if ( ((BooleanAtom)sexp.evaluateArg1()).value )
                        return sexp.interpretArg2();
                    else if( size == 4 )
                        return sexp.interpretArg3();
                    else
                        return NIL;
                }
                case NAME_WHILE:
                {
                    while ( ((BooleanAtom)sexp.evaluateArg1()).value ) {
                        for (int i = 2; i < size; i++)
                            sexp.interpretArgN(i);
                    }
                    return NIL;
                }
                case NAME_SETQ:
                {
                    NameObjectBase nm = (NameObjectBase)sexp.getArgument1();
                    return nm.setMappedObject(sexp.evaluateArg2());
                }
                case NAME_DEFUN:
//#ifndef MINIMAL_SET                	
                case NAME_DEFMACRO:
//#endif                	
                {
                    NameObjectBase funname = (NameObjectBase)sexp.getArgument1();
                    QuotedList local_args = sexp.getArgument2().toQuotedList();
                    LispObject code_body;
                    if(size==4)
                        code_body = sexp.getArgument3();
                    else
                        code_body = new QuotedList(sexp,3,size);
                    // create a new user function with this stuff
//#ifndef MINIMAL_SET                	
                    UserFunction fn = new UserFunction(optype==NAME_DEFMACRO,funname, local_args, code_body);
//#else                    
//#                    UserFunction fn = new UserFunction(false,funname, local_args, code_body);
//#endif                	
                    // System.out.println("Binding function: " + name);
                    return NIL;
                }

                // short math ops
                case NAME_SADD:
                case NAME_SSUB:
                case NAME_SMUL:
                case NAME_SDIV:
                case NAME_SGT:
                case NAME_SGE:
                case NAME_SLT:
                case NAME_SLE:
                case NAME_SEQ:
                case NAME_SNE:
                {
                    int ff1 = sexp.getShort1();
                    int ff2 = sexp.getShort2();
                    int ff3 = 0;
                    boolean bb = false;
                    switch( optype ) {
                        case NAME_SADD:
                            ff3 = ff1 + ff2;
                            break;
                        case NAME_SSUB:
                            ff3 = ff1 - ff2;
                            break;
                        case NAME_SMUL:
                            ff3 = ff1 * ff2;
                            break;
                        case NAME_SDIV:
                            ff3 = ff1 / ff2;
                            break;
                        case NAME_SGT:
                            bb = ff1 > ff2;
                            break;
                        case NAME_SGE:
                            bb = ff1 >= ff2;
                            break;
                        case NAME_SLT:
                            bb = ff1 < ff2;
                            break;
                        case NAME_SLE:
                            bb = ff1 <= ff2;
                            break;
                        case NAME_SEQ:
                            bb = ff1 == ff2;
                            break;
                        case NAME_SNE:
                            bb = ff1 != ff2;
                            break;
                    }
                    switch( optype ) {
                        case NAME_SADD:
                        case NAME_SSUB:
                        case NAME_SMUL:
                        case NAME_SDIV:
                            return new ShortAtom( ff3 );
                        case NAME_SGT:
                        case NAME_SGE:
                        case NAME_SLT:
                        case NAME_SLE:
                        case NAME_SEQ:
                        case NAME_SNE:
                            return bb ? BooleanAtom.TRUE : BooleanAtom.FALSE;
                    }
                }
//#ifndef MINIMAL_SET                
                case NAME_LOAD:
                    try {
                        return loadFile( sexp.getString1() ).interpret();
                    }
                    catch( ParseException ee ) {
                        throw new EvaluateException( ee.getMessage(), sexp );
                    }
                case NAME_MODULE_LOAD:
                {
                    /* (module-load classname:string) -> FunctionObject */
                    String classname = sexp.getString1();
                    // FIXME call initializeNames()
                    return ModuleHandler.getFunctionModule( classname );
                }
                case NAME_ISNIL:
                    /* (isnil LispObject) -> BooleanAtom */
                    return BooleanAtom.createBoolean( sexp.evaluateArg1() == NIL );
//#endif                    
                case NAME_SHEET_CREATE:
                    /** (sheet-create '(columns) '(rows) '(cells)) -> sheet */
                    return fromList( sexp );
//#ifndef NOGUI    
                case NAME_SHEET_ACTIVATE:
                {
                    /** (sheet-activate sheet) -> nil */
                    canvasHandler.sheet = sheet = (Sheet)sexp.evaluateArg1();;
                    canvasHandler.sheetInitialize();
                    try {
                        sheet.recalculateChangedCells( null );
                    }
                    catch( CircularReferenceException ee ) {
                        throw new EvaluateException(ee.getMessage(), sexp);
                    }
                    canvasHandler.repaint();
                    break;
                }
//#endif                    
                case NAME_SHEET_ACTIVE:
                    /** (sheet-active) -> sheet*/
                    return sheet;
                case NAME_CELL_CREATE:
                    /* (cell-create i j formula format ) -> cell */
                    return Cell.fromList( sexp );
                case NAME_CELL_CREATE_WS:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -