|
|
1.1 ! root 1: #line 1 "PUTNODE.C" ! 2: ! 3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */ ! 4: ! 5: #include "sbbs.h" ! 6: ! 7: /****************************************************************************/ ! 8: /* Write the data from the structure 'node' into NODE.DAB */ ! 9: /* getnodedat(num,&node,1); must have been called before calling this func */ ! 10: /* NOTE: ------^ the indicates the node record has been locked */ ! 11: /****************************************************************************/ ! 12: void putnodedat(uint number, node_t node) ! 13: { ! 14: char str[256],firston[25]; ! 15: ! 16: if(!(sys_status&SS_NODEDAB)) ! 17: return; ! 18: if(!number || number>sys_nodes) { ! 19: errormsg(WHERE,ERR_CHK,"node number",number); ! 20: return; } ! 21: if(number==node_num) { ! 22: if((node.status==NODE_INUSE || node.status==NODE_QUIET) ! 23: && text[NodeActionMain+node.action][0]) { ! 24: node.misc|=NODE_EXT; ! 25: memset(str,0,128); ! 26: sprintf(str,text[NodeActionMain+node.action] ! 27: ,useron.alias ! 28: ,useron.level ! 29: ,getage(useron.birth) ! 30: ,useron.sex ! 31: ,useron.comp ! 32: ,useron.note ! 33: ,unixtodstr(useron.firston,firston) ! 34: ,node.aux&0xff ! 35: ,node.connection ! 36: ); ! 37: putnodeext(number,str); } ! 38: else ! 39: node.misc&=~NODE_EXT; } ! 40: number--; /* make zero based */ ! 41: lseek(nodefile,(long)number*sizeof(node_t),SEEK_SET); ! 42: if(write(nodefile,&node,sizeof(node_t))!=sizeof(node_t)) { ! 43: unlock(nodefile,(long)number*sizeof(node_t),sizeof(node_t)); ! 44: errormsg(WHERE,ERR_WRITE,"nodefile",number+1); ! 45: return; } ! 46: unlock(nodefile,(long)number*sizeof(node_t),sizeof(node_t)); ! 47: } ! 48: ! 49: /****************************************************************************/ ! 50: /* Creates a short message for node 'num' than contains 'strin' */ ! 51: /****************************************************************************/ ! 52: void putnmsg(int num, char *strin) ! 53: { ! 54: char str[256]; ! 55: int file,i; ! 56: node_t node; ! 57: ! 58: sprintf(str,"%sMSGS\\N%3.3u.MSG",data_dir,num); ! 59: if((file=nopen(str,O_WRONLY|O_CREAT))==-1) { ! 60: errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT); ! 61: return; } ! 62: lseek(file,0L,SEEK_END); // Instead of opening with O_APPEND ! 63: i=strlen(strin); ! 64: if(write(file,strin,i)!=i) { ! 65: close(file); ! 66: errormsg(WHERE,ERR_WRITE,str,i); ! 67: return; } ! 68: close(file); ! 69: getnodedat(num,&node,0); ! 70: if((node.status==NODE_INUSE || node.status==NODE_QUIET) ! 71: && !(node.misc&NODE_NMSG)) { ! 72: getnodedat(num,&node,1); ! 73: node.misc|=NODE_NMSG; ! 74: putnodedat(num,node); } ! 75: } ! 76: ! 77: void putnodeext(uint number, char *ext) ! 78: { ! 79: char str[256]; ! 80: int count=0; ! 81: ! 82: if(!(sys_status&SS_NODEDAB)) ! 83: return; ! 84: if(!number || number>sys_nodes) { ! 85: errormsg(WHERE,ERR_CHK,"node number",number); ! 86: return; } ! 87: number--; /* make zero based */ ! 88: while(count<LOOP_NODEDAB) { ! 89: if(count>10) ! 90: mswait(55); ! 91: lseek(node_ext,(long)number*128L,SEEK_SET); ! 92: if(lock(node_ext,(long)number*128L,128)==-1) { ! 93: count++; ! 94: continue; } ! 95: if(write(node_ext,ext,128)==128) ! 96: break; ! 97: count++; } ! 98: unlock(node_ext,(long)number*128L,128); ! 99: if(count>(LOOP_NODEDAB/2) && count!=LOOP_NODEDAB) { ! 100: sprintf(str,"NODE.EXB COLLISION - Count: %d",count); ! 101: logline("!!",str); } ! 102: if(count==LOOP_NODEDAB) { ! 103: errormsg(WHERE,ERR_WRITE,"NODE.EXB",number+1); ! 104: return; } ! 105: } ! 106: ! 107: /****************************************************************************/ ! 108: /* Creates a short message for 'usernumber' than contains 'strin' */ ! 109: /****************************************************************************/ ! 110: void putsmsg(int usernumber, char *strin) ! 111: { ! 112: char str[256]; ! 113: int file,i; ! 114: node_t node; ! 115: ! 116: sprintf(str,"%sMSGS\\%4.4u.MSG",data_dir,usernumber); ! 117: if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) { ! 118: errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_APPEND); ! 119: return; } ! 120: i=strlen(strin); ! 121: if(write(file,strin,i)!=i) { ! 122: close(file); ! 123: errormsg(WHERE,ERR_WRITE,str,i); ! 124: return; } ! 125: close(file); ! 126: for(i=1;i<=sys_nodes;i++) { /* flag node if user on that msg waiting */ ! 127: getnodedat(i,&node,0); ! 128: if(node.useron==usernumber ! 129: && (node.status==NODE_INUSE || node.status==NODE_QUIET) ! 130: && !(node.misc&NODE_MSGW)) { ! 131: getnodedat(i,&node,1); ! 132: node.misc|=NODE_MSGW; ! 133: putnodedat(i,node); } } ! 134: } ! 135:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.