void run_unix () { static char command[COMMAND_LENGTH] = ""; register char *s; register ret, o_errno; CURSOR Old; if ((s = getstring(COMMAND_LENGTH, command, "Выполнение команды SHELL", "Введите команду SHELL")) != NULL) { strncpy (command, s, COMMAND_LENGTH); Old = VGetCursor (); VMove (0, 0); VSync (); VIClear (); VFlush (); s = strcmp (command, "") == 0 ? "/bin/sh" : command; TtyReset (); ret = system (s); o_errno = errno; /* VRedraw () портит errno */ fprintf (stderr, "Нажмите 'Enter' для продолжения."); (void) getchar (); TtySet (); VSetCursor( Old ); VRedraw (); if (ret == -1) error ("SHELL : %s", sys_errlist[o_errno]); } }
void emulator() { /* omit business about ModuleSP, as the compiler handles such things for us */ InitData(); RecognizeCart(); SetupBanks(); Reset(); Init_Service(); Controls(); /* ExitEmulator gets set by Controls() if the user presses Escape */ while( !ExitEmulator ) { VSync(); srv_CopyScreen(); ScanFrame(); Controls(); while(GamePaused) { Controls(); } } }
/* cmd, com */ void quitdeco(void) { VMove (LINES-1, 0); VClearLine (); VSync (); v.VClose (); exit (0); }
void run_dos () { static char command[COMMAND_LENGTH] = ""; register char *s; register ret, o_errno; CURSOR Old; if ((s = getstring(COMMAND_LENGTH, command, "Выполнение команды DOS", "Введите команду DOS")) != NULL) { strncpy (command, s, COMMAND_LENGTH); _dos_setvect (0x1C, old_timer); Old = VGetCursor (); VMove (0, 0); VSync (); VIClear (); s = strcmp (command, "") == 0 ? "COMMAND.COM" : command; ret = system (s); o_errno = errno; /* VRedraw () портит errno */ fprintf (stderr, "Нажмите 'Enter' для продолжения."); (void) getchar (); VSetCursor( Old ); VRedraw (); _dos_setvect (0x1C, timer_int); old_addr = -1; if (ret == -1) error ("DOS : %s", sys_errlist[o_errno]); } }
void runhelp (char *name) { register r, c, w, h; BOX *box; register struct helptab *p; struct help *hp; hp = findhelp (name); if (! hp) return; p = hp->htab; if (! p->str) inithelp (hp); w = 72; h = 21; r = 2; c = 4; box = VGetBox (r, c-1, h, w+2); /* save box */ VStandOut (); VSetDim (); VFillBox (r, c-1, h, w+2, ' '); /* clear */ VDrawBox (r, c, h, w); /* draw margins */ VMPutString (r, c + (w-6) / 2, " Help "); /* head */ for (; p->row; ++p) { if (p->row >= h) continue; if (p->bold) { VSetBold (); VStandEnd (); } if (! p->col) VMPutString (r+p->row, c + (w-strlen(p->str))/2, p->str); else VMPutString (r+p->row, c + p->col, p->str); if (p->bold) { VSetDim (); VStandOut (); } } VStandEnd (); VSetNormal (); for (;;) { hidecursor (); VSync (); switch (KeyGet ()) { default: break; case cntrl (']'): /* redraw screen */ VRedraw (); continue; } break; } VUngetBox (box); VFreeBox (box); }
void big_menu (m) { struct b_field *b; register i, j = 1; BOX *left_box; b = batch_entry[batch_n]; lines = cols = wid_h = wid_e = 0; for (i = 0; b[i].header != NULL; i++) { lines++; wid_h = max( wid_h, (int) strlen( b[i].header )); wid_e = max( wid_e, b[i].width ); } cols = wid_h + 2 + wid_e; cols = max (cols, (int) strlen(batch_name[batch_n])); r = (LINES - lines) - 5; c = m ? 3 : (COLS - cols) - 5; endmesg (); if (m) { if (lines == 0) return; left_box = VGetBox (r - 1, c - 1, lines + 4, cols + 4); } else { if (right_box != 0) { VUngetBox (right_box); VFreeBox (right_box); } right_box = VGetBox (r - 1, c - 1, lines + 4, cols + 4); } VStandOut (); VFillBox (r - 1, c - 1, lines + 4, cols + 4, ' '); VStandEnd (); VDrawBox (r, c, lines+2, cols+2); VMPutString (r, (c + (cols + 2 - strlen(batch_name[batch_n])) / 2), batch_name[batch_n]); if (lines == 0) return; drawhdr (b); if (m) { for (i = 0; j != 0; i += j) { if (i >= lines) i = 0; else if (i < 0) i = lines - 1; j = editval1 (b + i, i); VStandOut (); printval (b + i, i); VStandEnd (); } VUngetBox (left_box); VFreeBox (left_box); } VSync (); }
getmenu () { if (! menu[0].len) initmenu (); getboxes (); VMPutString (LINES-1, 0, "\0011\16 \17 2\16 \17 3\16 \17 4\16 \17 5\16 \17 6\16 \17 7\16 \17 8\16 \17 9\16 \01710\16Quit \17\2"); for (;;) { drawhead (nmenu); for (;;) { drawmenu (&menu[nmenu]); hidecursor (); VSync (); switch (KeyGet ()) { default: VBeep (); continue; case cntrl (']'): /* redraw screen */ VRedraw (); continue; case cntrl ('M'): clrmenu (&menu[nmenu]); return (1); case cntrl ('J'): clrmenu (&menu[nmenu]); return (2); case cntrl ('C'): case cntrl ('['): case meta ('J'): /* f0 */ clrmenu (&menu[nmenu]); return (0); case meta ('r'): /* right */ clrmenu (&menu[nmenu]); if (! menu[++nmenu].mname) nmenu = 0; break; case meta ('l'): /* left */ clrmenu (&menu[nmenu]); if (--nmenu < 0) { for (nmenu=0; menu[nmenu].mname; ++nmenu); --nmenu; } break; case meta ('u'): /* up */ upmenu (&menu[nmenu]); continue; case meta ('d'): /* down */ downmenu (&menu[nmenu]); continue; } break; } } }
/* menu */ void shell (void) { /* run shell */ VClear (); VSync (); VRestore (); runl(0, ABSSHELL, SHELL, "-i", NULL); VReopen (); VClear (); setdir (cur == left ? right : left, NULL); setdir (cur, NULL); }
void OGLWindow::InitOGLState() { VSync(true); glClearColor( 0.0f, 0.0f, 0.0f, 1.0f ); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); //Initialise OGL shader m_shader = new OGLShaderProgram(); m_skyBoxShader = new OGLShaderProgram(); m_shader->CreateShaderProgram(); m_shader->AttachAndCompileShaderFromFile(L"../asset/shader/glsl/basic.vert", SHADER_VERTEX); m_shader->AttachAndCompileShaderFromFile(L"../asset/shader/glsl/basic.frag", SHADER_FRAGMENT); m_shader->BindAttributeLocation( 0, "position" ); m_shader->BindAttributeLocation( 1, "inNormal" ); m_shader->BindAttributeLocation( 2, "inUV" ); //shading skybox via shaders m_skyBoxShader->CreateShaderProgram(); m_skyBoxShader->AttachAndCompileShaderFromFile(L"../asset/shader/glsl/skybox.vert", SHADER_VERTEX); m_skyBoxShader->AttachAndCompileShaderFromFile(L"../asset/shader/glsl/skybox.frag", SHADER_FRAGMENT); m_skyBoxShader->BindAttributeLocation(0, "position"); m_skyBoxShader->BindAttributeLocation(1, "inNormal"); m_skyBoxShader->BindAttributeLocation(2, "inUV"); glBindFragDataLocation( m_shader->GetProgramHandle(), 0, "outFrag" ); glBindFragDataLocation(m_skyBoxShader->GetProgramHandle(), 0, "outFrag"); m_shader->BuildShaderProgram(); m_shader->ActivateShaderProgram(); m_skyBoxShader->BuildShaderProgram(); m_shader->ActivateShaderProgram(); glUniform1i( m_uniform_texture, 0 ); //Create a texture sampler glGenSamplers( 1, (GLuint*)(&m_texDefaultSampler) ); glSamplerParameteri(m_texDefaultSampler , GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glSamplerParameteri(m_texDefaultSampler , GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glSamplerParameteri(m_texDefaultSampler , GL_TEXTURE_MIN_FILTER , GL_LINEAR); glSamplerParameteri(m_texDefaultSampler , GL_TEXTURE_MAG_FILTER , GL_LINEAR); }
void doquit() { if (! saved_batch && loaded_batch) save_batch (); VMove (LINES - 1, 0); VClearLine (); VMove (LINES - 2, 0); VSetPalette (2, 0, 7, 1, 15, 0, 15, 7, 14, 0, 15, 1); VSetBold (); VSync (); VClose (); # ifdef MSDOS _dos_setvect (0x1C, old_timer); # endif exit (0); }
/* main, menu */ void quit (void) { int choice; choice = getchoice (ppid == 1, " Demos Commander ", ppid == 1 ? "Do you want to log out ?" : "Do you want to quit the Demos Commander ?", NULL, " Yes ", " No ", " Exec shell "); if (choice == 0) quitdeco (); if (choice == 2) { /* exec shell */ VClear (); VSync (); v.VClose(); execle (ABSSHELL, SHELL, "-i", NULL, EnvVector); exit (0); } /* else stay here */ }
static int menuchoice () { int ch = 0; for (;;) { drawchoice (ch); hidecursor (); VSync (); switch (KeyGet ()) { default: VBeep (); continue; case cntrl (']'): /* redraw screen */ VRedraw (); continue; case cntrl ('['): case cntrl ('C'): case meta ('J'): /* f0 */ return (-1); case cntrl ('M'): case cntrl ('J'): return (ch); case ' ': case cntrl ('I'): case meta ('r'): /* right */ if (++ch >= cnum) ch = 0; continue; case meta ('b'): /* backspace */ case meta ('l'): /* left */ if (--ch < 0) ch = cnum-1; continue; } } }
/************* MAIN START ******************************************/ main() { int i; GsDOBJ2 *op; int outbuf_idx; MATRIX tmpls, tmplw; u_long vcount; u_long *p; long psize, tsize, amount, reduct; long sxy0,sxy1,sxy2,sxy3; POLY_FT4 *pft; ResetCallback(); init_all(); while (1) { if (obj_interactive() == 0) return 0; GsSetRefView2(&view); outbuf_idx = GsGetActiveBuff(); GsSetWorkBase((PACKET *) out_packet[outbuf_idx]); GsClearOt(0, 0, &Wot[outbuf_idx]); for (i = 0, op = object; i < Objnum; i++) { GsGetLws(op->coord2, &tmplw, &tmpls); GsSetLightMatrix(&tmplw); GsSetLsMatrix(&tmpls); SortTMDobject(op, &Wot[outbuf_idx], 14 - OT_LENGTH); op++; } VSync(0); padd = PadRead(1); GsSwapDispBuff(); GsSortClear(0x0, 0x0, 0x0, &Wot[outbuf_idx]); amount = 0; reduct = 0; for(p = (u_long *)Wot[outbuf_idx].tag; !isendprim(p); p = nextPrim(p)){ if((getlen(p) != 0) && (getcode(p) == 0x2c)){ amount++; psize = abs(NormalClip( *(u_long *)&(((POLY_FT4 *)p)->x0), *(u_long *)&(((POLY_FT4 *)p)->x1), *(u_long *)&(((POLY_FT4 *)p)->x2)))/2; psize += abs(NormalClip( *(u_long *)&(((POLY_FT4 *)p)->x1), *(u_long *)&(((POLY_FT4 *)p)->x2), *(u_long *)&(((POLY_FT4 *)p)->x3)))/2; pft = (POLY_FT4 *)p; sxy0 = (pft->v0)<<16 | pft->u0; sxy1 = (pft->v1)<<16 | pft->u1; sxy2 = (pft->v2)<<16 | pft->u2; sxy3 = (pft->v3)<<16 | pft->u3; tsize = abs(NormalClip(sxy0,sxy1,sxy2))/2; tsize += abs(NormalClip(sxy1,sxy2,sxy3))/2; if(psize < tsize) reduct++; } } GsClearVcount(); GsDrawOt(&Wot[outbuf_idx]); DrawSync(0); vcount = GsGetVcount(); if(ismip) KanjiFntPrint("(mip-map) %d\n(%d/%d)", vcount, reduct, amount); else KanjiFntPrint("(original) %d\n(%d/%d)", vcount, reduct, amount); KanjiFntFlush(-1); } }
static char *runudm (char *scale) { /* user defined menu */ register key, cm; BOX *box, *curbox; box = VGetBox (menurow-2, menucol-4, nm+4, menuwid+8); VSetDim (); VStandOut (); VFillBox (menurow-2, menucol-4, nm+4, menuwid+8, ' '); VDrawBox (menurow-1, menucol-1, nm+2, menuwid+2); mvcaddstr (menurow-1, 40, " User Menu "); printudm (); VSetNormal (); VStandEnd (); cm = 0; for (;;) { curbox = VGetBox (menurow+cm, menucol, 1, menuwid); VPrintBox (curbox); hidecursor (); VSync (); key = KeyGet (); VUngetBox (curbox); VFreeBox (curbox); switch (key) { default: findmenu: if (key>0 && key<0200 && scale [key] < MENUSZ) { cm = scale [key]; break; } VBeep (); continue; case meta ('A'): key = 1; goto findmenu; case meta ('B'): key = 2; goto findmenu; case meta ('C'): key = 3; goto findmenu; case meta ('D'): key = 4; goto findmenu; case meta ('E'): key = 5; goto findmenu; case meta ('F'): key = 6; goto findmenu; case meta ('G'): key = 7; goto findmenu; case meta ('H'): key = 8; goto findmenu; case meta ('I'): key = 9; goto findmenu; case cntrl (']'): /* redraw screen */ VRedraw (); continue; case cntrl ('M'): case cntrl ('J'): break; case cntrl ('C'): case cntrl ('['): case meta ('J'): /* f0 */ cm = -1; break; case meta ('u'): /* up */ if (--cm < 0) cm = nm-1; continue; case meta ('d'): /* down */ if (++cm >= nm) cm = 0; continue; } break; } VUngetBox (box); VFreeBox (box); if (cm >= 0 && um[cm].cex) { if (um[cm].menu) return (um[cm].cex); /* execute command from menu */ expand (command, um[cm].cex, cur->cat[cur->curfile].name); cpos = strlen (command); if (command [0]) execmd (um[cm].wait, um[cm].hist); } return ((char *) 0); }
main() { int i; int hsync; int ret; int tmp_v; ResetCallback(); // initialize CD subsystem CdInit(); CdSetDebug(0); // initialize graphics ResetGraph(0); // initialize debug display FntLoad(960, 256); SetDumpFnt(FntOpen(64, 64, 128, 128, 0, 512)); // initialize display double buffer SetDefDrawEnv(&db[0].draw, 0, 0, 320, 240); SetDefDrawEnv(&db[1].draw, 0, 240, 320, 240); SetDefDispEnv(&db[0].disp, 0, 240, 320, 240); SetDefDispEnv(&db[1].disp, 0, 0, 320, 240); db[0].draw.isbg = 1; setRGB0(&db[0].draw, 0, 0, 0); db[1].draw.isbg = 1; setRGB0(&db[1].draw, 0, 0, 0); setPolyF4(&db[0].prim); setRGB0(&db[0].prim, 255, 255, 0); setPolyF4(&db[1].prim); setRGB0(&db[1].prim, 255, 255, 0); for (i = 0; i < READ_FILES; i++) { set_read_file(i, filename[file_order[i]], (void *)0x80100000); } file_num = 0; // set CD subsystem mode param[0] = CdlModeSpeed; // x2 speed while (CdControl(CdlSetmode, param, 0) == 0) ; SetDispMask(1); // enable display // main loop while(1) { cdb = (cdb==db)? db+1: db; // swap double buffer ID ClearOTag(cdb->ot, OTSIZE); moving_object(); FntPrint("CD READ TEST 2\n----------------\n"); FntPrint("FILE: %d\n", file_num); FntPrint("POS: %02x:%02x:%02x\n", fp[file_num].pos.minute, fp[file_num].pos.second, fp[file_num].pos.sector); FntPrint("SECTORS: %d\n", read_remain_sector); FntPrint("READ V: %d\n", read_v); if ((ret = check_read_file()) == CD_READ_COMPLETE) { if (++file_num > READ_FILES-1) { file_num = 0; tmp_v = VSync(-1); read_v = tmp_v - start_v; start_v = tmp_v; } read_remain_sector = READ_SECTORS; // for display start_read_file(file_num); } else if (ret != CD_READ_BUSY) { start_read_file(0); start_v = VSync(-1); } read_manage(); hsync = VSync(0); PutDispEnv(&cdb->disp); // update display environment PutDrawEnv(&cdb->draw); // update drawing environment DrawOTag(cdb->ot); print_hsync(hsync); FntPrint("\nERROR: %d\n", errcnt); // flush debug strings FntFlush(-1); } }
main() { DB db[2]; /* packet double buffer */ DB *cdb; /* current db */ MATRIX rottrans; /* rot-trans matrix */ int i; /* work */ int dmy, flg; /* dummy */ CVECTOR col[12]; /* cube color */ u_long cnt; etc.near_clip=500; etc.far_clip=5000; etc.clip_off=0; PadInit(0); /* initialize PAD */ ResetGraph(0); /* reset graphic subsystem (0:cold,1:warm) */ SetGraphDebug(0); /* set debug mode (0:off, 1:monitor, 2:dump) */ InitGeom(); /* initialize geometry subsystem */ SetGeomOffset(320, 240); /* set geometry origin as (160, 120) */ SetGeomScreen(SCR_Z); /* distance to viewing-screen */ SetLightMatrix(&LLM); SetColorMatrix(&LCM); SetBackColor(BK.vx,BK.vy,BK.vz); SetFarColor(FC.vx,FC.vy,FC.vz); SetFogNear(1*SCR_Z,SCR_Z); /* initialize environment for double buffer (interlace) * buffer ID VRAM address *------------------------------------------------------- * buffer #0 (0, 0)-(640,480) * buffer #1 (0, 0)-(640,480) */ SetDefDrawEnv(&db[0].draw, 0, 0, 640, 480); SetDefDrawEnv(&db[1].draw, 0, 0, 640, 480); SetDefDispEnv(&db[0].disp, 0, 0, 640, 480); SetDefDispEnv(&db[1].disp, 0, 0, 640, 480); FntLoad(960,256); SetDumpFnt(FntOpen(64,64,256,200,0,512)); SetRCnt(RCntCNT2,0xffff,RCntMdNOINTR|RCntMdFR); StartRCnt(RCntCNT2); /* set surface colors */ for (i = 0; i < 12; i+=2) { col[i].r = col[i+1].r = 0xff/*rand()*/; /* R */ col[i].g = col[i+1].g = 0xff/*rand()*/; /* G */ col[i].b = col[i+1].b = 0xff/*rand()*/; /* B */ col[i].cd = col[i+1].cd = CODE_G3; /* cd */ } init_prim(&db[0]); /* set primitive parameters on buffer #0 */ init_prim(&db[1]); /* set primitive parameters on buffer #1 */ SetDispMask(1); /* enable to display (0:inhibit, 1:enable) */ while (pad_read(&rottrans) == 0) { cdb = (cdb==db)? db+1: db; /* swap double buffer ID */ ClearOTagR(cdb->ot, OTSIZE); /* clear ordering table */ /* add cube */ ResetRCnt(RCntCNT2); add_cube(cdb->ot, cdb->s, v, n, col); cnt= GetRCnt(RCntCNT2); FntPrint("cnt=%d\n",cnt); /* swap buffer */ DrawSync(0); /* wait for end of drawing */ VSync(0); /* wait for the next V-BLNK */ PutDrawEnv(&cdb->draw); /* update drawing environment */ PutDispEnv(&cdb->disp); /* update display environment */ DrawOTag(cdb->ot+OTSIZE-1); /* draw */ FntFlush(-1); } PadStop(); exit(); }
main (int argc, char **argv, char **envp) { register c; if (argc > 2) { outerr("Usage: deco [dirname]\n",0); exit (1); } outerr("Demos Commander, Copyright (C) 1989-1994 Serge Vakulenko\n",0); palette = dflt_palette; EnvInit (envp); uid = getuid (); gid = getgid (); # ifdef GROUPS gidnum = getgroups (sizeof(gidlist)/sizeof(gidlist[0]), (unsigned int *)gidlist); # endif ppid = getppid (); user = username (uid); group = groupname (gid); tty = ttyname (0); machine = getmachine (); #if 0 sigign(); #else signal(SIGTERM, SIG_IGN); signal(SIGQUIT, SIG_IGN); signal(SIGINT, SIG_IGN); # ifdef SIGTSTP signal(SIGTSTP, SIG_IGN); # endif #endif init (); // inithome (); VClear (); /* init class dir */ if (argc > 1) // chdir (argv [1]); left = new dir(argv [1]); else left = new dir; right = new dir; left->d.basecol = 0; right->d.basecol = 40; /*-----------*/ initfile.read(); if (uid == 0) palette.dimfg = 6; v.VSetPalette (palette.fg, palette.bg, palette.revfg, palette.revbg, palette.boldfg, palette.boldbg, palette.boldrevfg, palette.boldrevbg, palette.dimfg, palette.dimbg, palette.dimrevfg, palette.dimrevbg); setdir (left, "."); setdir (right, "."); left->chdir(left->d.cwd); cur = left; draw.draw(cur, left, right); for (;;) { if (! cmdreg) draw.drawcursor(cur); // cmd.drawcmd(cur, &left, &right); VSync (); c = KeyGet (); if (! cmdreg) draw.undrawcursor(cur); switch (c) { case '+': /* select */ case '-': /* unselect */ if (! cpos && ! cmdreg && ! cur->d.status) { if (c == '+') tagall (); else untagall (); draw.draw(cur, left, right); continue; } default: // if (c>=' ' && c<='~' || c>=0300 && c<=0376) { // if (cpos || c!=' ') // cmd.inscmd(c); // continue; // } VBeep (); continue; // case cntrl ('V'): /* quote next char */ // cmd.inscmd(quote ()); // continue; // case cntrl ('J'): /* insert file name */ // if (! cmdreg && ! cur->status) // cmd.namecmd(cur); // continue; // case cntrl ('G'): // cmd.delcmd(); // continue; // case meta ('b'): /* backspace */ // if (cpos) { // cmd.leftcmd(); // cmd.delcmd(); // } // continue; case cntrl ('O'): /* set/unset command mode */ case cntrl ('P'): /* set/unset command mode */ switchcmdreg (); if (! cmdreg) visualwin = 1; draw.draw(cur, left, right); continue; case cntrl ('M'): /* return */ // if (command [0]) { // cmd.exec(cur, &left, &right, 1, 1); // draw.draw(cur, &left, &right); // continue; // } if (cmdreg) { cmdreg = 0; if (! visualwin) { visualwin = 1; setdir (cur==left ? right : left, NULL); setdir (cur, NULL); } draw.draw(cur, left, right); continue; } execute (); continue; case cntrl (']'): /* redraw screen */ VRedraw (); continue; // case cntrl ('B'): /* history */ // if (! visualwin) // VClearBox (1, 0, LINES-2, 80); // cmd.histmenu(cur, &left, &right); // draw.draw(cur, &left, &right); // continue; case meta ('A'): /* f1 */ genhelp (); draw.draw(cur, left, right); continue; case meta ('B'): /* f2 */ udm.menu(); draw.draw(cur, left, right); continue; case meta ('I'): /* f9 */ mymenu.runmenu (cur==left ? 'l' : 'r'); draw.draw(cur, left, right); continue; case meta ('J'): /* f0 */ case cntrl ('C'): /* quit */ quit (); continue; case cntrl ('U'): /* swap panels */ swappanels (); draw.draw(cur, left, right); continue; case cntrl ('F'): /* full screen */ fullscreen (); draw.draw(cur, left, right); continue; case cntrl ('^'): /* cd / */ directory (0, 'r'); if (! cur->d.status) draw.drawdir(cur, 1, left, right); continue; case cntrl ('\\'): /* cd $HOME */ directory (0, 'o'); if (! cur->d.status) draw.drawdir(cur, 1, left, right); continue; // case cntrl ('Y'): /* clear line */ // command [cpos = 0] = 0; // continue; // case cntrl ('X'): /* next history */ // cmd.nextcmd(); // continue; // case cntrl ('E'): /* prev history */ // cmd.prevcmd(); // continue; // case cntrl ('S'): /* char left */ // case cntrl ('A'): /* char left */ // cmd.leftcmd(); // continue; // case cntrl ('D'): /* char right */ // cmd.rightcmd(); // continue; case cntrl ('I'): /* tab */ if (cmdreg) {} // if (command [cpos]) // cmd.endcmd(); // else // cmd.homecmd(); else { switchpanels (); if (fullwin) { draw.drawbanners(); draw.drawdir(cur, 0, left, right); break; } } continue; case cntrl ('W'): /* double width */ if (! cmdreg) { setdwid (); draw.draw(cur, left, right); } continue; // case meta ('G'): /* f7 */ // makedir (); // draw.draw(cur, &left, &right); // continue; case meta ('h'): /* home */ case meta ('e'): /* end */ case meta ('u'): /* up */ case meta ('d'): /* down */ case meta ('l'): /* left */ case meta ('r'): /* right */ case meta ('n'): /* next page */ case meta ('p'): /* prev page */ case cntrl ('K'): /* find file */ case cntrl ('R'): /* reread catalog */ case cntrl ('T'): /* tag file */ case meta ('C'): /* f3 */ case meta ('D'): /* f4 */ case meta ('E'): /* f5 */ case meta ('F'): /* f6 */ case meta ('H'): /* f8 */ case cntrl ('L'): /* status */ if (cmdreg || cur->d.status) {} // docmdreg (c); else doscrreg (c); continue; } } }
static char *editstring (int r, int c, int w, char *str, int cp) { register key, k; int firstkey = 1; if (cp) { for (cp=0; str[cp]; ++cp); firstkey = 0; } for (; ; firstkey=0) { VClearBox (r, c, 1, w); VMPutString (r, c, str); VMove (r, c+cp); VSync (); switch (key = KeyGet ()) { default: if (key<' ' || (key>'~' && key<0300) || key>0377) { VBeep (); continue; } if (firstkey) { str[0] = key; str[1] = 0; cp = 1; continue; } for (k=cp; str[k]; ++k) SWAP (key, str[k]); str [k] = key; str [w] = str [k+1] = 0; /* fall through */ case meta ('r'): /* right */ if (str [cp]) { ++cp; if (cp >= w) cp = w-1; } continue; case meta ('l'): /* left */ if (--cp < 0) cp = 0; continue; case cntrl (']'): /* redraw screen */ VRedraw (); continue; case cntrl ('C'): case cntrl ('['): case meta ('J'): /* f0 */ return (0); case cntrl ('M'): case cntrl ('J'): return (str); case cntrl ('I'): if (str [cp]) while (str [++cp]); else cp = 0; continue; case meta ('h'): /* home */ cp = 0; continue; case meta ('e'): /* end */ while (str [cp]) ++cp; continue; case meta ('b'): /* back space */ if (cp) { for (k=cp--; str[k]; ++k) str[k-1] = str[k]; str [k-1] = 0; } continue; case cntrl ('G'): /* delete */ if (! str [cp]) continue; for (k=cp+1; str[k]; ++k) str[k-1] = str[k]; str [k-1] = 0; continue; case cntrl ('Y'): /* clear line */ str [cp = 0] = 0; continue; } } }
int getchoice (int bold, char *head, char *msg, char *mesg2, char *c1, char *c2, char *c3) { int len, ch; int isattr; register r, c, w, h; BOX *box; char mesg[67]; strncpy(mesg, msg, sizeof (mesg)); mesg[sizeof(mesg)-1] = 0; w = strlen (mesg); if (mesg2) { len = strlen (mesg2); if (len > w) w = len; } len = strlen (head); if (len > w) w = len; len = 0; if (c1) len += strlen (c1); if (c2) len += strlen (c2); if (c3) len += strlen (c3); if (len > w) w = len; h = 6; w += 10; if (bold) r = LINES/2; else r = LINES/4; c = (80 - w) / 2; box = VGetBox (r-1, c-2, h+2, w+4); /* save box */ isattr = VStandOut (); if (bold) VSetBold (); else VSetDim (); VFillBox (r-1, c-2, h+2, w+4, ' '); /* clear */ VDrawBox (r, c, h, w); /* draw margins */ VMPutString (r, c + (w-strlen(head)) / 2, head); /* head */ if (mesg2) { VMPutString (r+1, c + (w-strlen(mesg)) / 2, mesg); VMPutString (r+2, c + (w-strlen(mesg2)) / 2, mesg2); } else VMPutString (r+2, c + (w-strlen(mesg)) / 2, mesg); if (c1) { if (isattr) { attron = VStandEnd; attroff = VStandOut; } else { attron = 0; attroff = 0; } initchoice (r+4, c+w/2, c1, c2, c3); ch = menuchoice (); VStandEnd (); VSetNormal (); VUngetBox (box); VFreeBox (box); return (ch); } else { /* message */ VStandEnd (); VSetNormal (); mbox = box; hidecursor (); VSync (); #ifdef DOC KeyGet (); #endif return (0); } }