Annotation of sbbs/sbbs2/putnode.c, revision 1.1.1.1

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: 

unix.superglobalmegacorp.com

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