int main(int argc, char *argv[]) { printf("*******usertests starting*******\n\n"); printf("=====test file usertests.ran does not exists=====\n"); if(open("usertests.ran", O_RDONLY) >= 0){ printf("already ran user tests (file usertests.ran exists) -- recreate certikos_disk.img\n"); exit(); } printf("=====test file usertests.ran does not exists: ok\n\n"); close(open("usertests.ran", O_CREATE)); smallfile(); bigfile1(); createtest(); rmdot(); fourteen(); bigfile2(); subdir(); linktest(); unlinkread(); dirfile(); iref(); bigdir(); // slow printf("*******end of tests*******\n"); }
int do_magicshield(int cn) { int str; if (cn<1 || cn>=MAXCHARS) { error=ERR_ILLEGAL_CHARNO; return 0; } if (ch[cn].flags&(CF_DEAD)) { error=ERR_DEAD; return 0; } if ((ch[cn].flags&CF_NOMAGIC) && !(ch[cn].flags&CF_NONOMAGIC)) { error=ERR_UNCONCIOUS; return 0; } if (warcried(cn)) { error=ERR_UNCONCIOUS; return 0; } if (!ch[cn].value[0][V_MAGICSHIELD]) { error=ERR_UNKNOWN_SPELL; return 0; } if (ch[cn].mana<POWERSCALE) { error=ERR_MANA_LOW; return 0; } // no magic shield with less than one point if ((ch[cn].flags&CF_PLAYER) && areaID==33) { error=ERR_UNKNOWN_SPELL; return 0; } str=ch[cn].value[0][V_MAGICSHIELD]*POWERSCALE; str=min(str,ch[cn].mana*2); str=min(str,ch[cn].value[0][V_MAGICSHIELD]*POWERSCALE-ch[cn].lifeshield); if (str<1) { error=ERR_NO_EFFECT; return 0; } ch[cn].mana-=str/2; ch[cn].action=AC_MAGICSHIELD; ch[cn].act1=str; ch[cn].duration=speed(ch[cn].value[0][V_SPEED],ch[cn].speed_mode,DUR_MAGIC_ACTION); if (ch[cn].speed_mode==SM_FAST) ch[cn].endurance-=end_cost(cn); ch[cn].dir=bigdir(ch[cn].dir); return 1; }
int do_flash(int cn) { int cost,mod; if (cn<1 || cn>=MAXCHARS) { error=ERR_ILLEGAL_CHARNO; return 0; } if (ch[cn].flags&(CF_DEAD)) { error=ERR_DEAD; return 0; } if ((ch[cn].flags&CF_NOMAGIC) && !(ch[cn].flags&CF_NONOMAGIC)) { error=ERR_UNCONCIOUS; return 0; } if (warcried(cn)) { error=ERR_UNCONCIOUS; return 0; } if (!ch[cn].value[0][V_FLASH]) { error=ERR_UNKNOWN_SPELL; return 0; } mod=ch[cn].value[0][V_FLASH]/20; cost=FLASHCOST; //+mod*POWERSCALE; if (ch[cn].mana<cost) { error=ERR_MANA_LOW; return 0; } if (ch[cn].x<1 || ch[cn].x>=MAXMAP || ch[cn].y<1 || ch[cn].y>=MAXMAP) { error=ERR_ILLEGAL_COORDS; return 0; } if (!may_add_spell(cn,IDR_FLASH)) { error=ERR_ALREADY_WORKING; return 0; } ch[cn].mana-=cost; ch[cn].action=AC_FLASH; ch[cn].act1=mod; ch[cn].duration=speed(ch[cn].value[0][V_SPEED],ch[cn].speed_mode,DUR_MAGIC_ACTION); if (ch[cn].speed_mode==SM_FAST) ch[cn].endurance-=end_cost(cn); ch[cn].dir=bigdir(ch[cn].dir); return 1; }
int do_pulse(int cn) { int str; if (cn<1 || cn>=MAXCHARS) { error=ERR_ILLEGAL_CHARNO; return 0; } if (ch[cn].flags&(CF_DEAD)) { error=ERR_DEAD; return 0; } if ((ch[cn].flags&CF_NOMAGIC) && !(ch[cn].flags&CF_NONOMAGIC)) { error=ERR_UNCONCIOUS; return 0; } if (warcried(cn)) { error=ERR_UNCONCIOUS; return 0; } if (!ch[cn].value[0][V_PULSE]) { error=ERR_UNKNOWN_SPELL; return 0; } if (ch[cn].mana<POWERSCALE) { error=ERR_MANA_LOW; return 0; } str=min(spellpower(cn,V_PULSE),ch[cn].mana*8/POWERSCALE); ch[cn].mana-=str*POWERSCALE/8; ch[cn].action=AC_PULSE; ch[cn].act1=str; ch[cn].duration=speed(ch[cn].value[0][V_SPEED],ch[cn].speed_mode,DUR_MAGIC_ACTION); if (ch[cn].speed_mode==SM_FAST) ch[cn].endurance-=end_cost(cn); ch[cn].dir=bigdir(ch[cn].dir); return 1; }
int do_heal(int cn,int co) { int str; if (cn<1 || cn>=MAXCHARS) { error=ERR_ILLEGAL_CHARNO; return 0; } if (ch[cn].flags&(CF_DEAD)) { error=ERR_DEAD; return 0; } if ((ch[cn].flags&CF_NOMAGIC) && !(ch[cn].flags&CF_NONOMAGIC)) { error=ERR_UNCONCIOUS; return 0; } if (warcried(cn)) { error=ERR_UNCONCIOUS; return 0; } if (co<1 || co>=MAXCHARS) { error=ERR_ILLEGAL_CHARNO; return 0; } if (ch[co].flags&CF_DEAD) { error=ERR_DEAD; return 0; } if (!char_see_char(cn,co)) { error=ERR_NOT_VISIBLE; return 0; } if ((ch[cn].flags&CF_PLAYER) && !(ch[co].flags&(CF_PLAYER|CF_PLAYERLIKE))) { error=ERR_NOT_PLAYER; return 0; } if (!ch[cn].value[0][V_HEAL]) { error=ERR_UNKNOWN_SPELL; return 0; } if (ch[cn].mana<POWERSCALE) { error=ERR_MANA_LOW; return 0; } // no heals for less than one point if (!can_help(cn,co)) { error=ERR_ILLEGAL_ATTACK; return 0; } if ((ch[cn].flags&CF_PLAYER) && areaID==33) { error=ERR_UNKNOWN_SPELL; return 0; } str=ch[cn].value[0][V_HEAL]*POWERSCALE/2; // strength is spell strength str=min(str,(ch[co].value[0][V_HP]*POWERSCALE)-ch[co].hp); // but only up to max hp str=min(str,ch[cn].mana*2); // but only with as much mana as we have left if (str<1) { error=ERR_NO_EFFECT; return 0; } ch[cn].mana-=str/2; ch[cn].dir=bigdir(ch[cn].dir); if (cn==co) { ch[cn].action=AC_HEAL_SELF; ch[cn].act1=co; ch[cn].act2=str; ch[cn].duration=speed(ch[cn].value[0][V_SPEED],ch[cn].speed_mode,DUR_MAGIC_ACTION); if (ch[cn].speed_mode==SM_FAST) ch[cn].endurance-=end_cost(cn); } else { ch[cn].action=AC_HEAL1; ch[cn].act1=co; ch[cn].act2=str; ch[cn].dir=offset2dx(ch[cn].x,ch[cn].y,ch[co].x,ch[co].y); ch[cn].duration=speed(ch[cn].value[0][V_SPEED],ch[cn].speed_mode,DUR_MAGIC_ACTION/2); if (ch[cn].speed_mode==SM_FAST) ch[cn].endurance-=end_cost(cn); } return 1; }
int main(int argc, char *argv[]) { printf(1, "usertests starting\n"); if(open("usertests.ran", 0) >= 0){ printf(1, "already ran user tests -- rebuild fs.img\n"); exit(); } close(open("usertests.ran", O_CREATE)); createdelete(); linkunlink(); concreate(); fourfiles(); sharedfd(); bigargtest(); bigwrite(); bigargtest(); bsstest(); sbrktest(); validatetest(); opentest(); writetest(); writetest1(); createtest(); openiputtest(); exitiputtest(); iputtest(); mem(); pipe1(); preempt(); exitwait(); rmdot(); fourteen(); bigfile(); subdir(); linktest(); unlinkread(); dirfile(); iref(); forktest(); bigdir(); // slow exectest(); exit(); }
int do_bless(int cn,int co) { if (cn<1 || cn>=MAXCHARS) { error=ERR_ILLEGAL_CHARNO; return 0; } if (ch[cn].flags&(CF_DEAD)) { error=ERR_DEAD; return 0; } if (warcried(cn)) { error=ERR_UNCONCIOUS; return 0; } if ((ch[cn].flags&CF_NOMAGIC) && !(ch[cn].flags&CF_NONOMAGIC)) { error=ERR_UNCONCIOUS; return 0; } if (co<1 || co>=MAXCHARS) { error=ERR_ILLEGAL_CHARNO; return 0; } if (ch[co].flags&(CF_DEAD)) { error=ERR_DEAD; return 0; } if (!char_see_char(cn,co)) { error=ERR_NOT_VISIBLE; return 0; } if (!ch[cn].value[0][V_BLESS]) { error=ERR_UNKNOWN_SPELL; return 0; } if (ch[cn].mana<BLESSCOST) { error=ERR_MANA_LOW; return 0; } if ((ch[cn].flags&CF_PLAYER) && !(ch[co].flags&(CF_PLAYER|CF_PLAYERLIKE))) { error=ERR_NOT_PLAYER; return 0; } if (!may_add_spell(co,IDR_BLESS)) { error=ERR_ALREADY_WORKING; return 0; } if (!can_help(cn,co)) { error=ERR_ILLEGAL_ATTACK; return 0; } if (cn!=co && (ch[cn].flags&CF_PLAYER) && (ch[co].flags&CF_NOBLESS)) { error=ERR_ILLEGAL_ATTACK; return 0; } // dont allow bless other in teufelheim arena if (areaID==34 && cn!=co && (map[ch[cn].x+ch[cn].y*MAXMAP].flags&MF_ARENA)) { error=ERR_ILLEGAL_ATTACK; return 0; } ch[cn].mana-=BLESSCOST; ch[cn].dir=bigdir(ch[cn].dir); if (cn==co) { ch[cn].action=AC_BLESS_SELF; ch[cn].act1=co; ch[cn].duration=speed(ch[cn].value[0][V_SPEED],ch[cn].speed_mode,DUR_MAGIC_ACTION); if (ch[cn].speed_mode==SM_FAST) ch[cn].endurance-=end_cost(cn); } else { ch[cn].action=AC_BLESS1; ch[cn].act1=co; ch[cn].duration=speed(ch[cn].value[0][V_SPEED],ch[cn].speed_mode,DUR_MAGIC_ACTION/2); ch[cn].dir=offset2dx(ch[cn].x,ch[cn].y,ch[co].x,ch[co].y); if (ch[cn].speed_mode==SM_FAST) ch[cn].endurance-=end_cost(cn); } return 1; }
int do_ball(int cn,int x,int y) { int dir; if (cn<1 || cn>=MAXCHARS) { error=ERR_ILLEGAL_CHARNO; return 0; } if (ch[cn].flags&(CF_DEAD)) { error=ERR_DEAD; return 0; } if ((ch[cn].flags&CF_NOMAGIC) && !(ch[cn].flags&CF_NONOMAGIC)) { error=ERR_UNCONCIOUS; return 0; } if (warcried(cn)) { error=ERR_UNCONCIOUS; return 0; } if (!ch[cn].value[0][V_FLASH]) { error=ERR_UNKNOWN_SPELL; return 0; } if (x<1 || x>=MAXMAP-1 || y<1 || y>=MAXMAP-1) { error=ERR_ILLEGAL_COORDS; return 0; } if (ch[cn].mana<FLASHCOST) { error=ERR_MANA_LOW; return 0; } dir=offset2dx(ch[cn].x,ch[cn].y,x,y); if (!dir) { if (!may_add_spell(cn,IDR_FLASH)) { error=ERR_ALREADY_WORKING; return 0; } ch[cn].action=AC_FLASH; ch[cn].duration=speed(ch[cn].value[0][V_SPEED],ch[cn].speed_mode,DUR_MAGIC_ACTION); ch[cn].dir=bigdir(ch[cn].dir); } else { ch[cn].action=AC_BALL1; ch[cn].act1=x; ch[cn].act2=y; ch[cn].duration=speed(ch[cn].value[0][V_SPEED],ch[cn].speed_mode,DUR_MAGIC_ACTION/2); ch[cn].dir=dir; } ch[cn].mana-=FLASHCOST; if (ch[cn].speed_mode==SM_FAST) ch[cn].endurance-=end_cost(cn); return 1; }
int do_freeze(int cn) { if (cn<1 || cn>=MAXCHARS) { error=ERR_ILLEGAL_CHARNO; return 0; } if (ch[cn].flags&(CF_DEAD)) { error=ERR_DEAD; return 0; } if ((ch[cn].flags&CF_NOMAGIC) && !(ch[cn].flags&CF_NONOMAGIC)) { error=ERR_UNCONCIOUS; return 0; } if (warcried(cn)) { error=ERR_UNCONCIOUS; return 0; } if (!ch[cn].value[0][V_FREEZE]) { error=ERR_UNKNOWN_SPELL; return 0; } if (ch[cn].mana<FREEZECOST) { error=ERR_MANA_LOW; return 0; } ch[cn].mana-=FREEZECOST; ch[cn].action=AC_FREEZE; ch[cn].duration=speed(ch[cn].value[0][V_SPEED],ch[cn].speed_mode,DUR_MAGIC_ACTION); if (ch[cn].speed_mode==SM_FAST) ch[cn].endurance-=end_cost(cn); ch[cn].dir=bigdir(ch[cn].dir); return 1; }