Annotation of sbbs/src/sbbs3/js_conio.c, revision 1.1.1.1

1.1       root        1: /* js_conio.c */
                      2: 
                      3: /* Synchronet "conio" (console IO) object */
                      4: 
                      5: /* $Id: js_conio.c,v 1.11 2009/08/14 07:45:40 rswindell Exp $ */
                      6: 
                      7: /****************************************************************************
                      8:  * @format.tab-size 4          (Plain Text/Source Code File Header)                    *
                      9:  * @format.use-tabs true       (see http://www.synchro.net/ptsc_hdr.html)              *
                     10:  *                                                                                                                                                     *
                     11:  * Copyright 2009 Rob Swindell - http://www.synchro.net/copyright.html         *
                     12:  *                                                                                                                                                     *
                     13:  * This program is free software; you can redistribute it and/or                       *
                     14:  * modify it under the terms of the GNU General Public License                         *
                     15:  * as published by the Free Software Foundation; either version 2                      *
                     16:  * of the License, or (at your option) any later version.                                      *
                     17:  * See the GNU General Public License for more details: gpl.txt or                     *
                     18:  * http://www.fsf.org/copyleft/gpl.html                                                                                *
                     19:  *                                                                                                                                                     *
                     20:  * Anonymous FTP access to the most recent released source is available at     *
                     21:  * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net     *
                     22:  *                                                                                                                                                     *
                     23:  * Anonymous CVS access to the development source and modification history     *
                     24:  * is available at cvs.synchro.net:/cvsroot/sbbs, example:                                     *
                     25:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs login                       *
                     26:  *     (just hit return, no password is necessary)                                                     *
                     27:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src                *
                     28:  *                                                                                                                                                     *
                     29:  * For Synchronet coding style and modification guidelines, see                                *
                     30:  * http://www.synchro.net/source.html                                                                          *
                     31:  *                                                                                                                                                     *
                     32:  * You are encouraged to submit any modifications (preferably in Unix diff     *
                     33:  * format) via e-mail to [email protected]                                                                      *
                     34:  *                                                                                                                                                     *
                     35:  * Note: If this box doesn't appear square, then you need to fix your tabs.    *
                     36:  ****************************************************************************/
                     37: 
                     38: #ifndef JAVASCRIPT
                     39: #define JAVASCRIPT
                     40: #endif
                     41: 
                     42: #include "sbbs.h"
                     43: #include "ciolib.h"
                     44: #include "js_request.h"
                     45: 
                     46: /* Properties */
                     47: enum {
                     48:         PROP_WSCROLL
                     49:        ,PROP_DIRECTVIDEO
                     50:        ,PROP_HOLD_UPDATE
                     51:        ,PROP_PUTTEXT_CAN_MOVE
                     52:        ,PROP_MODE                              /* read-only */
                     53:     ,PROP_MOUSE                                /* read-only */
                     54:        ,PROP_ESCDELAY
                     55:        ,PROP_TEXTATTR
                     56:        ,PROP_KBHIT
                     57:        ,PROP_WHEREX
                     58:        ,PROP_WHEREY
                     59:        ,PROP_TEXTMODE
                     60:        ,PROP_WINLEFT
                     61:        ,PROP_WINTOP
                     62:        ,PROP_WINRIGHT
                     63:        ,PROP_WINBOTTOM
                     64:        ,PROP_SCREENWIDTH
                     65:        ,PROP_SCREENHEIGHT
                     66:        ,PROP_NORMATTR
                     67:        ,PROP_TEXTBACKGROUND
                     68:        ,PROP_TEXTCOLOR
                     69:        ,PROP_CLIPBOARD
                     70:        ,PROP_HIGHVIDEO
                     71:        ,PROP_LOWVIDEO
                     72: };
                     73: 
                     74: static JSBool js_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
                     75: {
                     76:     jsint              tiny;
                     77:        jsrefcount      rc;
                     78: 
                     79:     tiny = JSVAL_TO_INT(id);
                     80: 
                     81:        rc=JS_SUSPENDREQUEST(cx);
                     82:        switch(tiny) {
                     83:                case PROP_WSCROLL:
                     84:                        *vp=BOOLEAN_TO_JSVAL(_wscroll);
                     85:                        break;
                     86:                case PROP_DIRECTVIDEO:
                     87:                        *vp=BOOLEAN_TO_JSVAL(directvideo);
                     88:                        break;
                     89:                case PROP_HOLD_UPDATE:
                     90:                        *vp=BOOLEAN_TO_JSVAL(hold_update);
                     91:                        break;
                     92:                case PROP_PUTTEXT_CAN_MOVE:
                     93:                        *vp=BOOLEAN_TO_JSVAL(puttext_can_move);
                     94:                        break;
                     95:                case PROP_MODE:
                     96:                        *vp=INT_TO_JSVAL(cio_api.mode);
                     97:                        break;
                     98:                case PROP_MOUSE:
                     99:                        *vp=BOOLEAN_TO_JSVAL(cio_api.mouse);
                    100:                        break;
                    101:                case PROP_ESCDELAY:
                    102:                        *vp=INT_TO_JSVAL(cio_api.ESCDELAY?*cio_api.ESCDELAY:0);
                    103:                        break;
                    104:                case PROP_TEXTATTR:
                    105:                        *vp=INT_TO_JSVAL(cio_textinfo.attribute);
                    106:                        break;
                    107:                case PROP_KBHIT:
                    108:                        *vp=BOOLEAN_TO_JSVAL(kbhit());
                    109:                        break;
                    110:                case PROP_WHEREX:
                    111:                        *vp=INT_TO_JSVAL(cio_textinfo.curx);
                    112:                        break;
                    113:                case PROP_WHEREY:
                    114:                        *vp=INT_TO_JSVAL(cio_textinfo.cury);
                    115:                        break;
                    116:                case PROP_TEXTMODE:
                    117:                        *vp=INT_TO_JSVAL(cio_textinfo.currmode);
                    118:                        break;
                    119:                case PROP_WINLEFT:
                    120:                        *vp=INT_TO_JSVAL(cio_textinfo.winleft);
                    121:                        break;
                    122:                case PROP_WINTOP:
                    123:                        *vp=INT_TO_JSVAL(cio_textinfo.wintop);
                    124:                        break;
                    125:                case PROP_WINRIGHT:
                    126:                        *vp=INT_TO_JSVAL(cio_textinfo.winright);
                    127:                        break;
                    128:                case PROP_WINBOTTOM:
                    129:                        *vp=INT_TO_JSVAL(cio_textinfo.winbottom);
                    130:                        break;
                    131:                case PROP_SCREENWIDTH:
                    132:                        *vp=INT_TO_JSVAL(cio_textinfo.screenwidth);
                    133:                        break;
                    134:                case PROP_SCREENHEIGHT:
                    135:                        *vp=INT_TO_JSVAL(cio_textinfo.screenheight);
                    136:                        break;
                    137:                case PROP_NORMATTR:
                    138:                        *vp=INT_TO_JSVAL(cio_textinfo.normattr);
                    139:                        break;
                    140:                case PROP_TEXTBACKGROUND:
                    141:                        *vp=INT_TO_JSVAL((cio_textinfo.attribute & 0x70)>>4);
                    142:                        break;
                    143:                case PROP_TEXTCOLOR:
                    144:                        *vp=INT_TO_JSVAL(cio_textinfo.attribute & 0xf);
                    145:                        break;
                    146:                case PROP_CLIPBOARD:
                    147:                        *vp=STRING_TO_JSVAL(JS_NewStringCopyZ(cx,getcliptext()));
                    148:                        break;
                    149:                case PROP_HIGHVIDEO:
                    150:                        *vp=BOOLEAN_TO_JSVAL(cio_textinfo.attribute & 0x8);
                    151:                        break;
                    152:                case PROP_LOWVIDEO:
                    153:                        *vp=BOOLEAN_TO_JSVAL(!(cio_textinfo.attribute & 0x8));
                    154:                        break;
                    155:        }
                    156:        JS_RESUMEREQUEST(cx, rc);
                    157: 
                    158:        return(JS_TRUE);
                    159: }
                    160: 
                    161: static JSBool js_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
                    162: {
                    163:     jsint              tiny;
                    164:        int32           i=0;
                    165:        JSBool          b;
                    166:        jsrefcount      rc;
                    167: 
                    168:     tiny = JSVAL_TO_INT(id);
                    169: 
                    170:        switch(tiny) {
                    171:                case PROP_WSCROLL:
                    172:                        JS_ValueToBoolean(cx, *vp, &_wscroll);
                    173:                        break;
                    174:                case PROP_DIRECTVIDEO:
                    175:                        JS_ValueToBoolean(cx, *vp, &directvideo);
                    176:                        break;
                    177:                case PROP_HOLD_UPDATE:
                    178:                        JS_ValueToBoolean(cx, *vp, &hold_update);
                    179:                        break;
                    180:                case PROP_PUTTEXT_CAN_MOVE:
                    181:                        JS_ValueToBoolean(cx, *vp, &puttext_can_move);
                    182:                        break;
                    183:                case PROP_ESCDELAY:
                    184:                        if(cio_api.ESCDELAY)
                    185:                                JS_ValueToInt32(cx, *vp, (int32*)cio_api.ESCDELAY);
                    186:                        break;
                    187:                case PROP_TEXTATTR:
                    188:                        JS_ValueToInt32(cx, *vp, &i);
                    189:                        rc=JS_SUSPENDREQUEST(cx);
                    190:                        textattr(i);
                    191:                        JS_RESUMEREQUEST(cx, rc);
                    192:                        break;
                    193:                case PROP_WHEREX:
                    194:                        JS_ValueToInt32(cx, *vp, &i);
                    195:                        rc=JS_SUSPENDREQUEST(cx);
                    196:                        gotoxy(i, cio_textinfo.cury);
                    197:                        JS_RESUMEREQUEST(cx, rc);
                    198:                        break;
                    199:                case PROP_WHEREY:
                    200:                        JS_ValueToInt32(cx, *vp, &i);
                    201:                        rc=JS_SUSPENDREQUEST(cx);
                    202:                        gotoxy(cio_textinfo.curx, i);
                    203:                        JS_RESUMEREQUEST(cx, rc);
                    204:                        break;
                    205:                case PROP_TEXTMODE:
                    206:                        JS_ValueToInt32(cx, *vp, &i);
                    207:                        rc=JS_SUSPENDREQUEST(cx);
                    208:                        textmode(i);
                    209:                        JS_RESUMEREQUEST(cx, rc);
                    210:                        break;
                    211:                case PROP_TEXTBACKGROUND:
                    212:                        JS_ValueToInt32(cx, *vp, &i);
                    213:                        rc=JS_SUSPENDREQUEST(cx);
                    214:                        textbackground(i);
                    215:                        JS_RESUMEREQUEST(cx, rc);
                    216:                        break;
                    217:                case PROP_TEXTCOLOR:
                    218:                        JS_ValueToInt32(cx, *vp, &i);
                    219:                        rc=JS_SUSPENDREQUEST(cx);
                    220:                        textcolor(i);
                    221:                        JS_RESUMEREQUEST(cx, rc);
                    222:                        break;
                    223:                case PROP_CLIPBOARD:
                    224:                        {
                    225:                                size_t  len;
                    226:                                char    *bytes;
                    227: 
                    228:                                bytes=js_ValueToStringBytes(cx, *vp, &len);
                    229:                                rc=JS_SUSPENDREQUEST(cx);
                    230:                                copytext(bytes, len+1);
                    231:                                JS_RESUMEREQUEST(cx, rc);
                    232:                        }
                    233:                        break;
                    234:                case PROP_HIGHVIDEO:
                    235:                        JS_ValueToBoolean(cx, *vp, &b);
                    236:                        rc=JS_SUSPENDREQUEST(cx);
                    237:                        if(b)
                    238:                                highvideo();
                    239:                        else
                    240:                                lowvideo();
                    241:                        JS_RESUMEREQUEST(cx, rc);
                    242:                        break;
                    243:                case PROP_LOWVIDEO:
                    244:                        JS_ValueToBoolean(cx, *vp, &b);
                    245:                        rc=JS_SUSPENDREQUEST(cx);
                    246:                        if(b)
                    247:                                lowvideo();
                    248:                        else
                    249:                                highvideo();
                    250:                        JS_RESUMEREQUEST(cx, rc);
                    251:                        break;
                    252:        }
                    253: 
                    254:        return(JS_TRUE);
                    255: }
                    256: 
                    257: static jsSyncPropertySpec js_properties[] = {
                    258: /*              name,                          tinyid,                                         flags,          ver     */
                    259: 
                    260:        {       "wscroll",                      PROP_WSCROLL,                   JSPROP_ENUMERATE,   315 },
                    261:        {       "directvideo",          PROP_DIRECTVIDEO,               JSPROP_ENUMERATE,       315 },
                    262:        {       "hold_update",          PROP_HOLD_UPDATE,               JSPROP_ENUMERATE,       315 },
                    263:        {       "puttext_can_move",     PROP_PUTTEXT_CAN_MOVE,  JSPROP_ENUMERATE,       315 },
                    264:        {       "mode",                         PROP_MODE,                              JSPROP_ENUMERATE|JSPROP_READONLY,       315 },
                    265:        {       "mouse",                        PROP_MOUSE,                             JSPROP_ENUMERATE|JSPROP_READONLY,       315 },
                    266:        {       "ESCDELAY",                     PROP_ESCDELAY,                  JSPROP_ENUMERATE,       315 },
                    267:        {       "textattr",                     PROP_TEXTATTR,                  JSPROP_ENUMERATE,       315 },
                    268:        {       "kbhit",                        PROP_KBHIT,                             JSPROP_ENUMERATE|JSPROP_READONLY,       315 },
                    269:        {       "wherex",                       PROP_WHEREX,                    JSPROP_ENUMERATE,       315 },
                    270:        {       "wherey",                       PROP_WHEREY,                    JSPROP_ENUMERATE,       315 },
                    271:        {       "textmode",                     PROP_TEXTMODE,                  JSPROP_ENUMERATE,       315 },
                    272:        {       "winleft",                      PROP_WINLEFT,                   JSPROP_ENUMERATE|JSPROP_READONLY,       315 },
                    273:        {       "wintop",                       PROP_WINTOP,                    JSPROP_ENUMERATE|JSPROP_READONLY,       315 },
                    274:        {       "winright",                     PROP_WINRIGHT,                  JSPROP_ENUMERATE|JSPROP_READONLY,       315 },
                    275:        {       "winbottom",            PROP_WINBOTTOM,                 JSPROP_ENUMERATE|JSPROP_READONLY,       315 },
                    276:        {       "screenwidth",          PROP_SCREENWIDTH,               JSPROP_ENUMERATE|JSPROP_READONLY,       315 },
                    277:        {       "screenheight",         PROP_SCREENHEIGHT,              JSPROP_ENUMERATE|JSPROP_READONLY,       315 },
                    278:        {       "normattr",                     PROP_NORMATTR,                  JSPROP_ENUMERATE|JSPROP_READONLY,       315 },
                    279:        {       "textbackground",       PROP_TEXTBACKGROUND,    JSPROP_ENUMERATE,       315 },
                    280:        {       "textcolor",            PROP_TEXTCOLOR,                 JSPROP_ENUMERATE,       315 },
                    281:        {       "clipboard",            PROP_CLIPBOARD,                 JSPROP_ENUMERATE,       315 },
                    282:        {       "lowvideo",                     PROP_LOWVIDEO,                  JSPROP_ENUMERATE,       315 },
                    283:        {       "highvideo",            PROP_HIGHVIDEO,                 JSPROP_ENUMERATE,       315 },
                    284:        {0}
                    285: };
                    286: 
                    287: /* Methods */
                    288: 
                    289: static JSBool
                    290: js_conio_init(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    291: {
                    292:        int                     ciolib_mode=CIOLIB_MODE_AUTO;
                    293:        char*           mode;
                    294:        jsrefcount      rc;
                    295: 
                    296:        *rval = JSVAL_FALSE;
                    297: 
                    298:        if(argc>0 && (mode=js_ValueToStringBytes(cx, argv[0], NULL))!=NULL) {
                    299:                if(!stricmp(mode,"STDIO"))
                    300:                        ciolib_mode=-1;
                    301:                else if(!stricmp(mode,"AUTO"))
                    302:                        ciolib_mode=CIOLIB_MODE_AUTO;
                    303:                else if(!stricmp(mode,"X"))
                    304:                        ciolib_mode=CIOLIB_MODE_X;
                    305:                else if(!stricmp(mode,"ANSI"))
                    306:                        ciolib_mode=CIOLIB_MODE_ANSI;
                    307:                else if(!stricmp(mode,"CONIO"))
                    308:                        ciolib_mode=CIOLIB_MODE_CONIO;
                    309:        }
                    310: 
                    311:        rc=JS_SUSPENDREQUEST(cx);
                    312:        if(initciolib(ciolib_mode)) {
                    313:                JS_RESUMEREQUEST(cx, rc);
                    314:                return(JS_TRUE);
                    315:        }
                    316: 
                    317:        *rval = JSVAL_TRUE;
                    318:        JS_RESUMEREQUEST(cx, rc);
                    319:        return(JS_TRUE);
                    320: }
                    321: 
                    322: static JSBool
                    323: js_conio_suspend(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    324: {
                    325:        jsrefcount      rc;
                    326: 
                    327:        rc=JS_SUSPENDREQUEST(cx);
                    328:        suspendciolib();
                    329:        *rval = JSVAL_TRUE;
                    330:        JS_RESUMEREQUEST(cx, rc);
                    331:        return(JS_TRUE);
                    332: }
                    333: 
                    334: static JSBool
                    335: js_conio_clreol(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    336: {
                    337:        jsrefcount      rc;
                    338: 
                    339:        rc=JS_SUSPENDREQUEST(cx);
                    340:        clreol();
                    341:        *rval = JSVAL_TRUE;
                    342:        JS_RESUMEREQUEST(cx, rc);
                    343:        return(JS_TRUE);
                    344: }
                    345: 
                    346: static JSBool
                    347: js_conio_clrscr(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    348: {
                    349:        jsrefcount      rc;
                    350: 
                    351:        rc=JS_SUSPENDREQUEST(cx);
                    352:        clrscr();
                    353:        *rval = JSVAL_TRUE;
                    354:        JS_RESUMEREQUEST(cx, rc);
                    355:        return(JS_TRUE);
                    356: }
                    357: 
                    358: static JSBool
                    359: js_conio_wscroll(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    360: {
                    361:        jsrefcount      rc;
                    362: 
                    363:        rc=JS_SUSPENDREQUEST(cx);
                    364:        wscroll();
                    365:        *rval = JSVAL_TRUE;
                    366:        JS_RESUMEREQUEST(cx, rc);
                    367:        return(JS_TRUE);
                    368: }
                    369: 
                    370: static JSBool
                    371: js_conio_delline(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    372: {
                    373:        jsrefcount      rc;
                    374: 
                    375:        rc=JS_SUSPENDREQUEST(cx);
                    376:        delline();
                    377:        *rval = JSVAL_TRUE;
                    378:        JS_RESUMEREQUEST(cx, rc);
                    379:        return(JS_TRUE);
                    380: }
                    381: 
                    382: static JSBool
                    383: js_conio_insline(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    384: {
                    385:        jsrefcount      rc;
                    386: 
                    387:        rc=JS_SUSPENDREQUEST(cx);
                    388:        insline();
                    389:        *rval = JSVAL_TRUE;
                    390:        JS_RESUMEREQUEST(cx, rc);
                    391:        return(JS_TRUE);
                    392: }
                    393: 
                    394: static JSBool
                    395: js_conio_normvideo(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    396: {
                    397:        jsrefcount      rc;
                    398: 
                    399:        rc=JS_SUSPENDREQUEST(cx);
                    400:        normvideo();
                    401:     *rval = JSVAL_TRUE;
                    402:        JS_RESUMEREQUEST(cx, rc);
                    403:        return(JS_TRUE);
                    404: }
                    405: 
                    406: static JSBool
                    407: js_conio_getch(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    408: {
                    409:        jsrefcount      rc;
                    410: 
                    411:        rc=JS_SUSPENDREQUEST(cx);
                    412:     *rval = INT_TO_JSVAL(getch());
                    413:        JS_RESUMEREQUEST(cx, rc);
                    414:        return(JS_TRUE);
                    415: }
                    416: 
                    417: static JSBool
                    418: js_conio_getche(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    419: {
                    420:        jsrefcount      rc;
                    421: 
                    422:        rc=JS_SUSPENDREQUEST(cx);
                    423:     *rval = INT_TO_JSVAL(getche());
                    424:        JS_RESUMEREQUEST(cx, rc);
                    425:        return(JS_TRUE);
                    426: }
                    427: 
                    428: static JSBool
                    429: js_conio_beep(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    430: {
                    431:        jsrefcount      rc;
                    432: 
                    433:        rc=JS_SUSPENDREQUEST(cx);
                    434:     *rval = INT_TO_JSVAL(beep());
                    435:        JS_RESUMEREQUEST(cx, rc);
                    436:        return(JS_TRUE);
                    437: }
                    438: 
                    439: static JSBool
                    440: js_conio_getfont(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    441: {
                    442:        jsrefcount      rc;
                    443: 
                    444:        rc=JS_SUSPENDREQUEST(cx);
                    445:     *rval = INT_TO_JSVAL(getfont());
                    446:        JS_RESUMEREQUEST(cx, rc);
                    447:        return(JS_TRUE);
                    448: }
                    449: 
                    450: static JSBool
                    451: js_conio_hidemouse(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    452: {
                    453:        jsrefcount      rc;
                    454: 
                    455:        rc=JS_SUSPENDREQUEST(cx);
                    456:     *rval = INT_TO_JSVAL(hidemouse());
                    457:        JS_RESUMEREQUEST(cx, rc);
                    458:        return(JS_TRUE);
                    459: }
                    460: 
                    461: static JSBool
                    462: js_conio_showmouse(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    463: {
                    464:        jsrefcount      rc;
                    465: 
                    466:        rc=JS_SUSPENDREQUEST(cx);
                    467:     *rval = INT_TO_JSVAL(showmouse());
                    468:        JS_RESUMEREQUEST(cx, rc);
                    469:        return(JS_TRUE);
                    470: }
                    471: 
                    472: static JSBool
                    473: js_conio_setcursortype(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    474: {
                    475:        int32   type;
                    476:        jsrefcount      rc;
                    477: 
                    478:        if(argc==1 && JSVAL_IS_NUMBER(argv[0]) && JS_ValueToInt32(cx,argv[0],&type)) {
                    479:                rc=JS_SUSPENDREQUEST(cx);
                    480:                _setcursortype(type);
                    481:                *rval = JSVAL_TRUE;
                    482:                JS_RESUMEREQUEST(cx, rc);
                    483:                return(JS_TRUE);
                    484:        }
                    485: 
                    486:        return(JS_FALSE);
                    487: }
                    488: 
                    489: static JSBool
                    490: js_conio_gotoxy(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    491: {
                    492:        int32   x,y;
                    493:        jsrefcount      rc;
                    494: 
                    495:        if(argc==2 && JSVAL_IS_NUMBER(argv[0]) && JS_ValueToInt32(cx,argv[0],&x)
                    496:                                && JSVAL_IS_NUMBER(argv[1]) && JS_ValueToInt32(cx,argv[1],&y)) {
                    497:                rc=JS_SUSPENDREQUEST(cx);
                    498:                gotoxy(x,y);
                    499:                *rval = JSVAL_TRUE;
                    500:                JS_RESUMEREQUEST(cx, rc);
                    501:                return(JS_TRUE);
                    502:        }
                    503: 
                    504:        return(JS_FALSE);
                    505: }
                    506: 
                    507: static JSBool
                    508: js_conio_putch(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    509: {
                    510:        int32   ch;
                    511:        jsrefcount      rc;
                    512: 
                    513:        if(argc==1 && JSVAL_IS_NUMBER(argv[0]) && JS_ValueToInt32(cx,argv[0],&ch)) {
                    514:                rc=JS_SUSPENDREQUEST(cx);
                    515:                *rval=INT_TO_JSVAL(putch(ch));
                    516:                JS_RESUMEREQUEST(cx, rc);
                    517:                return(JS_TRUE);
                    518:        }
                    519: 
                    520:        return(JS_FALSE);
                    521: }
                    522: 
                    523: static JSBool
                    524: js_conio_ungetch(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    525: {
                    526:        int32   ch;
                    527:        jsrefcount      rc;
                    528: 
                    529:        if(argc==1 && JSVAL_IS_NUMBER(argv[0]) && JS_ValueToInt32(cx,argv[0],&ch)) {
                    530:                rc=JS_SUSPENDREQUEST(cx);
                    531:                *rval=INT_TO_JSVAL(ungetch(ch));
                    532:                JS_RESUMEREQUEST(cx, rc);
                    533:                return(JS_TRUE);
                    534:        }
                    535: 
                    536:        return(JS_FALSE);
                    537: }
                    538: 
                    539: static JSBool
                    540: js_conio_loadfont(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    541: {
                    542:        char *  str;
                    543:        jsrefcount      rc;
                    544: 
                    545:        if(argc==1 && (str=js_ValueToStringBytes(cx,argv[0],NULL))!=NULL) {
                    546:                rc=JS_SUSPENDREQUEST(cx);
                    547:                *rval=INT_TO_JSVAL(loadfont(str));
                    548:                JS_RESUMEREQUEST(cx, rc);
                    549:                return(JS_TRUE);
                    550:        }
                    551: 
                    552:        return(JS_FALSE);
                    553: }
                    554: 
                    555: static JSBool
                    556: js_conio_settitle(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    557: {
                    558:        char *  str;
                    559:        jsrefcount      rc;
                    560: 
                    561:        if(argc==1 && (str=js_ValueToStringBytes(cx,argv[0],NULL))!=NULL) {
                    562:                rc=JS_SUSPENDREQUEST(cx);
                    563:                settitle(str);
                    564:                JS_RESUMEREQUEST(cx, rc);
                    565:                *rval=JSVAL_TRUE;
                    566:                return(JS_TRUE);
                    567:        }
                    568: 
                    569:        return(JS_FALSE);
                    570: }
                    571: 
                    572: static JSBool
                    573: js_conio_setname(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    574: {
                    575:        char *  str;
                    576:        jsrefcount      rc;
                    577: 
                    578:        if(argc==1 && (str=js_ValueToStringBytes(cx,argv[0],NULL))!=NULL) {
                    579:                rc=JS_SUSPENDREQUEST(cx);
                    580:                setname(str);
                    581:                JS_RESUMEREQUEST(cx, rc);
                    582:                *rval=JSVAL_TRUE;
                    583:                return(JS_TRUE);
                    584:        }
                    585: 
                    586:        return(JS_FALSE);
                    587: }
                    588: 
                    589: static JSBool
                    590: js_conio_cputs(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    591: {
                    592:        char *  str;
                    593:        jsrefcount      rc;
                    594: 
                    595:        if(argc==1 && (str=js_ValueToStringBytes(cx,argv[0],NULL))!=NULL) {
                    596:                rc=JS_SUSPENDREQUEST(cx);
                    597:                *rval=INT_TO_JSVAL(cputs(str));
                    598:                JS_RESUMEREQUEST(cx, rc);
                    599:                return(JS_TRUE);
                    600:        }
                    601: 
                    602:        return(JS_FALSE);
                    603: }
                    604: 
                    605: static JSBool
                    606: js_conio_setfont(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    607: {
                    608:        int32   font;
                    609:        int force=JS_FALSE;
                    610:        int32 fnum=0;
                    611:        jsrefcount      rc;
                    612:        uintN arg=0;
                    613: 
                    614:        if(argc > 2)
                    615:                return(JS_FALSE);
                    616: 
                    617:        if(argc > 0 && JSVAL_IS_NUMBER(argv[arg]) && JS_ValueToInt32(cx,argv[arg],&font)) {
                    618:                for(arg=1; arg<argc; arg++) {
                    619:                        if(JSVAL_IS_NUMBER(argv[arg])) {
                    620:                                if(!JS_ValueToInt32(cx,argv[arg],&fnum))
                    621:                                        return(JS_FALSE);
                    622:                        }
                    623:                        else if(JSVAL_IS_BOOLEAN(argv[arg])) {
                    624:                                if(!JS_ValueToBoolean(cx, argv[1], &force))
                    625:                                        return(JS_FALSE);
                    626:                        }
                    627:                        else
                    628:                                return(JS_FALSE);
                    629:                }
                    630:                rc=JS_SUSPENDREQUEST(cx);
                    631:                *rval=INT_TO_JSVAL(setfont(font, force,fnum));
                    632:                JS_RESUMEREQUEST(cx, rc);
                    633:                return(JS_TRUE);
                    634:        }
                    635: 
                    636:        return(JS_FALSE);
                    637: }
                    638: 
                    639: static JSBool
                    640: js_conio_getpass(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    641: {
                    642:        char *  str;
                    643:        char *  pwd;
                    644:        jsrefcount      rc;
                    645: 
                    646:        if(argc==1 && (str=js_ValueToStringBytes(cx,argv[0],NULL))!=NULL) {
                    647:                rc=JS_SUSPENDREQUEST(cx);
                    648:                pwd=getpass(str);
                    649:                JS_RESUMEREQUEST(cx, rc);
                    650:                *rval=STRING_TO_JSVAL(JS_NewStringCopyZ(cx,pwd));
                    651:                return(JS_TRUE);
                    652:        }
                    653: 
                    654:        return(JS_FALSE);
                    655: }
                    656: 
                    657: static JSBool
                    658: js_conio_window(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    659: {
                    660:        int32 left=1;
                    661:        int32 top=1;
                    662:        int32 right=cio_textinfo.screenwidth;
                    663:        int32 bottom=cio_textinfo.screenheight;
                    664:        jsrefcount      rc;
                    665: 
                    666:        if(argc > 4)
                    667:                return(JS_FALSE);
                    668: 
                    669:        if(argc > 0) {
                    670:                if(!JSVAL_IS_NUMBER(argv[0]))
                    671:                        return(JS_FALSE);
                    672:                if(!JS_ValueToInt32(cx, argv[0], &left))
                    673:                        return(JS_FALSE);
                    674:        }
                    675:        if(argc > 1) {
                    676:                if(!JSVAL_IS_NUMBER(argv[1]))
                    677:                        return(JS_FALSE);
                    678:                if(!JS_ValueToInt32(cx, argv[1], &top))
                    679:                        return(JS_FALSE);
                    680:        }
                    681:        if(argc > 2) {
                    682:                if(!JSVAL_IS_NUMBER(argv[2]))
                    683:                        return(JS_FALSE);
                    684:                if(!JS_ValueToInt32(cx, argv[2], &right))
                    685:                        return(JS_FALSE);
                    686:        }
                    687:        if(argc > 3) {
                    688:                if(!JSVAL_IS_NUMBER(argv[3]))
                    689:                        return(JS_FALSE);
                    690:                if(!JS_ValueToInt32(cx, argv[3], &bottom))
                    691:                        return(JS_FALSE);
                    692:        }
                    693: 
                    694:        rc=JS_SUSPENDREQUEST(cx);
                    695:        window(left, top, right, bottom);
                    696:        JS_RESUMEREQUEST(cx, rc);
                    697:        if(cio_textinfo.winleft == left
                    698:                        && cio_textinfo.winright==right
                    699:                        && cio_textinfo.wintop==top
                    700:                        && cio_textinfo.winbottom==bottom) {
                    701:                *rval=JSVAL_TRUE;
                    702:        }
                    703:        else {
                    704:                *rval=JSVAL_FALSE;
                    705:        }
                    706:        return(JS_TRUE);
                    707: }
                    708: 
                    709: static JSBool
                    710: js_conio_cgets(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    711: {
                    712:        char    buf[258];
                    713:        int32   maxlen=255;
                    714:        char    *ret;
                    715:        jsrefcount      rc;
                    716: 
                    717:        if(argc > 1)
                    718:                return(JS_FALSE);
                    719:        if(argc > 0) {
                    720:                if(!JSVAL_IS_NUMBER(argv[0]))
                    721:                        return(JS_FALSE);
                    722:                if(!JS_ValueToInt32(cx, argv[0], &maxlen))
                    723:                        return(JS_FALSE);
                    724:                if(maxlen > 255)
                    725:                        return(JS_FALSE);
                    726:        }
                    727:        buf[0]=(char)maxlen;
                    728:        rc=JS_SUSPENDREQUEST(cx);
                    729:        ret=cgets(buf);
                    730:        JS_RESUMEREQUEST(cx, rc);
                    731:        if(ret==NULL)
                    732:                *rval=JSVAL_NULL;
                    733:        else {
                    734:                buf[257]=0;
                    735:                *rval=STRING_TO_JSVAL(JS_NewStringCopyZ(cx,ret));
                    736:        }
                    737: 
                    738:        return(JS_TRUE);
                    739: }
                    740: 
                    741: /* TODO: cprintf() not really needed since we have cputs() and format() */
                    742: #if 0
                    743: static JSBool
                    744: js_conio_cprintf(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    745: {
                    746: }
                    747: #endif
                    748: 
                    749: /* TODO: cscanf()... this would be rather insane actually... */
                    750: #if 0
                    751: static JSBool
                    752: js_conio_cscanf(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    753: {
                    754: }
                    755: #endif
                    756: 
                    757: static JSBool
                    758: js_conio_movetext(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    759: {
                    760:        int             i;
                    761:        int32   args[6];
                    762:        jsrefcount      rc;
                    763: 
                    764:        if(argc != 6)
                    765:                return(JS_FALSE);
                    766:        for(i=0; i<6; i++) {
                    767:                if(!JSVAL_IS_NUMBER(argv[i]))
                    768:                        return(JS_FALSE);
                    769:                if(!JS_ValueToInt32(cx, argv[i], &args[i]))
                    770:                        return(JS_FALSE);
                    771:        }
                    772:        rc=JS_SUSPENDREQUEST(cx);
                    773:        *rval=BOOLEAN_TO_JSVAL(movetext(args[0], args[1], args[2], args[3], args[4], args[5]));
                    774:        JS_RESUMEREQUEST(cx, rc);
                    775:        return(JS_TRUE);
                    776: }
                    777: 
                    778: static JSBool
                    779: js_conio_puttext(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    780: {
                    781:        int32   args[4];
                    782:        unsigned char   *buffer;
                    783:        jsuint  i;
                    784:        int32   j;
                    785:        jsuint  size;
                    786:        jsval   val;
                    787:        JSObject *array;
                    788:        jsrefcount      rc;
                    789: 
                    790:        /* default values: */
                    791:        args[0]=1;
                    792:        args[1]=1;
                    793:        args[2]=cio_textinfo.screenwidth;
                    794:        args[3]=cio_textinfo.screenheight;
                    795: 
                    796:        if(argc != 5)
                    797:                return(JS_FALSE);
                    798:        for(i=0; i<4; i++) {
                    799:                if(!JSVAL_IS_NUMBER(argv[i]))
                    800:                        return(JS_FALSE);
                    801:                if(!JS_ValueToInt32(cx, argv[i], &args[i]))
                    802:                        return(JS_FALSE);
                    803:        }
                    804:        if(args[0] < 1 || args[1] < 1 || args[2] < 1 || args[3] < 1
                    805:                        || args[0] > args[2] || args[1] > args[3]
                    806:                        || args[2] > cio_textinfo.screenwidth || args[3] > cio_textinfo.screenheight) {
                    807:                *rval=JSVAL_FALSE;
                    808:                return(JS_TRUE);
                    809:        }
                    810: 
                    811:        if(!JSVAL_IS_OBJECT(argv[4]))
                    812:                return(JS_FALSE);
                    813:        array=JSVAL_TO_OBJECT(argv[4]);
                    814:        if(!JS_GetArrayLength(cx, array, &size))
                    815:                return(JS_FALSE);
                    816: 
                    817:        buffer=(unsigned char *)malloc(size);
                    818:        if(buffer==NULL) 
                    819:                return(JS_FALSE);
                    820:        for(i=0; i<size; i++) {
                    821:                if(!JS_GetElement(cx, array, i, &val)) {
                    822:                        free(buffer);
                    823:                        return(JS_FALSE);
                    824:                }
                    825:                if(!JSVAL_IS_NUMBER(val)) {
                    826:                        free(buffer);
                    827:                        return(JS_FALSE);
                    828:                }
                    829:                if(!JS_ValueToInt32(cx, val, &j)) {
                    830:                        free(buffer);
                    831:                        return(JS_FALSE);
                    832:                }
                    833:                buffer[i]=(unsigned char)j;
                    834:        }
                    835: 
                    836:        rc=JS_SUSPENDREQUEST(cx);
                    837:        *rval=BOOLEAN_TO_JSVAL(puttext(args[0], args[1], args[2], args[3], buffer));
                    838:        free(buffer);
                    839:        JS_RESUMEREQUEST(cx, rc);
                    840:        return(JS_TRUE);
                    841: }
                    842: 
                    843: static JSBool
                    844: js_conio_gettext(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    845: {
                    846:        int32   args[4];
                    847:        unsigned char   *result;
                    848:        int             i;
                    849:        int             size;
                    850:        JSObject *array;
                    851:        jsval   val;
                    852:        jsrefcount      rc;
                    853: 
                    854:        /* default values: */
                    855:        args[0]=1;
                    856:        args[1]=1;
                    857:        args[2]=cio_textinfo.screenwidth;
                    858:        args[3]=cio_textinfo.screenheight;
                    859: 
                    860:        if(argc > 4)
                    861:                return(JS_FALSE);
                    862:        for(i=0; i<(int)argc; i++) {
                    863:                if(!JSVAL_IS_NUMBER(argv[i]))
                    864:                        return(JS_FALSE);
                    865:                if(!JS_ValueToInt32(cx, argv[i], &args[i]))
                    866:                        return(JS_FALSE);
                    867:        }
                    868:        if(args[0] < 1 || args[1] < 1 || args[2] < 1 || args[3] < 1
                    869:                        || args[0] > args[2] || args[1] > args[3]
                    870:                        || args[2] > cio_textinfo.screenwidth || args[3] > cio_textinfo.screenheight) {
                    871:                *rval=JSVAL_FALSE;
                    872:                return(JS_TRUE);
                    873:        }
                    874:        size=(args[2]-args[0]+1)*(args[3]-args[1]+1)*2;
                    875:        result=(unsigned char *)malloc(size);
                    876:        if(result==NULL)
                    877:                return(JS_FALSE);
                    878: 
                    879:        rc=JS_SUSPENDREQUEST(cx);
                    880: 
                    881:        if(gettext(args[0], args[1], args[2], args[3], result)) {
                    882:                JS_RESUMEREQUEST(cx, rc);
                    883:                array=JS_NewArrayObject(cx, 0, NULL);
                    884:                for(i=0; i<size; i++) {
                    885:                        JS_NewNumberValue(cx, result[i], &val);
                    886:                        if(!JS_SetElement(cx, array, i, &val)) {
                    887:                                free(result);
                    888:                                return(JS_FALSE);
                    889:                        }
                    890:                }
                    891:                *rval=OBJECT_TO_JSVAL(array);
                    892:        }
                    893:        else {
                    894:                JS_RESUMEREQUEST(cx, rc);
                    895:                *rval=JSVAL_NULL;
                    896:        }
                    897:        free(result);
                    898:        return(JS_TRUE);
                    899: }
                    900: 
                    901: /* TODO: seticon() */
                    902: #if 0
                    903: static JSBool
                    904: js_conio_seticon(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    905: {
                    906: }
                    907: #endif
                    908: 
                    909: /* TODO: getmouse() */
                    910: #if 0
                    911: static JSBool
                    912: js_conio_getmouse(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    913: {
                    914: }
                    915: #endif
                    916: 
                    917: /* TODO: ungetmouse() */
                    918: #if 0
                    919: static JSBool
                    920: js_conio_ungetmouse(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
                    921: {
                    922: }
                    923: #endif
                    924: 
                    925: static jsSyncMethodSpec js_functions[] = {
                    926:        {"init",                        js_conio_init,                  1
                    927:                ,JSTYPE_VOID,JSDOCSTR("args")
                    928:                ,JSDOCSTR("desc"),315
                    929:        },
                    930:        {"suspend",                     js_conio_suspend,               0
                    931:                ,JSTYPE_VOID,JSDOCSTR("args")
                    932:                ,JSDOCSTR("desc"),315
                    933:        },
                    934:        {"clreol",                      js_conio_clreol,                0
                    935:                ,JSTYPE_VOID,JSDOCSTR("args")
                    936:                ,JSDOCSTR("desc"),315
                    937:        },
                    938:        {"clrscr",                      js_conio_clrscr,                0
                    939:                ,JSTYPE_VOID,JSDOCSTR("args")
                    940:                ,JSDOCSTR("desc"),315
                    941:        },
                    942:        {"wscroll",                     js_conio_wscroll,               0
                    943:                ,JSTYPE_VOID,JSDOCSTR("args")
                    944:                ,JSDOCSTR("desc"),315
                    945:        },
                    946:        {"delline",                     js_conio_delline,               0
                    947:                ,JSTYPE_VOID,JSDOCSTR("args")
                    948:                ,JSDOCSTR("desc"),315
                    949:        },
                    950:        {"insline",                     js_conio_insline,               0
                    951:                ,JSTYPE_VOID,JSDOCSTR("args")
                    952:                ,JSDOCSTR("desc"),315
                    953:        },
                    954:        {"normvideo",           js_conio_normvideo,             0
                    955:                ,JSTYPE_VOID,JSDOCSTR("args")
                    956:                ,JSDOCSTR("desc"),315
                    957:        },
                    958:        {"getch",                       js_conio_getch,                 0
                    959:                ,JSTYPE_VOID,JSDOCSTR("args")
                    960:                ,JSDOCSTR("desc"),315
                    961:        },
                    962:        {"getche",                      js_conio_getche,                0
                    963:                ,JSTYPE_VOID,JSDOCSTR("args")
                    964:                ,JSDOCSTR("desc"),315
                    965:        },
                    966:        {"beep",                        js_conio_beep,                  0
                    967:                ,JSTYPE_VOID,JSDOCSTR("args")
                    968:                ,JSDOCSTR("desc"),315
                    969:        },
                    970:        {"getfont",                     js_conio_getfont,               0
                    971:                ,JSTYPE_VOID,JSDOCSTR("args")
                    972:                ,JSDOCSTR("desc"),315
                    973:        },
                    974:        {"hidemouse",           js_conio_hidemouse,             0
                    975:                ,JSTYPE_VOID,JSDOCSTR("args")
                    976:                ,JSDOCSTR("desc"),315
                    977:        },
                    978:        {"showmouse",           js_conio_showmouse,             0
                    979:                ,JSTYPE_VOID,JSDOCSTR("args")
                    980:                ,JSDOCSTR("desc"),315
                    981:        },
                    982:        {"setcursortype",       js_conio_setcursortype, 1
                    983:                ,JSTYPE_VOID,JSDOCSTR("args")
                    984:                ,JSDOCSTR("desc"),315
                    985:        },
                    986:        {"gotoxy",                      js_conio_gotoxy,                2
                    987:                ,JSTYPE_VOID,JSDOCSTR("args")
                    988:                ,JSDOCSTR("desc"),315
                    989:        },
                    990:        {"putch",                       js_conio_putch,                 1
                    991:                ,JSTYPE_VOID,JSDOCSTR("args")
                    992:                ,JSDOCSTR("desc"),315
                    993:        },
                    994:        {"ungetch",                     js_conio_ungetch,               1
                    995:                ,JSTYPE_VOID,JSDOCSTR("args")
                    996:                ,JSDOCSTR("desc"),315
                    997:        },
                    998:        {"loadfont",            js_conio_loadfont,              1
                    999:                ,JSTYPE_VOID,JSDOCSTR("args")
                   1000:                ,JSDOCSTR("desc"),315
                   1001:        },
                   1002:        {"settitle",            js_conio_settitle,              1
                   1003:                ,JSTYPE_VOID,JSDOCSTR("args")
                   1004:                ,JSDOCSTR("desc"),315
                   1005:        },
                   1006:        {"setname",                     js_conio_setname,               1
                   1007:                ,JSTYPE_VOID,JSDOCSTR("args")
                   1008:                ,JSDOCSTR("desc"),315
                   1009:        },
                   1010:        {"cputs",                       js_conio_cputs,                 1
                   1011:                ,JSTYPE_VOID,JSDOCSTR("args")
                   1012:                ,JSDOCSTR("desc"),315
                   1013:        },
                   1014:        {"setfont",                     js_conio_setfont,               2
                   1015:                ,JSTYPE_VOID,JSDOCSTR("args")
                   1016:                ,JSDOCSTR("desc"),315
                   1017:        },
                   1018:        {"getpass",                     js_conio_getpass,               1
                   1019:                ,JSTYPE_VOID,JSDOCSTR("args")
                   1020:                ,JSDOCSTR("desc"),315
                   1021:        },
                   1022:        {"window",                      js_conio_window,                4
                   1023:                ,JSTYPE_VOID,JSDOCSTR("args")
                   1024:                ,JSDOCSTR("desc"),315
                   1025:        },
                   1026:        {"cgets",                       js_conio_cgets,                 1
                   1027:                ,JSTYPE_VOID,JSDOCSTR("args")
                   1028:                ,JSDOCSTR("desc"),315
                   1029:        },
                   1030:        {"movetext",            js_conio_movetext,              6
                   1031:                ,JSTYPE_VOID,JSDOCSTR("args")
                   1032:                ,JSDOCSTR("desc"),315
                   1033:        },
                   1034:        {"puttext",                     js_conio_puttext,               5
                   1035:                ,JSTYPE_VOID,JSDOCSTR("args")
                   1036:                ,JSDOCSTR("desc"),315
                   1037:        },
                   1038:        {"gettext",                     js_conio_gettext,               4
                   1039:                ,JSTYPE_VOID,JSDOCSTR("args")
                   1040:                ,JSDOCSTR("desc"),315
                   1041:        },
                   1042:        {0}
                   1043: };
                   1044: 
                   1045: static JSBool js_conio_resolve(JSContext *cx, JSObject *obj, jsval id)
                   1046: {
                   1047:        char*                   name=NULL;
                   1048: 
                   1049:        if(id != JSVAL_NULL)
                   1050:                name=JS_GetStringBytes(JSVAL_TO_STRING(id));
                   1051: 
                   1052:        return(js_SyncResolve(cx, obj, name, js_properties, js_functions, NULL, 0));
                   1053: }
                   1054: 
                   1055: static JSBool js_conio_enumerate(JSContext *cx, JSObject *obj)
                   1056: {
                   1057:        return(js_conio_resolve(cx, obj, JSVAL_NULL));
                   1058: }
                   1059: 
                   1060: static JSClass js_conio_class = {
                   1061:      "Conio"                           /* name                 */
                   1062:     ,0                                         /* flags                */
                   1063:        ,JS_PropertyStub                /* addProperty  */
                   1064:        ,JS_PropertyStub                /* delProperty  */
                   1065:        ,js_get                                 /* getProperty  */
                   1066:        ,js_set                                 /* setProperty  */
                   1067:        ,js_conio_enumerate             /* enumerate    */
                   1068:        ,js_conio_resolve               /* resolve              */
                   1069:        ,JS_ConvertStub                 /* convert              */
                   1070:        ,JS_FinalizeStub                /* finalize             */
                   1071: };
                   1072: 
                   1073: JSObject* js_CreateConioObject(JSContext* cx, JSObject* parent)
                   1074: {
                   1075:        JSObject*       obj;
                   1076: 
                   1077:        if((obj = JS_DefineObject(cx, parent, "conio", &js_conio_class, NULL
                   1078:                ,JSPROP_ENUMERATE|JSPROP_READONLY))==NULL)
                   1079:                return(NULL);
                   1080: 
                   1081:        return(obj);
                   1082: }

unix.superglobalmegacorp.com

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