/* Copyright (C) 2005, 2010 - Cryptic Sea This file is part of Gish. Gish is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ void checkmenuitems(void) { int count,count2; for (count=0;count=menuitem[count].x) if (mouse.x=menuitem[count].y) if (mouse.y0) { if (joymenunum<0) joymenunum=numofmenuitems-1; if (joymenunum>=numofmenuitems) joymenunum=0; if (menuitem[joymenunum].highlight!=0) { if (keyboard[SCAN_ENTER] && !prevkeyboard[SCAN_ENTER]) menuitem[joymenunum].active=1; if (control[0].joysticknum!=-1) if (control[0].button[8]!=-1) if (joystick[control[0].joysticknum].button[control[0].button[8]] && !prevjoystick[control[0].joysticknum].button[control[0].button[8]]) menuitem[joymenunum].active=1; } if (menuitem[joymenunum].highlight==1) menuitem[joymenunum].highlight=2; count2=0; if (control[0].joysticknum!=-1) { if (joystick[control[0].joysticknum].axis[1]>=0.5f && prevjoystick[control[0].joysticknum].axis[1]<0.5f) count2=-1; if (joystick[control[0].joysticknum].axis[1]<=-0.5f && prevjoystick[control[0].joysticknum].axis[1]>-0.5f) count2=1; if (control[0].button[2]!=-1) if (joystick[control[0].joysticknum].button[control[0].button[2]] && !prevjoystick[control[0].joysticknum].button[control[0].button[2]]) count2=1; if (control[0].button[3]!=-1) if (joystick[control[0].joysticknum].button[control[0].button[3]] && !prevjoystick[control[0].joysticknum].button[control[0].button[3]]) count2=-1; } if (keyboard[control[0].key[3]] && !prevkeyboard[control[0].key[3]]) count2=-1; if (keyboard[control[0].key[2]] && !prevkeyboard[control[0].key[2]]) count2=1; joymenunum+=count2; if (joymenunum<0) joymenunum=numofmenuitems-1; if (joymenunum>=numofmenuitems) joymenunum=0; if (menuitem[joymenunum].highlight==0) { if (count2==0) count2=1; joymenunum+=count2; if (joymenunum<0) joymenunum=numofmenuitems-1; if (joymenunum>=numofmenuitems) joymenunum=0; } } for (currentmenuitem=0;currentmenuitem=menuinputselectpos && count2=menuinputcursorpos && count2strlen(menuinput)) menuinputselectpos=strlen(menuinput); if (menuinputcursorpos<0) menuinputcursorpos=0; if (menuinputcursorpos>strlen(menuinput)) menuinputcursorpos=strlen(menuinput); count2=0xFFFFFFFF; } else { if (mouse.lmb) { if (!prevmouse.lmb) menuinputselectpos=(mouse.x-menuitem[currentmenuitem].x)/menuitem[currentmenuitem].textsize; menuinputcursorpos=(mouse.x-menuitem[currentmenuitem].x)/menuitem[currentmenuitem].textsize; if (menuinputselectpos<0) menuinputselectpos=0; if (menuinputselectpos>strlen(menuinput)) menuinputselectpos=strlen(menuinput); if (menuinputcursorpos<0) menuinputcursorpos=0; if (menuinputcursorpos>strlen(menuinput)) menuinputcursorpos=strlen(menuinput); } count2=getinputletter(0,0xFF); } if (count2!=0xFFFFFFFF) { if (count2>=32) { deleteselectedtext(); if (strlen(menuinput)0) { count3=menuinputcursorpos-1; while (menuinput[count3]!=0) { menuinput[count3]=menuinput[count3+1]; count3++; } menuinputcursorpos--; menuinputselectpos=menuinputcursorpos; } if (count2==12) { count3=currentmenuitem+1; while (count3!=currentmenuitem) { if (count3>=numofmenuitems) count3=0; if (menuitem[count3].type==1) { menuitem[currentmenuitem].active=0; menuitem[count3].active=1; count3=currentmenuitem-1; } count3++; } } if ((keyboard[SCAN_ENTER] && !prevkeyboard[SCAN_ENTER]) || (keyboard[SCAN_ESC] && !prevkeyboard[SCAN_ESC])) menuitem[currentmenuitem].active=0; } if (menuitem[currentmenuitem].inputtype==0) sscanf(menuinput,"%d",(int *)menuitem[currentmenuitem].inputpointer); else if (menuitem[currentmenuitem].inputtype==1) sscanf(menuinput,"%u",(unsigned *)menuitem[currentmenuitem].inputpointer); else if (menuitem[currentmenuitem].inputtype==2) sscanf(menuinput,"%g",(float *)menuitem[currentmenuitem].inputpointer); else strcpy(menuitem[currentmenuitem].inputpointer,menuinput); } void menutoggle(void) { *(int *)menuitem[currentmenuitem].inputpointer^=1; } void menuset(void) { *(int *)menuitem[currentmenuitem].inputpointer=menuitem[currentmenuitem].value; } int getinputletter(int repeat,int inputflags) { int count,count2; count=0xFFFFFFFF; if ((inputflags&1)==1) { if (keyboard[SCAN_A] && (repeat || !prevkeyboard[SCAN_A])) count='a'; if (keyboard[SCAN_B] && (repeat || !prevkeyboard[SCAN_B])) count='b'; if (keyboard[SCAN_C] && (repeat || !prevkeyboard[SCAN_C])) count='c'; if (keyboard[SCAN_D] && (repeat || !prevkeyboard[SCAN_D])) count='d'; if (keyboard[SCAN_E] && (repeat || !prevkeyboard[SCAN_E])) count='e'; if (keyboard[SCAN_F] && (repeat || !prevkeyboard[SCAN_F])) count='f'; if (keyboard[SCAN_G] && (repeat || !prevkeyboard[SCAN_G])) count='g'; if (keyboard[SCAN_H] && (repeat || !prevkeyboard[SCAN_H])) count='h'; if (keyboard[SCAN_I] && (repeat || !prevkeyboard[SCAN_I])) count='i'; if (keyboard[SCAN_J] && (repeat || !prevkeyboard[SCAN_J])) count='j'; if (keyboard[SCAN_K] && (repeat || !prevkeyboard[SCAN_K])) count='k'; if (keyboard[SCAN_L] && (repeat || !prevkeyboard[SCAN_L])) count='l'; if (keyboard[SCAN_M] && (repeat || !prevkeyboard[SCAN_M])) count='m'; if (keyboard[SCAN_N] && (repeat || !prevkeyboard[SCAN_N])) count='n'; if (keyboard[SCAN_O] && (repeat || !prevkeyboard[SCAN_O])) count='o'; if (keyboard[SCAN_P] && (repeat || !prevkeyboard[SCAN_P])) count='p'; if (keyboard[SCAN_Q] && (repeat || !prevkeyboard[SCAN_Q])) count='q'; if (keyboard[SCAN_R] && (repeat || !prevkeyboard[SCAN_R])) count='r'; if (keyboard[SCAN_S] && (repeat || !prevkeyboard[SCAN_S])) count='s'; if (keyboard[SCAN_T] && (repeat || !prevkeyboard[SCAN_T])) count='t'; if (keyboard[SCAN_U] && (repeat || !prevkeyboard[SCAN_U])) count='u'; if (keyboard[SCAN_V] && (repeat || !prevkeyboard[SCAN_V])) count='v'; if (keyboard[SCAN_W] && (repeat || !prevkeyboard[SCAN_W])) count='w'; if (keyboard[SCAN_X] && (repeat || !prevkeyboard[SCAN_X])) count='x'; if (keyboard[SCAN_Y] && (repeat || !prevkeyboard[SCAN_Y])) count='y'; if (keyboard[SCAN_Z] && (repeat || !prevkeyboard[SCAN_Z])) count='z'; if (count!=0xFFFFFFFF) if (keyboard[SCAN_SHIFT]) count=toupper(count); } if ((inputflags&8)==8) { if (keyboard[SCAN_SPACE] && (repeat || !prevkeyboard[SCAN_SPACE])) count=' '; } if (!keyboard[SCAN_SHIFT]) { if ((inputflags&2)==2) { if (keyboard[SCAN_0] && (repeat || !prevkeyboard[SCAN_0])) count='0'; if (keyboard[SCAN_1] && (repeat || !prevkeyboard[SCAN_1])) count='1'; if (keyboard[SCAN_2] && (repeat || !prevkeyboard[SCAN_2])) count='2'; if (keyboard[SCAN_3] && (repeat || !prevkeyboard[SCAN_3])) count='3'; if (keyboard[SCAN_4] && (repeat || !prevkeyboard[SCAN_4])) count='4'; if (keyboard[SCAN_5] && (repeat || !prevkeyboard[SCAN_5])) count='5'; if (keyboard[SCAN_6] && (repeat || !prevkeyboard[SCAN_6])) count='6'; if (keyboard[SCAN_7] && (repeat || !prevkeyboard[SCAN_7])) count='7'; if (keyboard[SCAN_8] && (repeat || !prevkeyboard[SCAN_8])) count='8'; if (keyboard[SCAN_9] && (repeat || !prevkeyboard[SCAN_9])) count='9'; } if ((inputflags&4)==4) { if (keyboard[SCAN_PERIOD] && (repeat || !prevkeyboard[SCAN_PERIOD])) count='.'; } if ((inputflags&16)==16) { if (keyboard[SCAN_MINUS] && (repeat || !prevkeyboard[SCAN_MINUS])) count='-'; } if ((inputflags&32)==32) { if (keyboard[SCAN_FOWARD_SLASH] && (repeat || !prevkeyboard[SCAN_FOWARD_SLASH])) count='/'; if (keyboard[SCAN_SEMI] && (repeat || !prevkeyboard[SCAN_SEMI])) count=';'; if (keyboard[SCAN_MINUS] && (repeat || !prevkeyboard[SCAN_MINUS])) count='-'; if (keyboard[SCAN_EQUALS] && (repeat || !prevkeyboard[SCAN_EQUALS])) count='='; if (keyboard[SCAN_COMMA] && (repeat || !prevkeyboard[SCAN_COMMA])) count=','; if (keyboard[SCAN_BACK_SLASH] && (repeat || !prevkeyboard[SCAN_BACK_SLASH])) count=92; if (keyboard[SCAN_APOS] && (repeat || !prevkeyboard[SCAN_APOS])) count=39; } } else { if ((inputflags&32)==32) { if (keyboard[SCAN_0] && (repeat || !prevkeyboard[SCAN_0])) count=')'; if (keyboard[SCAN_1] && (repeat || !prevkeyboard[SCAN_1])) count='!'; if (keyboard[SCAN_2] && (repeat || !prevkeyboard[SCAN_2])) count='@'; if (keyboard[SCAN_3] && (repeat || !prevkeyboard[SCAN_3])) count='#'; if (keyboard[SCAN_4] && (repeat || !prevkeyboard[SCAN_4])) count='$'; if (keyboard[SCAN_5] && (repeat || !prevkeyboard[SCAN_5])) count='%'; if (keyboard[SCAN_6] && (repeat || !prevkeyboard[SCAN_6])) count='^'; if (keyboard[SCAN_7] && (repeat || !prevkeyboard[SCAN_7])) count='&'; if (keyboard[SCAN_8] && (repeat || !prevkeyboard[SCAN_8])) count='*'; if (keyboard[SCAN_9] && (repeat || !prevkeyboard[SCAN_9])) count='('; if (keyboard[SCAN_FOWARD_SLASH] && (repeat || !prevkeyboard[SCAN_FOWARD_SLASH])) count='?'; if (keyboard[SCAN_SEMI] && (repeat || !prevkeyboard[SCAN_SEMI])) count=':'; if (keyboard[SCAN_MINUS] && (repeat || !prevkeyboard[SCAN_MINUS])) count='_'; if (keyboard[SCAN_EQUALS] && (repeat || !prevkeyboard[SCAN_EQUALS])) count='+'; if (keyboard[SCAN_PERIOD] && (repeat || !prevkeyboard[SCAN_PERIOD])) count='>'; if (keyboard[SCAN_COMMA] && (repeat || !prevkeyboard[SCAN_COMMA])) count='<'; if (keyboard[SCAN_BACK_SLASH] && (repeat || !prevkeyboard[SCAN_BACK_SLASH])) count='|'; if (keyboard[SCAN_APOS] && (repeat || !prevkeyboard[SCAN_APOS])) count=34; } } if (keyboard[SCAN_NUMDEL] && (repeat || !prevkeyboard[SCAN_NUMDEL])) count=9; if (keyboard[SCAN_DELETE] && (repeat || !prevkeyboard[SCAN_DELETE])) count=9; if (keyboard[SCAN_BKSP] && (repeat || !prevkeyboard[SCAN_BKSP])) count=10; if ((keyboard[SCAN_ENTER] && !prevkeyboard[SCAN_ENTER]) || (keyboard[SCAN_ESC] && !prevkeyboard[SCAN_ESC])) count=11; if (keyboard[SCAN_TAB] && !prevkeyboard[SCAN_TAB]) count=12; if (keyboard[SCAN_INSERT] && (repeat || !prevkeyboard[SCAN_INSERT])) menuinputinsert^=1; if (keyboard[SCAN_HOME] && (repeat || !prevkeyboard[SCAN_HOME])) { menuinputcursorpos=0; if (!keyboard[SCAN_SHIFT]) menuinputselectpos=menuinputcursorpos; } if (keyboard[SCAN_END] && (repeat || !prevkeyboard[SCAN_END])) { menuinputcursorpos=strlen(menuinput); if (!keyboard[SCAN_SHIFT]) menuinputselectpos=menuinputcursorpos; } if (keyboard[SCAN_LEFT] && (repeat || !prevkeyboard[SCAN_LEFT])) { if (menuinputcursorpos>0) menuinputcursorpos--; if (!keyboard[SCAN_SHIFT]) menuinputselectpos=menuinputcursorpos; } if (keyboard[SCAN_RIGHT] && (repeat || !prevkeyboard[SCAN_RIGHT])) { if (menuinputcursorposstrlen(menuinput)) menuinputselectpos=strlen(menuinput); if (menuinputcursorpos<0) menuinputcursorpos=0; if (menuinputcursorpos>strlen(menuinput)) menuinputcursorpos=strlen(menuinput); return(count); } void addmenuinputchar(int charinput) { int count; if (menuinputcursorpos>=192) return; if (!menuinputinsert) { count=192; while (count>menuinputcursorpos) { menuinput[count]=menuinput[count-1]; count--; } } menuinput[menuinputcursorpos]=charinput; menuinputcursorpos++; menuinputselectpos=menuinputcursorpos; } int deleteselectedtext(void) { int count,count2; int textdeleted; int cursortemp; count2=0; textdeleted=0; cursortemp=menuinputcursorpos; for (count=0;count<192;count++) { if ((count>=menuinputselectpos && count=menuinputcursorpos && countcount) cursortemp=count; textdeleted=1; } else { menuinputtemp[count2]=menuinput[count]; count2++; } } menuinputtemp[count2]=0; strcpy(menuinput,menuinputtemp); menuinputcursorpos=cursortemp; if (menuinputcursorpos>strlen(menuinput)) menuinputcursorpos=strlen(menuinput); menuinputselectpos=menuinputcursorpos; return(textdeleted); }