Annotation of src/whmsc.c, revision 1.1

1.1     ! root        1: /*
        !             2:         WHMSC.C
        !             3: */
        !             4: 
        !             5: #include "icorp.h"
        !             6: 
        !             7: static
        !             8: int  cursbot,curstop,
        !             9:      cursx,cursy,
        !            10:      winx1,winy1,
        !            11:      winx2,winy2,
        !            12:      winatr;
        !            13: 
        !            14: #if MULTIPLAYER
        !            15: int  ipxflag;
        !            16: 
        !            17: int  totstarts;
        !            18: 
        !            19: long fakepersec,
        !            20:      gotlastpacketclock,
        !            21:      movefifoend,
        !            22:      movefifoplc,
        !            23:      ototalclock,
        !            24:      ready2send;
        !            25: 
        !            26: struct baksync baksync[MAXPLAYERS],
        !            27:      *baksyncptr[MAXPLAYERS];
        !            28: 
        !            29: struct multistart multistart[MAXMULTISTARTS],
        !            30:      *multistartptr[MAXMULTISTARTS];
        !            31: 
        !            32: char synckeys[MAXSYNCKEYS]={
        !            33:           KEYFWD,KEYBACK,KEYLEFT,KEYRIGHT,KEYRUN,KEYSTRAFE,KEYFIRE,KEYUSE,
        !            34:           KEYELEVUP,KEYELEVDN,KEYSTAND,KEYLAY,KEYUP,KEYDOWN,KEYGUN1,KEYGUN2,
        !            35:           KEYGUN3,KEYGUN4,KEYGUN5,KEYGUN6
        !            36:      },
        !            37:      tempbuf[576];
        !            38: 
        !            39: 
        !            40: //   DPMI stuff
        !            41: 
        !            42: struct rmreg {                // real mode register pack
        !            43:      unsigned long edi;
        !            44:      unsigned long esi;
        !            45:      unsigned long ebp;
        !            46:      unsigned long rsv;
        !            47:      unsigned long ebx;
        !            48:      unsigned long edx;
        !            49:      unsigned long ecx;
        !            50:      unsigned long eax;
        !            51:      unsigned short flags;
        !            52:      unsigned short es;
        !            53:      unsigned short ds;
        !            54:      unsigned short fs;
        !            55:      unsigned short gs;
        !            56:      unsigned short ip;
        !            57:      unsigned short cs;
        !            58:      unsigned short sp;
        !            59:      unsigned short ss;
        !            60: } rmreg;
        !            61: 
        !            62: struct ipxentry {
        !            63:      unsigned short cs;
        !            64:      unsigned short ip;
        !            65: } ipxentry;
        !            66: #endif
        !            67: 
        !            68: 
        !            69: void
        !            70: faketimerhandler(void)
        !            71: {
        !            72: #if MULTIPLAYER
        !            73:      short other,tempbufleng;
        !            74:      long i,j,k,l;
        !            75:      struct player *plr;
        !            76:      struct playerext *plrx;
        !            77: 
        !            78:      if (totalclock < ototalclock+TICSPERFRAME) {
        !            79:           return;
        !            80:      }
        !            81:      if (ready2send == 0) {
        !            82:           return;
        !            83:      }
        !            84:      fakepersec++;
        !            85:      ototalclock=totalclock;
        !            86:      if ((pyrn == connecthead) || (option[4] == 0)) {
        !            87:           if (option[4] != 0) {
        !            88:                while ((tempbufleng=getpacket(&other,tempbuf)) > 0) {
        !            89:                     plr=plptrlist[other];
        !            90:                     plrx=(struct playerext *)plr->ext1;
        !            91:                     switch (tempbuf[0]) {
        !            92:                     case 1:        //[1] (receive slave sync buffer)
        !            93:                          j=2;
        !            94:                          k=tempbuf[1];
        !            95:                          if (k&1) {
        !            96:                               plrx->vel=tempbuf[j++];
        !            97:                          }
        !            98:                          if (k&2) {
        !            99:                               plrx->svel=tempbuf[j++];
        !           100:                          }
        !           101:                          if (k&4) {
        !           102:                               plrx->angvel=tempbuf[j++];
        !           103:                          }
        !           104:                          if (k&8) {
        !           105:                               plrx->syncbits=((plrx->syncbits&0xFFFFFF00)|((long)tempbuf[j++]));
        !           106:                          }
        !           107:                          if (k&16) {
        !           108:                               plrx->syncbits=((plrx->syncbits&0xFFFF00FF)|((long)tempbuf[j++]<<8));
        !           109:                          }
        !           110:                          if (k&32) {
        !           111:                               plrx->syncbits=((plrx->syncbits&0xFF00FFFF)|((long)tempbuf[j++]<<16));
        !           112:                          }
        !           113:                          if (k&64) {
        !           114:                               plrx->syncbits=((plrx->syncbits&0x00FFFFFF)|((long)tempbuf[j++]<<24));
        !           115:                          }
        !           116:                          if (k&128) {
        !           117:                               plrx->weapon=tempbuf[j++];
        !           118:                          }
        !           119:                          break;
        !           120:                     case 2:        // typed message text
        !           121:                          break;
        !           122:                     case 3:        // voice transmission
        !           123:                          break;
        !           124:                     case 255:      //[255] (logout)
        !           125:                          showmessage("Player %d left the game",other);
        !           126:                          deletesprite(plr->spritenum);
        !           127:                          break;
        !           128:                     }
        !           129:                }
        !           130:           }
        !           131:           if (getoutputcirclesize() < 16) {
        !           132:                getinput(plptrlist[pyrn]);
        !           133:                if (option[4] != 0) {
        !           134:                     tempbuf[0]=0;
        !           135:                     tempbuf[1]=numplayers;
        !           136:                     j=2;
        !           137:                     for (i=connecthead ; i >= 0 ; i=connectpoint2[i]) {
        !           138:                          plr=plptrlist[i];
        !           139:                          plrx=(struct playerext *)plr->ext1;
        !           140:                          tempbuf[j]=(plr->x&0x000000FF);
        !           141:                          tempbuf[j+1]=(plr->x>>8)&0x000000FF;
        !           142:                          tempbuf[j+2]=(plr->x>>16)&0x000000FF;
        !           143:                          tempbuf[j+3]=(plr->x>>24)&0x000000FF;
        !           144:                          j+=4;
        !           145:                          tempbuf[j]=(plr->y&0x000000FF);
        !           146:                          tempbuf[j+1]=(plr->y>>8)&0x000000FF;
        !           147:                          tempbuf[j+2]=(plr->y>>16)&0x000000FF;
        !           148:                          tempbuf[j+3]=(plr->y>>24)&0x000000FF;
        !           149:                          j+=4;
        !           150:                          tempbuf[j]=(plr->z&0x000000FF);
        !           151:                          tempbuf[j+1]=(plr->z>>8)&0x000000FF;
        !           152:                          tempbuf[j+2]=(plr->z>>16)&0x000000FF;
        !           153:                          tempbuf[j+3]=(plr->z>>24)&0x000000FF;
        !           154:                          j+=4;
        !           155:                          tempbuf[j]=(plr->ang&0x000000FF);
        !           156:                          tempbuf[j+1]=(plr->ang>>8)&0x000000FF;
        !           157:                          j+=2;
        !           158:                          tempbuf[j]=(plr->sector&0x000000FF);
        !           159:                          tempbuf[j+1]=(plr->sector>>8)&0x000000FF;
        !           160:                          j+=2;
        !           161:                          tempbuf[j]=(plrx->syncbits&0xFF);
        !           162:                          tempbuf[j+1]=(plrx->syncbits>>8)&0xFF;
        !           163:                          tempbuf[j+2]=(plrx->syncbits>>16)&0xFF;
        !           164:                          tempbuf[j+3]=(plrx->syncbits>>24)&0xFF;
        !           165:                          j+=4;
        !           166:                          tempbuf[j]=plrx->weapon;
        !           167:                          j+=1;
        !           168:                          tempbuf[j]=(plrx->health&0x00FF);
        !           169:                          tempbuf[j+1]=(plrx->health>>8)&0x00FF;
        !           170:                          j+=2;
        !           171:                          plrx->oldvel=plrx->vel;
        !           172:                          plrx->oldsvel=plrx->svel;
        !           173:                          plrx->oldangvel=plrx->angvel;
        !           174:                          plrx->oldsyncbits=plrx->syncbits;
        !           175:                          if (plrx->weapon != plrx->oldweapon) {
        !           176:                               memmove(&plrx->weapontype,wptptr[plrx->weapon],
        !           177:                                                   sizeof(struct weapontype));
        !           178:                               plrx->oldweapon=plrx->weapon;
        !           179:                          }
        !           180:                     }
        !           181:                     for (i=connectpoint2[connecthead] ; i >= 0 ; i=connectpoint2[i]) {
        !           182:                          sendpacket(i,tempbuf,j);
        !           183:                     }
        !           184:                }
        !           185:                movethings();       //Move EVERYTHING (you too!)
        !           186:           }
        !           187:      }
        !           188:      else {                        //I am a SLAVE
        !           189:           while ((tempbufleng=getpacket(&other,tempbuf)) > 0) {
        !           190:                switch (tempbuf[0]) {
        !           191:                case 0:             //[0] (receive master sync buffer)
        !           192:                     if (numplayers != tempbuf[1]) {
        !           193:                          crash("faketimer: numplayers mismatch - "
        !           194:                               "master=%d,slave=%d",tempbuf[1],numplayers);
        !           195:                     }
        !           196:                     j=2;
        !           197:                     for (i=connecthead ; i >= 0 ; i=connectpoint2[i]) {
        !           198:                          plr=plptrlist[i];
        !           199:                          plrx=(struct playerext *)plr->ext1;
        !           200:                          plr->x=tempbuf[j]+(tempbuf[j+1]<<8)
        !           201:                               +(tempbuf[j+2]<<16)+(tempbuf[j+3]<<24);
        !           202:                          j+=4;
        !           203:                          plr->y=tempbuf[j]+(tempbuf[j+1]<<8)
        !           204:                               +(tempbuf[j+2]<<16)+(tempbuf[j+3]<<24);
        !           205:                          j+=4;
        !           206:                          plr->z=tempbuf[j]+(tempbuf[j+1]<<8)
        !           207:                               +(tempbuf[j+2]<<16)+(tempbuf[j+3]<<24);
        !           208:                          j+=4;
        !           209:                          plr->ang=tempbuf[j]+(tempbuf[j+1]<<8);
        !           210:                          j+=2;
        !           211:                          plr->sector=tempbuf[j]+(tempbuf[j+1]<<8);
        !           212:                          j+=2;
        !           213:                          plrx->syncbits=tempbuf[j]+(tempbuf[j+1]<<8)
        !           214:                               +(tempbuf[j+2]<<16)+(tempbuf[j+3]<<24);
        !           215:                          j+=4;
        !           216:                          if (i != pyrn) {
        !           217:                               plrx->weapon=tempbuf[j];
        !           218:                               if (plrx->weapon != plrx->oldweapon) {
        !           219:                                    memmove(&plrx->weapontype,wptptr[plrx->weapon],
        !           220:                                                        sizeof(struct weapontype));
        !           221:                                    plrx->oldweapon=plrx->weapon;
        !           222:                               }
        !           223:                          }
        !           224:                          j+=1;
        !           225:                          plrx->health=tempbuf[j]+(tempbuf[j+1]<<8);
        !           226:                          j+=2;
        !           227:                     }
        !           228:                     movethings();  //Move all players and sprites
        !           229:                     break;
        !           230:                case 2:
        !           231:                     break;
        !           232:                case 3:
        !           233:                     break;
        !           234:                case 255:           //[255] (logout)
        !           235:                     showmessage("Player %d left the game",other);
        !           236:                     deletesprite(plptrlist[other]->spritenum);
        !           237:                     break;
        !           238:                }
        !           239:           }
        !           240:           if (getoutputcirclesize() < 16) {
        !           241:                getinput(plptrlist[pyrn]);
        !           242:                tempbuf[0]=1;
        !           243:                k=0;
        !           244:                j=2;
        !           245:                plr=plptrlist[pyrn];
        !           246:                plrx=(struct playerext *)plr->ext1;
        !           247:                if (plrx->vel != plrx->oldvel) {
        !           248:                     tempbuf[j++]=plrx->vel;
        !           249:                     k|=1;
        !           250:                }
        !           251:                if (plrx->svel != plrx->oldsvel) {
        !           252:                     tempbuf[j++]=plrx->svel;
        !           253:                     k|=2;
        !           254:                }
        !           255:                if (plrx->angvel != plrx->oldangvel) {
        !           256:                     tempbuf[j++]=plrx->angvel;
        !           257:                     k|=4;
        !           258:                }
        !           259:                if ((plrx->syncbits&0x000000FF) != (plrx->oldsyncbits&0x000000FF)) {
        !           260:                     tempbuf[j++]=(plrx->syncbits&255);
        !           261:                     k|=8;
        !           262:                }
        !           263:                if ((plrx->syncbits&0x0000FF00) != (plrx->oldsyncbits&0x0000FF00)) {
        !           264:                     tempbuf[j++]=((plrx->syncbits>>8)&255);
        !           265:                     k|=16;
        !           266:                }
        !           267:                if ((plrx->syncbits&0x00FF0000) != (plrx->oldsyncbits&0x00FF0000)) {
        !           268:                     tempbuf[j++]=((plrx->syncbits>>16)&255);
        !           269:                     k|=32;
        !           270:                }
        !           271:                if ((plrx->syncbits&0xFF000000) != (plrx->oldsyncbits&0xFF000000)) {
        !           272:                     tempbuf[j++]=((plrx->syncbits>>24)&255);
        !           273:                     k|=64;
        !           274:                }
        !           275:                if (plrx->weapon != plrx->oldweapon) {
        !           276:                     tempbuf[j++]=(char)plrx->weapon;
        !           277:                     k|=128;
        !           278:                }
        !           279:                tempbuf[1]=k;
        !           280:                plrx->oldvel=plrx->vel;
        !           281:                plrx->oldsvel=plrx->svel;
        !           282:                plrx->oldangvel=plrx->angvel;
        !           283:                plrx->oldsyncbits=plrx->syncbits;
        !           284:                sendpacket(connecthead,tempbuf,j);
        !           285:           }
        !           286:      }
        !           287: #endif
        !           288: }
        !           289: 
        !           290: 
        !           291: char buf[80];
        !           292: 
        !           293: void
        !           294: setvmode(int m)
        !           295: {
        !           296:      union REGS regs;
        !           297: 
        !           298:      memset(&regs,0,sizeof(union REGS));
        !           299:      regs.h.ah=0x00;
        !           300:      regs.h.al=m;
        !           301:      int386(0x10,&regs,&regs);
        !           302: }
        !           303: 
        !           304: void
        !           305: setatr(int fore,int back)
        !           306: {
        !           307:      winatr=(((back&0x0F)<<4)|(fore&0x0F));
        !           308: }
        !           309: 
        !           310: void
        !           311: setcsize(int t,int b)
        !           312: {
        !           313:      union REGS regs;
        !           314: 
        !           315:      memset(&regs,0,sizeof(union REGS));
        !           316:      regs.h.ah=0x01;
        !           317:      regs.h.ch=t;
        !           318:      regs.h.cl=b;
        !           319:      int386(0x10,&regs,&regs);
        !           320: }
        !           321: 
        !           322: void
        !           323: gotoxy(int x,int y)
        !           324: {
        !           325:      union REGS regs;
        !           326: 
        !           327:      memset(&regs,0,sizeof(union REGS));
        !           328:      regs.h.ah=0x02;
        !           329:      regs.h.bh=0;
        !           330:      regs.h.dh=y;
        !           331:      regs.h.dl=x;
        !           332:      int386(0x10,&regs,&regs);
        !           333:      cursx=x;
        !           334:      cursy=y;
        !           335: }
        !           336: 
        !           337: void
        !           338: getcurs(void)
        !           339: {
        !           340:      union REGS regs;
        !           341: 
        !           342:      memset(&regs,0,sizeof(union REGS));
        !           343:      regs.h.ah=0x03;
        !           344:      regs.h.bh=0;
        !           345:      int386(0x10,&regs,&regs);
        !           346:      if (curstop == -1) {
        !           347:           curstop=regs.h.ch;
        !           348:      }
        !           349:      if (cursbot == -1) {
        !           350:           cursbot=regs.h.cl;
        !           351:      }
        !           352:      cursy=regs.h.dh;
        !           353:      cursx=regs.h.dl;
        !           354: }
        !           355: 
        !           356: void
        !           357: setregion(int x1,int y1,int x2,int y2)
        !           358: {
        !           359:      winx1=x1;
        !           360:      winy1=y1;
        !           361:      winx2=x2;
        !           362:      winy2=y2;
        !           363: }
        !           364: 
        !           365: void
        !           366: scrollup(void)
        !           367: {
        !           368:      union REGS regs;
        !           369: 
        !           370:      memset(&regs,0,sizeof(union REGS));
        !           371:      regs.h.ah=0x06;
        !           372:      regs.h.al=1;
        !           373:      regs.h.bh=winatr;
        !           374:      regs.h.ch=winy1;
        !           375:      regs.h.cl=winx1;
        !           376:      regs.h.dh=winy2;
        !           377:      regs.h.dl=winx2;
        !           378:      int386(0x10,&regs,&regs);
        !           379: }
        !           380: 
        !           381: void
        !           382: scrolldn(void)
        !           383: {
        !           384:      union REGS regs;
        !           385: 
        !           386:      memset(&regs,0,sizeof(union REGS));
        !           387:      regs.h.ah=0x07;
        !           388:      regs.h.al=1;
        !           389:      regs.h.bh=winatr;
        !           390:      regs.h.ch=winy1;
        !           391:      regs.h.cl=winx1;
        !           392:      regs.h.dh=winy2;
        !           393:      regs.h.dl=winx2;
        !           394:      int386(0x10,&regs,&regs);
        !           395: }
        !           396: 
        !           397: void
        !           398: clrregion(int fore,int back)
        !           399: {
        !           400:      union REGS regs;
        !           401: 
        !           402:      setatr(fore,back);
        !           403:      memset(&regs,0,sizeof(union REGS));
        !           404:      regs.h.ah=0x06;
        !           405:      regs.h.al=0;
        !           406:      regs.h.bh=winatr;
        !           407:      regs.h.ch=winy1;
        !           408:      regs.h.cl=winx1;
        !           409:      regs.h.dh=winy2;
        !           410:      regs.h.dl=winx2;
        !           411:      int386(0x10,&regs,&regs);
        !           412: }
        !           413: 
        !           414: 
        !           415: void far *
        !           416: dpmi_getexception(int no)
        !           417: {
        !           418:      void far *fp;
        !           419:      union REGS regs;
        !           420: 
        !           421:      regs.x.eax=0x202;
        !           422:      regs.x.ebx=no;
        !           423:      int386(0x31,&regs,&regs);
        !           424:      fp=MK_FP(regs.w.cx,regs.x.edx);
        !           425:      return(fp);
        !           426: }
        !           427: 
        !           428: void
        !           429: dpmi_setexception(int no,void far *func)
        !           430: {
        !           431:      union REGS regs;
        !           432: 
        !           433:      regs.x.eax=0x203;
        !           434:      regs.x.ebx=no;
        !           435:      regs.x.ecx=FP_SEG(func);
        !           436:      regs.x.edx=FP_OFF(func);
        !           437:      int386(0x31,&regs,&regs);
        !           438: }
        !           439: 
        !           440: #if MULTIPLAYER
        !           441: int
        !           442: dpmi_callrealint(int no,struct rmreg *r)
        !           443: {
        !           444:      union REGS regs;
        !           445:      struct SREGS sregs;
        !           446:      void far *fp;
        !           447: 
        !           448:      fp=(void far *)r;
        !           449:      segread(&sregs);
        !           450:      regs.x.eax=0x300;
        !           451:      regs.x.ebx=no;
        !           452:      regs.x.ecx=0;
        !           453:      sregs.es=FP_SEG(fp);
        !           454:      regs.x.edi=FP_OFF(fp);
        !           455:      r->ss=0;
        !           456:      r->sp=0;
        !           457:      r->flags=0;
        !           458:      int386x(0x31,&regs,&regs,&sregs);
        !           459:      return(regs.x.cflag);
        !           460: }
        !           461: 
        !           462: int
        !           463: isipx(void)
        !           464: {
        !           465:      rmreg.eax=0x7A00;
        !           466:      dpmi_callrealint(0x2F,&rmreg);
        !           467:      if ((rmreg.eax&0x000000FF) != 0xFF) {
        !           468:           ipxentry.cs=0;
        !           469:           ipxentry.ip=0;
        !           470:           ipxflag=0;
        !           471:      }
        !           472:      else {
        !           473:           ipxentry.cs=rmreg.es;
        !           474:           ipxentry.ip=rmreg.edi&0xFFFF;
        !           475:           ipxflag=1;
        !           476:      }
        !           477:      return(ipxflag);
        !           478: }
        !           479: #endif
        !           480: 

unix.superglobalmegacorp.com

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