static FILE *tofile(lua_State * L) { FILE **f = topfile(L); if (*f == NULL) luaL_error(L, "attempt to use a closed file"); return *f; }
static int io_fclose(lua_State * L) { FILE **p = topfile(L); int ok = (fclose(*p) == 0); *p = NULL; return pushresult(L, ok, NULL); }
/* ** this function has a separated environment, which defines the ** correct __close for 'popen' files */ static int io_pclose(lua_State * L) { FILE **p = topfile(L); int ok = lua_pclose(L, *p); *p = NULL; return pushresult(L, ok, NULL); }
static int io_gc (lua_State *L) { FILE *f = *topfile(L); /* ignore closed files and standard files */ if (f != NULL && f != stdin && f != stdout && f != stderr) aux_close(L); return 0; }
static int io_tostring (lua_State *L) { FILE *f = *topfile(L); if (f == NULL) lua_pushstring(L, "file (closed)"); else lua_pushfstring(L, "file (%p)", f); return 1; }
static int zip_tostring (lua_State *L) { char buff[32]; ZZIP_DIR** f = topfile(L, 1); if (*f == NULL) strcpy(buff, "closed"); else sprintf(buff, "%p", lua_touserdata(L, 1)); lua_pushfstring(L, "zip file (%s)", buff); return 1; }
static int io_tostring (lua_State *L) { char buff[128]; FILE **f = topfile(L, 1); if (*f == NULL) strcpy(buff, "closed"); else sprintf(buff, "%p", lua_touserdata(L, 1)); lua_pushfstring(L, "file (%s)", buff); return 1; }
/* ** this function has a separated environment, which defines the ** correct __close for 'popen' files */ static int io_pclose (lua_State *L) { #if !USE_POPEN luaL_error(L, "`popen' not supported"); return 0; #else FILE **p = topfile(L); int ok = lua_pclose(L, *p); *p = NULL; return pushresult(L, ok, NULL); #endif }
void quick( unsigned int *x, unsigned int *y ) { register int key; dispkey( CNTRL_Q ); waitkbd( 3, 2 ); key = ebioskey( 0 ) & 0xff; prchar( key, 0, 3, 2 ); if ( !isalpha( key ) && !iscntrl( key ) ) { return; } switch ( key & 0x1f ) { case 'r' - 'a' + 1: topfile( x ); break; case 'c' - 'a' + 1: endfile( x ); break; case 'f' - 'a' + 1: searching( x, y ); break; case 'a' - 'a' + 1: replacing( x, y ); break; case 'y' - 'a' + 1: deltoendline( *x, *y ); break; case 'l' - 'a' + 1: loadtoline( curline->text ); refreshline( 0, *y ); break; case 'b' - 'a' + 1: gobeginblk( x ); break; case 'k' - 'a' + 1: goendblk( x ); break; case 'd' - 'a' + 1: endline( x ); break; case 's' - 'a' + 1: home( x ); break; case 'x' - 'a' + 1: bottom_of_page( ); break; case 'e' - 'a' + 1: top_of_page( ); break; } }
void searching( unsigned int *p_xCursorPos, unsigned int *y_CursorPos ) { storeline( curline ); if ( searchonlyinfo( ) == YES ) { showpageall( ); replaceflag = NO; if ( optionword( ) ) { addblank( ); } if ( optionupper( ) ) { strupr( source ); } if ( optionglobal( ) ) { topfile( p_xCursorPos ); showpageall( ); } if ( !searchfwd( p_xCursorPos, y_CursorPos ) ) { wordnotfound( ); } } }
static FileHandle *tofileh (lua_State *L, int findex) { FileHandle *fh = topfile(L, findex); if (fh->f == NULL) luaL_error(L, "attempt to use a closed file"); return fh; }
static int io_gc (lua_State *L) { FILE **f = topfile(L, 1); if (*f != NULL) /* ignore closed files */ aux_close(L); return 0; }
static ZZIP_DIR* tofile (lua_State *L, int findex) { ZZIP_DIR** f = topfile(L, findex); if (*f == NULL) luaL_error(L, "attempt to use a closed zip file"); return *f; }
static int zip_gc (lua_State *L) { ZZIP_DIR**f = topfile(L, 1); if (*f != NULL) /* ignore closed files */ zip_close(L); return 0; }
static int io_gc (lua_State *L) { FileHandle *fh = topfile(L, 1); if (fh->f != NULL) /* ignore closed files */ aux_close(L); return 0; }
int main( int argc, char *argv[] ) { /* (x,y) position of edit window. x column, y line -> (0,0) at upper left on screen */ unsigned int xCursorPos = 0; unsigned int yCursorPos = 0; unsigned int curmenu = 0x1100; int i; cwsetup( argc, argv ); writestatus( 0 ); writetab( ); splashscreen( ); /* Main program loop */ do { dispstrhgc( " ", wind.col, 2, NORMALATTR ); i = pulled_down_menu( &curmenu, &xCursorPos, &yCursorPos ); if ( filename[0] != '\0' ) { switch ( i ) { case RETKEY: keymain = menu_to_key( curmenu ); break; case ESCKEY: waitkbd( wind.col + xCursorPos, wind.row + yCursorPos ); /* Show blinking cursor */ keymain = readkbd( ); /* If keypressed Get it */ break; default: keymain = i; break; } while ( keymain != ESCKEY ) { if ( ( keymain & 0xff ) >= 32 ) { keymain = changekey( keymain ); if ( insertmode ) { if ( !insert_char( keymain, &xCursorPos, &yCursorPos ) ) { linetoolong( ); } } else { if ( !ovrwrite_char( keymain, &xCursorPos, &yCursorPos ) ) { linetoolong( ); } } refreshline( xCursorPos, yCursorPos ); } else { /* Function Key */ switch ( keymain ) { case PGUPKEY: case CNTRL_R: page_up( ); break; case PGDNKEY: case CNTRL_C: page_down( ); break; case UPKEY: case CNTRL_E: cursor_up( ); break; case DNKEY: case CNTRL_X: cursor_down( yCursorPos ); break; case LEKEY: case CNTRL_S: cursor_left( &xCursorPos ); break; case 0x2301: gobeginblk( &xCursorPos ); break; case 0x2401: goendblk( &xCursorPos ); break; case RIKEY: case CNTRL_D: cursor_right( &xCursorPos, yCursorPos ); break; case CNTRL_W: scroll_up( ); break; case CNTRL_Z: scroll_down( ); break; case CHOMEKEY: top_of_page( ); break; case CPGUPKEY: topfile( &xCursorPos ); break; case CENDKEY: bottom_of_page( ); break; case CPGDNKEY: endfile( &xCursorPos ); break; case DELKEY: case CNTRL_G: delete_char( xCursorPos ); refreshline( xCursorPos, yCursorPos ); changeflag = YES; break; case CNTRL_T: delete_word( xCursorPos ); refreshline( xCursorPos, yCursorPos ); changeflag = YES; break; case CNTRL_Y: delete_line( ); changeflag = YES; break; case CNTRL_M: case RETKEY: if ( insertmode == NO ) { returnkey( &xCursorPos, yCursorPos ); } else { ret_with_ins( &xCursorPos, yCursorPos ); changeflag = YES; } break; case BSKEY: case CNTRL_H: backspace( &xCursorPos ); yCursorPos = findrow( ); refreshline( 0, yCursorPos ); changeflag = YES; break; case INSKEY: case CNTRL_V: insertmode = !insertmode; writeinsmode( ); break; case CNTRL_N: insert_ret( &xCursorPos ); break; case F10KEY: thaimode = !thaimode; writelanguage( ); break; case F1KEY: fontused = 0x00; writeattr( ); break; case F2KEY: fontused = fontused | ITALICATTR; writeattr( ); break; case F3KEY: fontused = fontused | ONELINEATTR; fontused = fontused & 0x7f; writeattr( ); break; case F4KEY: fontused = fontused | TWOLINEATTR; fontused = fontused & 0xfe; writeattr( ); break; case F5KEY: fontused = fontused | BOLDATTR; writeattr( ); break; case F6KEY: fontused = fontused | ENLARGEATTR; writeattr( ); break; case F7KEY: fontused = fontused | SUPERATTR; if ( ( fontused & SUBATTR ) == SUBATTR ) { fontused = fontused ^ SUBATTR; } writeattr( ); break; case F8KEY: fontused = fontused | SUBATTR; if ( ( fontused & SUPERATTR ) == SUPERATTR ) { fontused = fontused ^ SUPERATTR; } writeattr( ); break; case F9KEY: manualwrap( &xCursorPos, &yCursorPos ); break; case ALTM: editmacro( ); break; case TABKEY: case CNTRL_I: movetotab( &xCursorPos, yCursorPos ); break; case CNTRL_K: blockcommand( &xCursorPos ); break; case 0x1401: blkcmd( 'p', &xCursorPos ); break; case 0x6101: blkcmd( 'b', &xCursorPos ); break; case 0x6201: blkcmd( 'k', &xCursorPos ); break; case 0x6301: blkcmd( 'c', &xCursorPos ); break; case 0x6401: blkcmd( 'y', &xCursorPos ); break; case 0x6501: blkcmd( 'v', &xCursorPos ); break; case 0x6601: blkcmd( 'r', &xCursorPos ); break; case 0x6701: blkcmd( 'w', &xCursorPos ); break; case 0x6801: blkcmd( 'h', &xCursorPos ); break; case CNTRL_O: onscreen( xCursorPos, yCursorPos ); break; case 0x7101: doonscrn( 'l', xCursorPos, yCursorPos ); break; case 0x7201: doonscrn( 'r', xCursorPos, yCursorPos ); break; case 0x7301: doonscrn( 'i', xCursorPos, yCursorPos ); break; case 0x7401: doonscrn( 'n', xCursorPos, yCursorPos ); break; case 0x7501: doonscrn( 'c', xCursorPos, yCursorPos ); break; case 0x7601: doonscrn( 'p', xCursorPos, yCursorPos ); break; case 0x7701: doonscrn( 'x', xCursorPos, yCursorPos ); break; case CNTRL_Q: quick( &xCursorPos, &yCursorPos ); break; case 0x3501: deltoendline( xCursorPos, yCursorPos ); break; case 0x8111: inscntrl( CNTRL_W, xCursorPos, yCursorPos ); break; case 0x8211: inscntrl( CNTRL_S, xCursorPos, yCursorPos ); break; case 0x8311: inscntrl( CNTRL_R, xCursorPos, yCursorPos ); break; case 0x8411: inscntrl( CNTRL_B, xCursorPos, yCursorPos ); break; case 0x8511: inscntrl( CNTRL_E, xCursorPos, yCursorPos ); break; case 0x8611: inscntrl( CNTRL_T, xCursorPos, yCursorPos ); break; case 0x8711: inscntrl( CNTRL_V, xCursorPos, yCursorPos ); break; case CNTRL_P: printcntrl( xCursorPos, yCursorPos ); break; case HOMEKEY: home( &xCursorPos ); break; case ENDKEY: endline( &xCursorPos ); break; case CLEKEY: case CNTRL_A: backword( &xCursorPos ); break; case CRIKEY: case CNTRL_F: nextword( &xCursorPos, yCursorPos ); break; case CNTRL_L: if ( source[0] != '\0' ) { if ( replaceflag == NO ) { if ( searchfwd( &xCursorPos, &yCursorPos ) == NO ) { wordnotfound( ); } } else { if ( searchreplace( &xCursorPos, &yCursorPos ) == NO ) { wordnotfound( ); } } } break; case CNTRL_B: reform( ); break; case ALTP: gotopage( ); break; case CNTRL_J: case ALTL: gotoline( ); break; case 0x5101: searching( &xCursorPos, &yCursorPos ); break; case 0x5201: replacing( &xCursorPos, &yCursorPos ); break; case 0x8501: loadtoline( curline->text ); refreshline( 0, yCursorPos ); break; case CF1KEY: insertmacro( ¯o[0][0], &xCursorPos, &yCursorPos ); break; case CF2KEY: insertmacro( ¯o[1][0], &xCursorPos, &yCursorPos ); break; case CF3KEY: insertmacro( ¯o[2][0], &xCursorPos, &yCursorPos ); break; case CF4KEY: insertmacro( ¯o[3][0], &xCursorPos, &yCursorPos ); break; case CF5KEY: insertmacro( ¯o[4][0], &xCursorPos, &yCursorPos ); break; case CF6KEY: insertmacro( ¯o[5][0], &xCursorPos, &yCursorPos ); break; case CF7KEY: insertmacro( ¯o[6][0], &xCursorPos, &yCursorPos ); break; case CF8KEY: insertmacro( ¯o[7][0], &xCursorPos, &yCursorPos ); break; case CF9KEY: insertmacro( ¯o[8][0], &xCursorPos, &yCursorPos ); break; case CF10KEY: insertmacro( ¯o[9][0], &xCursorPos, &yCursorPos ); break; case AF2KEY: inscntrl( ITALICCODE, xCursorPos, yCursorPos ); break; case AF3KEY: inscntrl( ONELINECODE, xCursorPos, yCursorPos ); break; case AF4KEY: inscntrl( TWOLINECODE, xCursorPos, yCursorPos ); break; case AF5KEY: inscntrl( BOLDCODE, xCursorPos, yCursorPos ); break; case AF6KEY: inscntrl( ENLARGECODE, xCursorPos, yCursorPos ); break; case AF7KEY: inscntrl( SUPERCODE, xCursorPos, yCursorPos ); break; case AF8KEY: inscntrl( SUBCODE, xCursorPos, yCursorPos ); break; #ifdef WANT_TO_USE_GRAPH case ALTG: insertgraph( ); break; case ALTD: deletegraph( ); break; #endif case ALTX: quitprog = YES; keymain = ESCKEY; break; default: if ( ( alt_char_map( keymain ) ) != -1 ) { keymain = alt_char_map( keymain ); if ( insertmode ) { if ( !insert_char( keymain, &xCursorPos, &yCursorPos ) ) { linetoolong( ); } } else { if ( !ovrwrite_char( keymain, &xCursorPos, &yCursorPos ) ) { linetoolong( ); } } refreshline( xCursorPos, yCursorPos ); } break; } /* switch ( keymain ) */ } adjustcol( &xCursorPos ); while ( ( yCursorPos = findrow( ) ) > ( wind.width - 1 ) ) { storeline( curline ); curline = curline->previous; loadtoline( curline->text ); lineno--; } if ( !keypressed( ) ) { if ( !pagecomplete ) { showpage( ); } if ( !keypressed( ) ) { writecolno( firstcol + xCursorPos ); dispstrhgc( " ", wind.col, 2, NORMALATTR ); if ( !keypressed( ) ) { writepageline( ); } } } if ( quitprog != YES ) { waitkbd( wind.col + xCursorPos, wind.row + yCursorPos ); keymain = readkbd( ); dispkey( keymain ); } } /* while */ } else { /* if filename[0] != '\0' */ errorsound( ); } } while ( !quitprog ); if ( changeflag ) { blockmsg( 5 ); dispstrhgc( "ÂѧäÁèä´é¨Ñ´à¡çºá¿éÁ¢éÍÁÙÅ µéͧ¡ÒèѴà¡çºËÃ×ÍäÁè (Y/N)?", ( 16 + center_factor ) + 7, 5, REVERSEATTR ); keymain = 0; while ( ( keymain != 'n' ) && ( keymain != 'N' ) && ( keymain != 'y' ) && ( keymain != 'Y' ) ) { keymain = ebioskey( 0 ) & 0xff; if ( ( keymain == 'y' ) || ( keymain == 'Y' ) ) { writeblk( filename, sentinel->next, 0, sentinel->previous, MAXCOL ); } } } settext( ); return 0; }
static void checkfileh (lua_State *L, int findex) { if (topfile(L, findex)->f == NULL) luaL_error(L, "attempt to use a closed file"); }
int searchreplace( unsigned int *p_xCursorPos, unsigned int *y_CursorPos ) { int ok = 0; int i; int ask = YES; int global = NO; int found = NO; if ( optionnoask( ) ) { ok = 'y'; ask = NO; } if ( optionglobal( ) ) { topfile( p_xCursorPos ); showpageall( ); global = YES; } do { if ( searchfwd( p_xCursorPos, y_CursorPos ) ) { found = YES; if ( ask ) { dispstrhgc( "á·¹·ÕèËÃ×ÍäÁè ? (Y/N) ", 1, 2, BOLDATTR ); while ( ( ok != 'y' ) && ( ok != 'n' ) && ( ok != 'Y' ) && ( ok != 'N' ) ) { while ( !keypressed( ) ) { setcurpos( 19, 2, thaimode ); for ( i = 0; i < 15000; i++ ); setcurpos( 19, 2, thaimode ); for ( i = 0; i < 15000; i++ ); setcurpos( wind.col + *p_xCursorPos, wind.row + *y_CursorPos, thaimode ); for ( i = 0; i < 15000; i++ ); setcurpos( wind.col + *p_xCursorPos, wind.row + *y_CursorPos, thaimode ); for ( i = 0; i < 15000; i++ ); } /* while !keypressed */ ok = ebioskey( 0 ); if ( ( ok != CNTRL_U ) && ( ok != ESCKEY ) ) { ok = ok & 0xff; } else { return( CNTRL_U ); } } /* while ok */ } else { if ( keypressed( ) ) { ok = ebioskey( 0 ); if ( ( ok == CNTRL_U ) || ( ok == ESCKEY ) ) { return( CNTRL_U ); } } ok = 'y'; } if ( ( ok == 'y' ) || ( ok == 'Y' ) ) { replaceword( p_xCursorPos, y_CursorPos ); } ok = 0; } else { global = NO; } } while ( global ); return( found ); }
static gzFile tofile (lua_State *L, int findex) { gzFile*f = topfile(L, findex); if (*f == NULL) luaL_error(L, "attempt to use a closed file"); return *f; }