void gui_load_user_menu_script(const char *fn) { if (fn) { #ifdef OPT_SCRIPTING script_load(fn, SCRIPT_LOAD_LAST_PARAMSET ); load_params_names_cfg(); #endif // exit menu system on the assumption the user will want to run the script just loaded gui_set_mode(&altGuiHandler); kbd_reset_autoclicked_key(); rinit(); } }
void infin(char **av) { int **in; int *r; int l12[2]; int i; int j; int k; j = -1; l12[0] = ft_strlen(av[1]); l12[1] = ft_strlen(av[2]); r = rinit(l12[0], l12[1]); if (!l12[0] || !l12[1]) write(1, "0\n", 2); else if (av[1][0] == '-' && av[2][0] == '-') in = ft_strtotab(&av[1][1], &av[2][1], --l12[0], --l12[1]); else if (av[1][0] == '-' && (in = ft_strtotab(&av[1][1], av[2], --l12[0], l12[1]))) write(1, "-", 1); else if (av[2][0] == '-' && (in = ft_strtotab(av[1], &av[2][1], l12[0], --l12[1]))) write(1, "-", 1); else in = ft_strtotab(av[1], av[2], l12[0], l12[1]); if (!in || !r) return (); while (++j < len2) { k = j + 1; i = -1 while (++i < len1 && --k >= 0) { if (j = 0) r[j * len1 + i] += in[i][j - k] + (r[j * len1 + i - 1]) / 10; r[j * len1 + i - 1] = r[j * len1 + i - 1] % 10; } } return (); }
int main(void) { long i; /* loop counter */ long rand_val; /* random number */ long first_rand_val; /* first random number */ time_t tim; /* system time */ unsigned long ul_seed; /* seed, from system time */ Lvb_bool all_same = LVB_TRUE; /* all 'random' values same */ lvb_initialize(); /* seed random number generator from system clock */ tim = time(NULL); lvb_assert(tim != -1); ul_seed = (unsigned long) tim; ul_seed = ul_seed % (1UL + (unsigned long) MAX_SEED); lvb_assert(ul_seed <= MAX_SEED); rinit((int) ul_seed); first_rand_val = randpint(UPPER_LIM); for (i = 0; i < LOOP_CNT; i++) { rand_val = randpint(UPPER_LIM); lvb_assert(rand_val <= UPPER_LIM); lvb_assert(rand_val >= 0); if (rand_val != first_rand_val) all_same = LVB_FALSE; } if (all_same == LVB_FALSE) { printf("test passed\n"); return EXIT_SUCCESS; } else { printf("test failed\n"); return EXIT_FAILURE; } }
void main(int argc, char *argv[]) { int i, got, scr; Text *t; Rectangle r; Flayer *nwhich; int fwdbut; if (argc >= 3 && strcmp(argv[1], "-r") == 0) { machine = argv[2]; } getscreen(argc, argv); fwdbut = scrollfwdbut(); iconinit(); initio(); scratch = alloc(100*RUNESIZE); nscralloc = 100; r = screen.r; r.max.y = r.min.y+Dy(r)/5; flstart(screen.clipr); rinit(&cmd.rasp); flnew(&cmd.l[0], stgettext, 1, &cmd); flinit(&cmd.l[0], r, font); cmd.nwin = 1; which = &cmd.l[0]; cmd.tag = Untagged; outTs(Tversion, VERSION); startnewfile(Tstartcmdfile, &cmd); got = 0; for(;;got = waitforio()){ if(hasunlocked && RESHAPED()) reshape(); if(got&RHost) rcv(); if(got&RExtern){ for(i=0; cmd.l[i].textfn==0; i++) ; current(&cmd.l[i]); flsetselect(which, cmd.rasp.nrunes, cmd.rasp.nrunes); type(which, RExtern); } if(got&RKeyboard) if(which) type(which, RKeyboard); else kbdblock(); if(got&RMouse){ if(lock==2 || !ptinrect(mouse.xy, screen.r)){ mouseunblock(); continue; } nwhich = flwhich(mouse.xy); scr = which && ptinrect(mouse.xy, which->scroll); if(mouse.buttons) flushtyping(1); if (chord == 1 && !mouse.buttons) chord = 0; if (chord) chord |= mouse.buttons; else if(mouse.buttons&1){ if(nwhich){ if(nwhich!=which) current(nwhich); else if(scr) scroll(which, 1, fwdbut == 3 ? 1 : 3); else{ t=(Text *)which->user1; if(flselect(which)){ outTsl(Tdclick, t->tag, which->p0); t->lock++; }else if(t!=&cmd) outcmd(); if(mouse.buttons&1) chord = mouse.buttons; } } }else if((mouse.buttons&2) && which){ if(scr) scroll(which, 2, 2); else menu2hit(); }else if((mouse.buttons&4)){ if(scr) scroll(which, 3, fwdbut == 3 ? 3 : 1); else menu3hit(); }else if((mouse.buttons&8)){ scrollone(which, 1); }else if((mouse.buttons&16)){ scrollone(which, 3); } mouseunblock(); } if(chord) { t = (Text *)which->user1; if(!t->lock){ int w = which-t->l; if(chord&2){ cut(t, w, 1, 1); chord &= ~2; } if(chord&4){ paste(t, w); chord &= ~4; } } } } }
int main(int argc, char *argv[]){ long k,q; long i,j,t; /* 追加しました */ unsigned int iseed; //long imax; long mcs; long logcount,logstep, ocount, ocount_all; double delta2[NOMCS+1], delta2z[NOMCS+1], zsl[NOMCS+1]; double delta2av, delta2zav, zslav; double energy[NOMCS+1], energy_s[NOMCS+1]; double energy2[NOMCS+1], energy_s2[NOMCS+1]; double mag_av[NOMCS+1]; double mag_av2[NOMCS+1]; double energy_av, energy2_av, energy_s_av, energy_s2_av; double mag_av_av, mag_av2_av; double G2x_tmp[SL+1], G2y_tmp[SL+1], G2z_tmp[SL+1]; double G2x_all[SL+1], G2y_all[SL+1], G2z_all[SL+1]; double magz_tmp[Mz+1],mag2z_tmp[Mz+1]; double magz_all[Mz+1],mag2z_all[Mz+1]; double d_poly_tmp[Mz+1]; double d_poly_all[Mz+1]; double AC_a_all[M/2+1][SL+1],AC_b_all[M/2+1][SL+1],AC_p_all[M/2+1][SL+1]; double d_a_all[SL+1],d_b_all[SL+1],d_p_all[SL+1]; double c[SL+1],s_zav[Mz+1]; FILE *fp0; FILE *fp1; FILE *fp2; FILE *fp3; FILE *fp4; FILE *fp5; FILE *fp6; FILE *fp7; FILE *fp8; FILE *fp9; FILE *fp10; FILE *fp11; iseed=ISEED; rinit(iseed); transition_prob(K,J,h,T); /* initial distribution */ //もしargumentが特定の値ならばinit_conf()をread_rnd()とread_spin()に置き換える init_conf(M,Mz,SN,SL,s,x,y,z,xdummy,ydummy); logcount=TMCS; logstep=TMCS; //初期配置に置き、カウンターをTMCS分だけ進める for(mcs=1;mcs<TMCSMAX+1;mcs++){ //Thermatizationに達するまで繰り返す update(K,J,SL,SN,M,Mz,s,imsk,x,y,z,xdummy,ydummy); if (nonsolFlag==!1) { update_sol(K,J,h,M,Mz,s); } if(mcs==logcount){ delta2_calc(SL,SN,x,y,z); energy_calc(K,J,h,SL,SN,M,Mz,s,x,y,z); magnetization_calc(M,Mz,s); printf("%ld %d %15.12f %15.12f %15.12f %15.12f %15.12f %15.12f %15.12f %15.12f %15.12f\n", mcs, SL, DELTA2, DELTA2z, zSL, E, E2, Es, Es2, mag, mag2); fflush(stdout); logcount+=logstep; }; }; /* update observation */ logcount=OMCS; logstep=OMCS; for(k=1; k<NOMCS+1; k++){//配列の初期化 delta2[k]=0; energy[k]=0; energy2[k]=0; energy_s[k]=0; energy_s2[k]=0; mag_av[k]=0; mag_av2[k]=0; c[k]=0; s_zav[k]=0; } for(k=0;k<SL+1;k++){//配列の初期化 G2x_tmp[k]=0; G2x_all[k]=0; G2y_tmp[k]=0; G2y_all[k]=0; G2z_tmp[k]=0; G2z_all[k]=0; } ocount=0; ocount_all=0; for(k=1;k<Mz+1;k++){//配列の初期化 magz_tmp[k]=0; magz_all[k]=0; mag2z_tmp[k]=0; mag2z_all[k]=0; d_poly_tmp[k]=0; d_poly_all[k]=0; } for (i=1; i<=M/2; i++) { for (j=1; j<=SL; j++) { AC_a_all[i][j]=0; AC_b_all[i][j]=0; AC_p_all[i][j]=0; } } for (i=1; i<=SL; i++) { d_a_all[i]=0; d_b_all[i]=0; d_p_all[i]=0; } for(mcs=1;mcs<OMCSMAX+1;mcs++){ update(K,J,SL,SN,M,Mz,s,imsk,x,y,z,xdummy,ydummy); if (nonsolFlag==!1) { update_sol(K,J,h,M,Mz,s); } if(mcs==logcount){ ocount++; delta2_calc(SL,SN,x,y,z); energy_calc(K,J,h,SL,SN,M,Mz,s,x,y,z); magnetization_calc(M,Mz,s); G2_calc(SL,SN,G2x,G2y,G2z,x,y,z); magz_calc(M,Mz,s,magz); mag2z_calc(M, Mz, s, mag2z); d_poly_calc(M,Mz,s,d_poly); d_a_calc(SL,M,Mz,s,d_a); d_p_calc(SL,M,Mz,s,d_p); if (escapeACFlag==!1) { ac_a_calc(SL,M,Mz,s,AC_a); } delta2[ocount]=DELTA2; delta2z[ocount]=DELTA2z; zsl[ocount]=zSL; energy[ocount]=E; energy2[ocount]=E2; energy_s[ocount]=Es; energy_s2[ocount]=Es2; mag_av[ocount]=mag; mag_av2[ocount]=mag2; for(k=1;k<SL+1;k++){ G2x_tmp[k]+=G2x[k]; G2y_tmp[k]+=G2y[k]; G2z_tmp[k]+=G2z[k]; } for(k=1;k<Mz+1;k++){ magz_tmp[k]+=magz[k]; mag2z_tmp[k]+=mag2z[k]; d_poly_tmp[k]+=d_poly[k]; } for (i=1; i<=M/2; i++) { for (j=1; j<=SL; j++) { AC_a_all[i][j]+=AC_a[i][j]; } } for (i=1; i<=SL; i++) { d_a_all[i]+=d_a[i]; } if(ocount==NOMCS){ ocount_all++; delta2av=0; delta2zav=0; zslav=0; energy_av=0; energy2_av=0; energy_s_av=0; energy_s2_av=0; mag_av_av=0; mag_av2_av=0; for(k=1;k<NOMCS+1;k++){ delta2av+=delta2[k]; delta2zav+=delta2z[k]; zslav+=zsl[k]; energy_av+=energy[k]; energy2_av+=energy2[k]; energy_s_av+=energy_s[k]; energy_s2_av+=energy_s2[k]; mag_av_av+=mag_av[k]; mag_av2_av+=mag_av2[k]; }; delta2av/=NOMCS; delta2zav/=NOMCS; zslav/=NOMCS; energy_av/=NOMCS; energy2_av/=NOMCS; energy_s_av/=NOMCS; energy_s2_av/=NOMCS; mag_av_av/=NOMCS; mag_av2_av/=NOMCS; for(k=1;k<SL+1;k++){ G2x_tmp[k]/=NOMCS; G2x_all[k]+=G2x_tmp[k]; G2y_tmp[k]/=NOMCS; G2y_all[k]+=G2y_tmp[k]; G2z_tmp[k]/=NOMCS; G2z_all[k]+=G2z_tmp[k]; } for(k=0;k<SL+1;k++){ G2x_tmp[k]=0; G2y_tmp[k]=0; G2z_tmp[k]=0; } for(k=1;k<Mz+1;k++){ magz_tmp[k]/=NOMCS; magz_all[k]+=magz_tmp[k]; mag2z_tmp[k]/=NOMCS; mag2z_all[k]+=mag2z_tmp[k]; d_poly_tmp[k]/=NOMCS; d_poly_all[k]+=d_poly_tmp[k]; } for(k=1;k<Mz+1;k++){ //temporaryな配列の初期化 magz_tmp[k]=0; mag2z_tmp[k]=0; d_poly_tmp[k]=0; } ocount=0; printf("%ld %d %15.12f %15.12f %15.12f %15.12f %15.12f %15.12f %15.12f %15.12f %15.12f\n",mcs,SL, delta2av, delta2zav,zslav,energy_av,energy2_av,energy_s_av,energy_s2_av,mag_av_av,mag_av2_av); fflush(stdout); } logcount+=logstep; } } //ファイルへの出力 fname(K,J,M,ISEED); fp0=fopen(file[0],"w"); for(k=1;k<SL+1;k++){ G2x_all[k]/=ocount_all; G2y_all[k]/=ocount_all; G2z_all[k]/=ocount_all; } for(k=1;k<SL+1;k++){ fprintf(fp0,"%ld\t %15.15f %15.12f %15.12f\n",k,G2x_all[k], G2y_all[k], G2z_all[k]); } fclose(fp0); fp1=fopen(file[1],"w"); for(k=1;k<Mz+1;k++){ magz_all[k]/=ocount_all; } for(k=1;k<Mz+1;k++){ fprintf(fp1,"%ld\t %15.15f\n",k,magz_all[k]); } fclose(fp1); fp2=fopen(file[2],"w"); for(j=1;j<SN+1;j++){ for(t=1;t<SL+1;t++){ fprintf(fp2,"%ld %ld %d %d %d\n",j,t,x[j][t],y[j][t],z[j][t]); } } fclose(fp2); fp3=fopen(file[3],"w"); for(j=1;j<SN+1;j++){ for(t=1;t<SL+1;t++){ fprintf(fp3,"%ld %ld %d %d %d\n",j,t,xdummy[j][t],ydummy[j][t],z[j][t]); } } fclose(fp3); fp4=fopen(file[4],"w"); for(k=1;k<Mz+1;k++){ d_poly_all[k]/=ocount_all; } for(k=1;k<Mz+1;k++){ fprintf(fp4,"%ld\t %15.15f\n",k,d_poly_all[k]); } fclose(fp4); fp5=fopen(file[5],"w"); for (i=1; i<=M; i++) { for (j=1; j<=M; j++) { for (k=1; k<=Mz; k++) { s_zav[k]+=s[i][j][k]; } } } for (k=1;k<=Mz; k++) { s_zav[k]/=(M*M); } for (q=1; q<=SL; q++) { for (k=1; k<=SL; k++) { c[q]+=s_zav[k]*s_zav[k+q]; } c[q]=c[q]/SL; } for (k=1; k<=SL; k++) { fprintf(fp5,"%ld %f\n",k,c[k]); } fclose(fp5); fp6=fopen(file[6], "w"); fprintf(fp6, "0\t%ld\n",IFORM1); fprintf(fp6, "0\t%ld\n",IFORM2); for (i=1; i<=251; i++) { fprintf(fp6,"%li\t%ld\n",i,IRND[i]); } fclose(fp6); fp7=fopen(file[7], "w"); for (i=1; i<=M; i++) { for (j=1; j<=M; j++) { for (k=1; k<=Mz; k++) { fprintf(fp7, "%ld\t%ld\t%ld\t%d\n",i,j,k,s[i][j][k]); } } } fclose(fp7); fp8=fopen(file[8],"w"); for (i=1; i<=M/2; i++) { for (j=1; j<=SL; j++) { AC_a_all[i][j]/=NOMCS; fprintf(fp8, "%ld\t%ld\t%f\n",i,j,AC_a_all[i][j]); } } fclose(fp8); fp9=fopen(file[9], "w"); for (i=1; i<=SL; i++) { d_a_all[i]/=ocount_all; fprintf(fp9,"%ld\t%f\n",i,d_a_all[i]); } fclose(fp9); fp10=fopen(file[10],"w"); for (i=1; i<=SL; i++) { d_p_all[i]/=ocount_all; fprintf(fp10,"%ld\t%f\n",i,d_p_all[i]); } fclose(fp10); fp11=fopen(file[11], "w"); for(k=1;k<Mz+1;k++){ mag2z_all[k]/=ocount_all; } for(k=1;k<Mz+1;k++){ fprintf(fp1,"%ld\t %15.15f\n",k,mag2z_all[k]-magz_all[k]*magz_all[k]); } fclose(fp11); return EXIT_SUCCESS; }
static CONN_STATE process( const POLL_MODE pollMode, const char callGrade ) { KWBoolean master = (KWBoolean) ( pollMode == POLL_ACTIVE ? KWTrue : KWFalse ); KWBoolean aborted = KWFalse; XFER_STATE state = (XFER_STATE) (master ? XFER_SENDINIT : XFER_RECVINIT); XFER_STATE old_state = XFER_EXIT; /* Initialized to any state but the original value of "state" */ XFER_STATE save_state = XFER_EXIT; char currentGrade = (char) ((unsigned char) 0xff); /*--------------------------------------------------------------------*/ /* Yea old state machine for the high level file transfer procotol */ /*--------------------------------------------------------------------*/ while( state != XFER_EXIT ) { printmsg(state == old_state ? 14 : 4 , "process: Machine state is = %c", state ); old_state = state; if ( terminate_processing != aborted ) { aborted = terminate_processing; state = XFER_ABORT; } switch( state ) { case XFER_SENDINIT: /* Initialize outgoing protocol */ state = sinit(); break; case XFER_RECVINIT: /* Initialize Receive protocol */ state = rinit(); break; case XFER_MASTER: /* Begin master mode */ master = KWTrue; state = XFER_NEXTJOB; resetGrade( ); /* Reset best grade status */ currentGrade = E_firstGrade; break; case XFER_SLAVE: /* Begin slave mode */ master = KWFalse; state = XFER_RECVHDR; break; case XFER_NEXTJOB: /* Look for work in local queue */ state = scandir( rmtname, currentGrade ); break; case XFER_REQUEST: /* Process next file in current job in queue */ state = newrequest(); break; case XFER_PUTFILE: /* Got local transmit request */ state = ssfile(); break; case XFER_GETFILE: /* Got local tranmit request */ state = srfile(); break; case XFER_SENDDATA: /* Remote accepted our work, send data */ state = sdata(); break; case XFER_SENDEOF: /* File xfer complete, send EOF */ state = seof( master ); break; case XFER_FILEDONE: /* Receive or transmit is complete */ state = (XFER_STATE) (master ? XFER_REQUEST : XFER_RECVHDR); break; case XFER_NEXTGRADE: /* Process next grade of local files */ currentGrade = nextGrade( callGrade ); if ( currentGrade ) state = XFER_NEXTJOB; else state = XFER_NOLOCAL; break; case XFER_NOLOCAL: /* No local work, remote have any? */ state = sbreak(); break; case XFER_NOREMOTE: /* No remote work, local have any? */ state = schkdir( (KWBoolean) (pollMode == POLL_ACTIVE ? KWTrue : KWFalse ), callGrade ); break; case XFER_RECVHDR: /* Receive header from other host */ state = rheader(); break; case XFER_TAKEFILE: /* Set up to receive remote requested file transfer */ state = rrfile(); break; case XFER_GIVEFILE: /* Set up to transmit remote requuest file transfer */ state = rsfile(); break; case XFER_RECVDATA: /* Receive file data from other host */ state = rdata(); break; case XFER_RECVEOF: state = reof(); break; case XFER_LOST: /* Lost the other host, flame out */ printmsg(0,"process: Connection lost to %s, " "previous system state = %c", rmtname, save_state ); hostp->status.hstatus = HS_CALL_FAILED; state = XFER_EXIT; break; case XFER_ABORT: /* Internal error, flame out */ printmsg(0,"process: Aborting connection to %s, " "previous system state = %c", rmtname, save_state ); hostp->status.hstatus = HS_CALL_FAILED; state = XFER_ENDP; break; case XFER_ENDP: /* Terminate the protocol */ state = endp(); break; default: printmsg(0,"process: Unknown state = %c, " "previous system state = %c", state, save_state ); state = XFER_ABORT; break; } /* switch */ save_state = old_state; /* Used only if we abort */ } /* while( state != XFER_EXIT ) */ /*--------------------------------------------------------------------*/ /* Protocol is complete, terminate the connection */ /*--------------------------------------------------------------------*/ return CONN_TERMINATE; } /* process */
int main(int argc, char *argv[]) { float rho; int i; /* * Set the most important variable, the density rho, to the default 0.4 * command line arguments can change this */ rho = 0.4; /* if(argc != 1 && argc != 3) { printf("usage: -p (float rho) is the density, -l (int L) the size of the grid\n"); return 1; } printf("percolate: command line arguments = %d, %s, %s\n", argc, argv[1], argv[2]); for(i=1; i<argc; ++i) { printf("percolate: %d, %s\n", i); if(argc[i] == '-p') { printf("hi\n"); rho = atof(argv[i+1]); if(rho == 0) { printf("usage: rho must be a float\n"); return 1; } } }*/ /* * Define the main "map" array */ int map[L+2][L+2]; int loop, nchange; int seed; int seconds; /* * Set the randum number seed and initialise the generator */ seconds = time(NULL)%10000; /*gets last for digits of time*/ seed = seconds; rinit(seed); printf("percolate: parameters are rho=%f, L=%d, seed=%d\n", rho, L, seed); /* * Initialise map with density rho */ percfill(map, rho); /* * Initialise map ready for updating */ percinit(map); /* * Keep updating until nothing changes */ loop = 1; nchange = 1; while (nchange > 0) { nchange = percupdate(map); /* printf("percolate: number of changes on loop %d is %d\n", loop, nchange); */ loop++; } /* * Test to see if percolation occurred */ if (perctest(map)) { printf("percolate: cluster DOES percolate\n"); } else { printf("percolate: cluster DOES NOT percolate\n"); } /* * Write map to the file "map.pgm", displaying L*L (ie all) the clusters */ percwrite("map.pgm", map, 2); }
void threadmain(int argc, char *argv[]) { int i, got, scr; Text *t; Rectangle r; Flayer *nwhich; getscreen(argc, argv); iconinit(); initio(); scratch = alloc(100*RUNESIZE); nscralloc = 100; r = screen->r; r.max.y = r.min.y+Dy(r)/5; flstart(screen->clipr); rinit(&cmd.rasp); flnew(&cmd.l[0], gettext, 1, &cmd); flinit(&cmd.l[0], r, font, cmdcols); cmd.nwin = 1; which = &cmd.l[0]; cmd.tag = Untagged; outTs(Tversion, VERSION); startnewfile(Tstartcmdfile, &cmd); got = 0; for(;;got = waitforio()){ if(hasunlocked && RESIZED()) resize(); if(got&(1<<RHost)) rcv(); if(got&(1<<RPlumb)){ for(i=0; cmd.l[i].textfn==0; i++) ; current(&cmd.l[i]); flsetselect(which, cmd.rasp.nrunes, cmd.rasp.nrunes); type(which, RPlumb); } if(got&(1<<RKeyboard)) if(which) type(which, RKeyboard); else kbdblock(); if(got&(1<<RMouse)){ if(hostlock==2 || !ptinrect(mousep->xy, screen->r)){ mouseunblock(); continue; } nwhich = flwhich(mousep->xy); scr = which && ptinrect(mousep->xy, which->scroll); if(mousep->buttons) flushtyping(1); if(mousep->buttons&1){ if(nwhich){ if(nwhich!=which) current(nwhich); else if(scr) scroll(which, 1); else{ t=(Text *)which->user1; if(flselect(which)){ outTsl(Tdclick, t->tag, which->p0); t->lock++; }else if(t!=&cmd) outcmd(); } } }else if((mousep->buttons&2) && which){ if(scr) scroll(which, 2); else menu2hit(); }else if((mousep->buttons&4)){ if(scr) scroll(which, 3); else menu3hit(); } mouseunblock(); } } }
void threadmain(int argc, char *argv[]) { int i, got, scr, chord; Text *t; Rectangle r; Flayer *nwhich; /* * sam is talking to us on fd 0 and 1. * move these elsewhere so that if we accidentally * use 0 and 1 in other code, nothing bad happens. */ dup(0, 3); dup(1, 4); hostfd[0] = 3; hostfd[1] = 4; close(0); close(1); open("/dev/null", OREAD); if(open("/dev/tty", OWRITE) < 0) open("/dev/null", OWRITE); notify(notifyf); if(protodebug) print("getscreen\n"); getscreen(argc, argv); if(protodebug) print("iconinit\n"); iconinit(); if(protodebug) print("initio\n"); initio(); if(protodebug) print("scratch\n"); scratch = alloc(100*RUNESIZE); nscralloc = 100; r = screen->r; r.max.y = r.min.y+Dy(r)/5; if(protodebug) print("flstart\n"); flstart(screen->clipr); rinit(&cmd.rasp); flnew(&cmd.l[0], gettext, 1, &cmd); flinit(&cmd.l[0], r, font, cmdcols); cmd.nwin = 1; which = &cmd.l[0]; cmd.tag = Untagged; outTs(Tversion, VERSION); startnewfile(Tstartcmdfile, &cmd); got = 0; chord = 0; if(protodebug) print("loop\n"); for(;;got = waitforio()){ if(hasunlocked && RESIZED()) resize(); if(got&(1<<RHost)) rcv(); if(got&(1<<RPlumb)){ for(i=0; cmd.l[i].textfn==0; i++) ; current(&cmd.l[i]); flsetselect(which, cmd.rasp.nrunes, cmd.rasp.nrunes); type(which, RPlumb); } if(got&(1<<RKeyboard)) if(which) type(which, RKeyboard); else kbdblock(); if(got&(1<<RMouse)){ if(hostlock==2 || !ptinrect(mousep->xy, screen->r)){ mouseunblock(); continue; } nwhich = flwhich(mousep->xy); //scr = which && ptinrect(mousep->xy, which->scroll); scr = which && (ptinrect(mousep->xy, which->scroll) || mousep->buttons&(8|16)); if(mousep->buttons) flushtyping(1); //if(chording && chord==1 && !mousep->buttons) if((mousep->buttons&1)==0) chord = 0; //if(chording && chord) //chord |= mousep->buttons; //else if(mousep->buttons&1){ if(chord && which && which==nwhich){ chord |= mousep->buttons; t = (Text *)which->user1; if(!t->lock){ int w = which-t->l; if(chord&2){ cut(t, w, 1, 1); chord &= ~2; } if(chord&4){ paste(t, w); chord &= ~4; } } }else if(mousep->buttons&(1|8)){ //}else if(mousep->buttons&1){ if(nwhich){ if(nwhich!=which) current(nwhich); else if(scr) //scroll(which, 1); scroll(which, (mousep->buttons&8) ? 4 : 1); else{ t=(Text *)which->user1; if(flselect(which)){ outTsl(Tdclick, t->tag, which->p0); t->lock++; }else if(t!=&cmd) outcmd(); if(mousep->buttons&1) chord = mousep->buttons; } } }else if((mousep->buttons&2) && which){ if(scr) scroll(which, 2); else menu2hit(); }else if(mousep->buttons&(4|16)){ //}else if(mousep->buttons&4){ if(nwhich!=which) current(nwhich); else if(scr) //if(scr) //scroll(which, 3); scroll(which, (mousep->buttons&16) ? 5 : 3); else menu3hit(); } mouseunblock(); } } }