Annotation of uae/src/rpc.c, revision 1.1

1.1     ! root        1:  /*
        !             2:   * UAE - The Un*x Amiga Emulator
        !             3:   *
        !             4:   * RiscPC Interface.
        !             5:   *
        !             6:   * (c) 1995 Bernd Schmidt
        !             7:   * (c) 1996 Gustavo Goedert
        !             8:   */
        !             9: 
        !            10: #include "sysconfig.h"
        !            11: #include "sysdeps.h"
        !            12: 
        !            13: #include "config.h"
        !            14: #include "options.h"
        !            15: #include "threaddep/penguin.h"
        !            16: #include "memory.h"
        !            17: #include "custom.h"
        !            18: #include "keyboard.h"
        !            19: #include "xwin.h"
        !            20: #include "keybuf.h"
        !            21: #include "gui.h"
        !            22: 
        !            23: typedef char flagtype;
        !            24: 
        !            25: extern struct regstruct
        !            26: {
        !            27:     ULONG regs[16];
        !            28:     CPTR  usp,isp,msp;
        !            29:     UWORD sr;
        !            30:     flagtype t1;
        !            31:     flagtype t0;
        !            32:     flagtype s;
        !            33:     flagtype m;
        !            34:     flagtype x;
        !            35:     flagtype stopped;
        !            36:     int intmask;
        !            37:     ULONG pc;
        !            38: #ifdef USE_POINTER
        !            39:     UBYTE *pc_p;
        !            40:     UBYTE *pc_oldp;
        !            41: #endif
        !            42: 
        !            43:     ULONG vbr,sfc,dfc;
        !            44: 
        !            45:     double fp[8];
        !            46:     ULONG fpcr,fpsr,fpiar;
        !            47:     ULONG spcflags;
        !            48:     ULONG kick_mask;
        !            49: } regs;
        !            50: 
        !            51: 
        !            52: #include "OS:wimp.h"
        !            53: #include "OS:font.h"
        !            54: #include "OS:os.h"
        !            55: #include "OS:osbyte.h"
        !            56: #include "OS:osword.h"
        !            57: #include "OS:sound.h"
        !            58: 
        !            59: 
        !            60: void gui_process(void);
        !            61: 
        !            62: 
        !            63: #define A_base 0x300000
        !            64: #define A_switch (A_base+0)
        !            65: #define A_disk (A_base+1)
        !            66: #define A_sonst (A_base+5)
        !            67: #define A_hf (A_base+6)
        !            68: #define A_mount (A_base+7)
        !            69: #define A_rom (A_base+10)
        !            70: #define A_uaeask (A_base+11)
        !            71: 
        !            72: int quit_program;
        !            73: int uae_running;
        !            74: int uae_startedup;
        !            75: 
        !            76: wimp_MESSAGE_LIST(13) messages=
        !            77:   {A_switch, A_disk, A_disk+1, A_disk+2, A_disk+3, A_sonst, A_rom, A_mount,
        !            78:    A_mount+1, A_mount+2, A_uaeask, message_PREQUIT, 0};
        !            79: 
        !            80: wimp_t taskhandle;
        !            81: wimp_t frontendhandle;
        !            82: wimp_block block;
        !            83: wimp_message mblock;
        !            84: int pollword;
        !            85: 
        !            86: os_MODE_SELECTOR(3) uaemode={1,0,0,0,-1,0,128,3,255,-1,0};
        !            87: os_MODE_SELECTOR(3) wimpmode;
        !            88: 
        !            89: extern void datavox_type(int channel, int type);
        !            90: extern void datavox_timed(int channel, int timed);
        !            91: extern void datavox_pitch(int channel, int pitch);
        !            92: extern void datavox_set_memory(int channel, char *start, char *end);
        !            93: extern void datavox_set_repeat(int channel, char *start, char *end);
        !            94: extern int datavox_allocate_channel(int key);
        !            95: extern void datavox_de_allocate_channel(int channel, int key);
        !            96: 
        !            97: int sratecode;
        !            98: char sbuffer[44100];
        !            99: int deskvoice, uaechannel;
        !           100: 
        !           101: extern int uaedevfd, numtracks;
        !           102: 
        !           103: char mountpoint[64];
        !           104: char mountdir[256];
        !           105: 
        !           106: char *scr;
        !           107: int screenrowbytes,screenrows;
        !           108: 
        !           109: char pressed[128];
        !           110: char translate[128]=
        !           111: {        255,    255,     255,  AK_LSH, AK_CTRL,     AK_LALT,  AK_RSH,     AK_CTRL, //0
        !           112:      AK_RALT,    255,     255,     255,     255,         255,     255,         255, //8
        !           113:        AK_Q,   AK_3,    AK_4,    AK_5,   AK_F4,        AK_8,   AK_F7,    AK_MINUS, //16
        !           114:         255,  AK_LF,  AK_NP6,  AK_NP7,     255,         255,  AK_F10,         255, //24
        !           115:         255,   AK_W,    AK_E,    AK_T,    AK_7,        AK_I,    AK_9,        AK_0, //32
        !           116:         255,  AK_DN,  AK_NP8,  AK_NP9,     255,AK_BACKQUOTE, AK_LTGT,       AK_BS, //40
        !           117:        AK_1,   AK_2,    AK_D,    AK_R,    AK_6,        AK_U,    AK_O,        AK_P, //48
        !           118:  AK_LBRACKET,  AK_UP,AK_NPADD,AK_NPSUB,  AK_ENT,         255,     255,     AK_RAMI, //56
        !           119:  AK_CAPSLOCK,   AK_A,    AK_X,    AK_F,    AK_Y,        AK_J,    AK_K,         255, //64
        !           120:         255, AK_RET,AK_NPDIV,     255,AK_NPDEL,         255, AK_LAMI,    AK_QUOTE, //72
        !           121:         255,   AK_S,    AK_C,    AK_G,    AK_H,        AK_N,    AK_L,AK_SEMICOLON, //80
        !           122:  AK_RBRACKET, AK_DEL,     255,AK_NPMUL,     255,    AK_EQUAL, AK_LTGT,         255, //88
        !           123:       AK_TAB,   AK_Z,  AK_SPC,    AK_V,    AK_B,        AK_M,AK_COMMA,   AK_PERIOD, //96
        !           124:     AK_SLASH,AK_HELP,  AK_NP0,  AK_NP1,  AK_NP3,         255,     255,         255, //104
        !           125:         255,  AK_F1,   AK_F2,   AK_F3,   AK_F5,       AK_F6,   AK_F8,       AK_F9, //112
        !           126: AK_BACKSLASH,  AK_RT,  AK_NP4,  AK_NP5,  AK_NP2,         255,     255,         255};//120
        !           127: 
        !           128: char dn0[256], dn1[256], dn2[256], dn3[256];
        !           129: int dc0=0, dc1=0, dc2=0, dc3=0;
        !           130: 
        !           131: /***************************************************************************/
        !           132: 
        !           133: 
        !           134: void setup_brkhandler(void)
        !           135: {
        !           136: }
        !           137: 
        !           138: void flush_line(int y)
        !           139: {
        !           140: }
        !           141: 
        !           142: void flush_block(int a, int b)
        !           143: {
        !           144: }
        !           145: 
        !           146: void flush_screen(int a, int b)
        !           147: {
        !           148: }
        !           149: 
        !           150: void calc_adjustment(void)
        !           151: {
        !           152: }
        !           153: 
        !           154: 
        !           155: static int colors_allocated;
        !           156: 
        !           157: static int get_color(int r, int g, int b, xcolnr *cnp)
        !           158: {
        !           159:     if (colors_allocated == 256)
        !           160:        return -1;
        !           161:     *cnp = colors_allocated;
        !           162: 
        !           163:     os_writec(19);
        !           164:     os_writec(colors_allocated);
        !           165:     os_writec(16);
        !           166:     os_writec(r+(r<<4));
        !           167:     os_writec(g+(g<<4));
        !           168:     os_writec(b+(b<<4));
        !           169:     colors_allocated++;
        !           170: 
        !           171:     return 1;
        !           172: }
        !           173: 
        !           174: static void init_colors(void)
        !           175: {
        !           176:     int rw = 5, gw = 5, bw = 5;
        !           177:     colors_allocated = 0;
        !           178: 
        !           179:     if (gfxvidinfo.pixbytes == 2)
        !           180:       alloc_colors64k(rw, gw, bw, 0, rw, rw+gw);
        !           181:     else
        !           182:       alloc_colors256(get_color);
        !           183: }
        !           184: 
        !           185: void sound_output(char *b, int l)
        !           186: {
        !           187:   memcpy(sbuffer, b, l);
        !           188:   datavox_set_memory(uaechannel, sbuffer, sbuffer+l);
        !           189:   datavox_set_repeat(uaechannel, sbuffer, sbuffer+l);
        !           190:   datavox_type(uaechannel, 1);
        !           191:   datavox_pitch(uaechannel, sratecode);
        !           192:   sound_control(uaechannel, 256+127, 0, 255);
        !           193: }
        !           194: 
        !           195: void init_mouse(void)
        !           196: {
        !           197:   oswordpointer_bbox_block bbox;
        !           198: 
        !           199:   bbox.op=oswordpointer_OP_SET_BBOX;
        !           200:   bbox.x0=-32768;
        !           201:   bbox.y0=-32768;
        !           202:   bbox.x1=32767;
        !           203:   bbox.y1=32767;
        !           204:   oswordpointer_set_bbox(&bbox);
        !           205: }
        !           206: 
        !           207: void setwimpmode(void)
        !           208: {
        !           209:   wimp_set_mode(&wimpmode);
        !           210:   while(osbyte2(145,0,0)!=0);
        !           211: }
        !           212: 
        !           213: void setuaemode(void)
        !           214: {
        !           215:   os_vdu_var_list varlist[2]={149,-1};
        !           216:   int valuelist[1];
        !           217:   os_mode m;
        !           218: 
        !           219:   m=osscreenmode_current();
        !           220:   memcpy(&wimpmode, m, os_SIZEOF_MODE_SELECTOR(3));
        !           221: 
        !           222:   osscreenmode_select(&uaemode);
        !           223:   os_read_vdu_variables(varlist, valuelist);
        !           224:   scr=(void *)valuelist[0];
        !           225:   gfxvidinfo.bufmem=scr;
        !           226: 
        !           227:   os_remove_cursors();
        !           228: 
        !           229:   init_colors();
        !           230:   init_mouse();
        !           231: 
        !           232:   flush_block(0, numscrlines-1);
        !           233: }
        !           234: 
        !           235: void setwimpsound(void)
        !           236: {
        !           237:   int s,t;
        !           238: 
        !           239:   sound_attach_voice(uaechannel, deskvoice, &s, &t);
        !           240:   datavox_de_allocate_channel(uaechannel, taskhandle);
        !           241: }
        !           242: 
        !           243: void setuaesound(void)
        !           244: {
        !           245:   int s;
        !           246: 
        !           247:   sound_volume(127);
        !           248:   uaechannel=datavox_allocate_channel(taskhandle);
        !           249:   printf("%d\n", uaechannel);
        !           250:   sound_attach_voice(uaechannel, 0, &s, &deskvoice);
        !           251:   sound_attach_named_voice(uaechannel, "DataVox-Voice");
        !           252: }
        !           253: 
        !           254: int graphics_init(void)
        !           255: {
        !           256:   __uname_control=6;
        !           257: 
        !           258:   switch(color_mode)
        !           259:   {
        !           260:     case 1:
        !           261:     case 2:
        !           262:     case 5:
        !           263:       uaemode.log2_bpp=4;
        !           264:       gfxvidinfo.pixbytes=2;
        !           265:       break;
        !           266:     default:
        !           267:       uaemode.log2_bpp=3;
        !           268:       gfxvidinfo.pixbytes=1;
        !           269:       break;
        !           270:   }
        !           271: 
        !           272:   uaemode.xres=gfx_requested_width;
        !           273:   uaemode.yres=gfx_requested_height;
        !           274: 
        !           275:   gfxvidinfo.rowbytes=gfx_requested_width*gfxvidinfo.pixbytes;
        !           276:   gfxvidinfo.maxlinetoscr=gfx_requested_width;
        !           277:   gfxvidinfo.maxline=gfx_requested_height;
        !           278:   gfxvidinfo.maxblocklines=0;
        !           279: 
        !           280:   setuaemode();
        !           281:   setuaesound();
        !           282: 
        !           283:   return 1;
        !           284: }
        !           285: 
        !           286: void graphics_leave(void)
        !           287: {
        !           288: }
        !           289: 
        !           290: 
        !           291: void readmouse(void)
        !           292: {
        !           293:   int x,y;
        !           294:   bits buttons;
        !           295:   os_t t;
        !           296: 
        !           297:   os_mouse(&x, &y, &buttons, &t);
        !           298:   lastmx=x>>1;
        !           299:   lastmy=gfx_requested_height-(y>>1);
        !           300:   buttonstate[0]=(buttons & 4)>>2;
        !           301:   buttonstate[1]=(buttons & 2)>>1;
        !           302:   buttonstate[2]=buttons & 1;
        !           303:   newmousecounters=0;
        !           304: }
        !           305: 
        !           306: 
        !           307: void processkey(char k, char release)
        !           308: {
        !           309:   if(k==29 && release==1)
        !           310:   {
        !           311:     uae_running=0;
        !           312:     setwimpmode();
        !           313:     setwimpsound();
        !           314:   }
        !           315: 
        !           316:   if(translate[k]!=255)
        !           317:     record_key((translate[k]<<1)+release);
        !           318: }
        !           319: 
        !           320: 
        !           321: void readkeyboard(void)
        !           322: {
        !           323:   char c,l,k,q;
        !           324: 
        !           325:   for(l=0, k=osbyte1(121, 0, 0), q=0; !q; l=k+1, k=osbyte1(121, l, 0))
        !           326:   {
        !           327:     if(k==0xff)
        !           328:     {
        !           329:       k=128;
        !           330:       q=1;
        !           331:     }
        !           332:     else
        !           333:     {
        !           334:       if(pressed[k]==0)
        !           335:       {
        !           336:        if (translate[k]!=0)
        !           337:          processkey(k, 0);
        !           338:        pressed[k]=1;
        !           339:       }
        !           340:     }
        !           341:     for(c=l; c<k; c++)
        !           342:     {
        !           343:       if(pressed[c]!=0)
        !           344:       {
        !           345:        if (translate[c]!=0)
        !           346:          processkey(c, 1);
        !           347:        pressed[c]=0;
        !           348:       }
        !           349:     }
        !           350:   }
        !           351: }
        !           352: 
        !           353: void handle_events(void)
        !           354: {
        !           355:   readmouse();
        !           356:   readkeyboard();
        !           357: 
        !           358:   if(dc0==1)
        !           359:   {
        !           360:     dc0=0;
        !           361:     disk_insert(0, dn0);
        !           362:     strncpy(df0, dn0, 255);
        !           363:   }
        !           364: 
        !           365:   if(dc1==1)
        !           366:   {
        !           367:     dc1=0;
        !           368:     disk_insert(1, dn1);
        !           369:     strncpy(df1, dn1, 255);
        !           370:   }
        !           371: 
        !           372:   if(dc2==1)
        !           373:   {
        !           374:     dc2=0;
        !           375:     disk_insert(2, dn2);
        !           376:     strncpy(df2, dn2, 255);
        !           377:   }
        !           378: 
        !           379:   if(dc3==1)
        !           380:   {
        !           381:     dc3=0;
        !           382:     disk_insert(3, dn3);
        !           383:     strncpy(df3, dn3, 255);
        !           384:   }
        !           385: 
        !           386:   if(dc0>1) dc0--;
        !           387:   if(dc1>1) dc1--;
        !           388:   if(dc2>1) dc2--;
        !           389:   if(dc3>1) dc3--;
        !           390: 
        !           391:   if (uae_running==0)
        !           392:     gui_process();
        !           393: }
        !           394: 
        !           395: int debuggable(void)
        !           396: {
        !           397:     return 0;
        !           398: }
        !           399: 
        !           400: int needmousehack(void)
        !           401: {
        !           402:     return 0;
        !           403: }
        !           404: 
        !           405: void LED(int on)
        !           406: {
        !           407: }
        !           408: 
        !           409: static void sigchldhandler(int foo)
        !           410: {
        !           411: }
        !           412: 
        !           413: 
        !           414: /***************************************************************************/
        !           415: 
        !           416: 
        !           417: int gui_init(void)
        !           418: {
        !           419:   int vout;
        !           420: 
        !           421:   quit_program=0;
        !           422:   uae_running=0;
        !           423:   uae_startedup=0;
        !           424: 
        !           425:   taskhandle=wimp_initialise(wimp_VERSION_RO35, "UAE", &messages, &vout);
        !           426:   gui_process();
        !           427: 
        !           428:   return 0;
        !           429: }
        !           430: 
        !           431: void changedisk(int n, char *f)
        !           432: {
        !           433:   if(uae_startedup)
        !           434:   {
        !           435:     switch(n)
        !           436:     {
        !           437:       case 0:
        !           438:        if(strcmp(df0, f)!=0)
        !           439:        {
        !           440:          strncpy(dn0, f, 255);
        !           441:          dc0=3;
        !           442:          disk_eject(0);
        !           443:          strncpy(df0, "", 255);
        !           444:        }
        !           445:        break;
        !           446:       case 1:
        !           447:        if(strcmp(df1, f)!=0)
        !           448:        {
        !           449:          strncpy(dn1, f, 255);
        !           450:          dc1=3;
        !           451:          disk_eject(1);
        !           452:          strncpy(df1, "", 255);
        !           453:        }
        !           454:        break;
        !           455:       case 2:
        !           456:        if(strcmp(df2, f)!=0)
        !           457:        {
        !           458:          strncpy(dn2, f, 255);
        !           459:          dc2=3;
        !           460:          disk_eject(2);
        !           461:          strncpy(df2, "", 255);
        !           462:        }
        !           463:        break;
        !           464:       case 3:
        !           465:        if(strcmp(df3, f)!=0)
        !           466:        {
        !           467:          strncpy(dn3, f, 255);
        !           468:          dc3=3;
        !           469:          disk_eject(3);
        !           470:          strncpy(df3, "", 255);
        !           471:        }
        !           472:        break;
        !           473:     }
        !           474:   }
        !           475:   else
        !           476:   {
        !           477:     switch(n)
        !           478:     {
        !           479:       case 0:
        !           480:        strncpy(df0, f, 255);
        !           481:        break;
        !           482:       case 1:
        !           483:        strncpy(df1, f, 255);
        !           484:        break;
        !           485:       case 2:
        !           486:        strncpy(df2, f, 255);
        !           487:        break;
        !           488:       case 3:
        !           489:        strncpy(df3, f, 255);
        !           490:        break;
        !           491:     }
        !           492:   }
        !           493: }
        !           494: 
        !           495: void setsonst(int *reserved)
        !           496: {
        !           497:   if(!uae_startedup)
        !           498:   {
        !           499:     gfx_requested_width=reserved[0];
        !           500:     gfx_requested_xcenter=reserved[1];
        !           501:     gfx_requested_lores=reserved[2];
        !           502:     gfx_requested_height=reserved[3];
        !           503:     gfx_requested_ycenter=reserved[4];
        !           504:     gfx_requested_linedbl=reserved[5];
        !           505:     gfx_requested_correct_aspect=reserved[6];
        !           506:     switch(reserved[7])
        !           507:     {
        !           508:       case 256:
        !           509:        color_mode=0;
        !           510:        break;
        !           511:       case 32768:
        !           512:        color_mode=1;
        !           513:        break;
        !           514:     }
        !           515:     framerate=reserved[8];
        !           516:     emul_accuracy=reserved[9];
        !           517:     blits_32bit_enabled=reserved[10];
        !           518:     immediate_blits=reserved[11];
        !           519:     fake_joystick=reserved[12];
        !           520:     automount_uaedev=1-reserved[13];
        !           521:     bogomem_size=reserved[14];
        !           522:     chipmem_size=reserved[15];
        !           523:     fastmem_size=reserved[16];
        !           524:     produce_sound=reserved[17];
        !           525:     sound_desired_freq=reserved[18];
        !           526:     sound_desired_bsiz=reserved[19];
        !           527:   }
        !           528: }
        !           529: 
        !           530: void sendtofront(int *reserved)
        !           531: {
        !           532:   int *words=mblock.data.reserved;
        !           533: 
        !           534:   mblock.size=256;
        !           535:   mblock.sender=taskhandle;
        !           536:   mblock.my_ref=778;
        !           537:   mblock.your_ref=777;
        !           538:   switch(*reserved)
        !           539:   {
        !           540:     case 0:
        !           541:       mblock.action=A_disk;
        !           542:       if(dc0==0)
        !           543:        strncpy(words, df0, 235);
        !           544:       else
        !           545:        strncpy(words, dn0, 235);
        !           546:       break;
        !           547:     case 1:
        !           548:       mblock.action=A_disk+1;
        !           549:       if(dc0==0)
        !           550:        strncpy(words, df1, 235);
        !           551:       else
        !           552:        strncpy(words, dn1, 235);
        !           553:       break;
        !           554:     case 2:
        !           555:       mblock.action=A_disk+2;
        !           556:       if(dc0==0)
        !           557:        strncpy(words, df2, 235);
        !           558:       else
        !           559:        strncpy(words, dn2, 235);
        !           560:       break;
        !           561:     case 3:
        !           562:       mblock.action=A_disk+3;
        !           563:       if(dc0==0)
        !           564:        strncpy(words, df3, 235);
        !           565:       else
        !           566:        strncpy(words, dn3, 235);
        !           567:       break;
        !           568:   }
        !           569:   wimp_send_message(wimp_USER_MESSAGE, &mblock, frontendhandle);
        !           570: }
        !           571: 
        !           572: void gui_messagereceive(void)
        !           573: {
        !           574:   switch(block.message.action)
        !           575:   {
        !           576:     case message_QUIT:
        !           577:       if(uae_startedup)
        !           578:       {
        !           579:        regs.spcflags |= SPCFLAG_BRK;
        !           580:        quit_program=1;
        !           581:        uae_running=1;
        !           582:       }
        !           583:       else
        !           584:       {
        !           585:        if(uaedevfd!=-1)
        !           586:        {
        !           587:          close(uaedevfd);
        !           588:        }
        !           589:        wimp_close_down(taskhandle);
        !           590:       }
        !           591:       break;
        !           592:     case A_switch:
        !           593:       if(uae_startedup)
        !           594:       {
        !           595:        uae_running=1;
        !           596:        setuaemode();
        !           597:        setuaesound();
        !           598:       }
        !           599:       else
        !           600:       {
        !           601:        frontendhandle=block.message.sender;
        !           602:        uae_startedup=1;
        !           603:        uae_running=1;
        !           604:       }
        !           605:       break;
        !           606:     case A_disk:
        !           607:       changedisk(0, block.message.data.reserved);
        !           608:       break;
        !           609:     case A_disk+1:
        !           610:       changedisk(1, block.message.data.reserved);
        !           611:       break;
        !           612:     case A_disk+2:
        !           613:       changedisk(2, block.message.data.reserved);
        !           614:       break;
        !           615:     case A_disk+3:
        !           616:       changedisk(3, block.message.data.reserved);
        !           617:       break;
        !           618:     case A_sonst:
        !           619:       setsonst(block.message.data.reserved);
        !           620:       break;
        !           621:     case A_rom:
        !           622:       strncpy(romfile, block.message.data.reserved, 235);
        !           623:       break;
        !           624:     case A_mount:
        !           625:       strncpy(mountpoint, block.message.data.reserved, 63);
        !           626:       break;
        !           627:     case A_mount+1:
        !           628:       strncpy(mountdir, block.message.data.reserved, 235);
        !           629:       add_filesys_unit(mountpoint, mountdir, 0);
        !           630:       break;
        !           631:     case A_mount+2:
        !           632:       strncpy(mountdir, block.message.data.reserved, 235);
        !           633:       add_filesys_unit(mountpoint, mountdir, 1);
        !           634:       break;
        !           635:     case A_uaeask:
        !           636:       sendtofront(block.message.data.reserved);
        !           637:       break;
        !           638:   }
        !           639: }
        !           640: 
        !           641: void gui_process(void)
        !           642: {
        !           643:   wimp_event_no event;
        !           644: 
        !           645:   while(uae_running==0)
        !           646:   {
        !           647:     event=wimp_poll(wimp_MASK_NULL, &block, 0);
        !           648: 
        !           649:     switch(event)
        !           650:     {
        !           651:       case wimp_USER_MESSAGE:
        !           652:       case wimp_USER_MESSAGE_RECORDED:
        !           653:        gui_messagereceive();
        !           654:        break;
        !           655:     }
        !           656:   }
        !           657: }
        !           658: 
        !           659: void gui_exit(void)
        !           660: {
        !           661: }
        !           662: 
        !           663: void gui_led(int led, int on)
        !           664: {
        !           665: }
        !           666: 
        !           667: void gui_filename(int num, char *name)
        !           668: {
        !           669: }
        !           670: 
        !           671: void gui_handle_events(void)
        !           672: {
        !           673: }
        !           674: 
        !           675: int gui_update(void)
        !           676: {
        !           677: }
        !           678: 

unix.superglobalmegacorp.com

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