Пример #1
0
int personlig(void) {
	int nummer,editret;
	struct Mote *motpek;
	if(argument[0]) {
		if(mote2==-1) {
			puttekn("\r\n\nBrev kommenterar du som vanligt med 'kommentera'.\r\n\n",-1);
			return(0);
		}
		nummer=atoi(argument);
		motpek=getmotpek(mote2);
		if(motpek->type == MOTE_ORGINAL) {
			if(nummer<Servermem->info.lowtext || nummer>Servermem->info.hightext) {
				puttekn("\r\n\nTexten finns inte!\r\n\n",-1);
				return(0);
			}
			if(!MayBeMemberConf(Servermem->texts[nummer%MAXTEXTS], inloggad, &Servermem->inne[nodnr])) {
				puttekn("\r\n\nDu har inte rätt att kommentera den texten!\r\n\n",-1);
				return(0);
			}
			if(readtexthead(nummer,&readhead)) return(0);
			senast_text_mote = Servermem->texts[nummer%MAXTEXTS];
		} else if(motpek->type == MOTE_FIDO) {
			if(nummer<motpek->lowtext || nummer>motpek->texter) {
				puttekn("\r\n\nTexten finns inte!\r\n\n",-1);
				return(0);
			}
			senast_text_mote = motpek->nummer;
		}
		senast_text_typ=TEXT;
		senast_text_nr = nummer;
	} else {
		if(senast_text_typ==BREV) {
			puttekn("\r\n\nBrev kommenterar du som vanligt med 'kommentera'.\r\n\n",-1);
			return(0);
		}
		if(!(motpek=getmotpek(senast_text_mote))) {
			puttekn("\n\n\rHmm.. Mötet där texten finns existerar inte..\n\r",-1);
			return(0);
		}

	}
	if(motpek->type == MOTE_FIDO) {
		nu_skrivs = BREV_FIDO;
		return(fido_brev(NULL,NULL,motpek));
	}
	nu_skrivs=BREV;
	initpersheader();
	if((editret=edittext(NULL))==1) return(1);
	if(!editret) sparabrev();
	return(0);
}
Пример #2
0
/*
 * Returns the id of the next conference with unread texts, starting the search
 * from currentConfId. Returns -2 if there is no conference with unread texts.
 */
int FindNextUnreadConf(int currentConfId) {
  struct Mote *conf;
  int tmpConfId = 0;

  if(IsListEmpty((struct List *)&Servermem->mot_list)) {
    return -2;
  }

  if(currentConfId == MAILBOX_CONFID) {
    conf = (struct Mote *)Servermem->mot_list.mlh_Head;
  } else {
    conf = getmotpek(currentConfId);
    conf = (struct Mote *)conf->mot_node.mln_Succ;
    if(conf->mot_node.mln_Succ == NULL) {
      conf = (struct Mote *)Servermem->mot_list.mlh_Head;
    }
  }
  tmpConfId = conf->nummer;
  while(tmpConfId != currentConfId) {
    if(!(conf->status & SUPERHEMLIGT) && hasUnreadInConf(tmpConfId)) {
      return tmpConfId;
    }
    conf = (struct Mote *)conf->mot_node.mln_Succ;
    if(conf->mot_node.mln_Succ == NULL) {
      if(currentConfId == MAILBOX_CONFID) {
        return -2;
      }
      conf = (struct Mote *)Servermem->mot_list.mlh_Head;
    }
    tmpConfId = conf->nummer;
  }
  return -2;
}
Пример #3
0
void rxvisatext(struct RexxMsg *mess) {
        struct Mote *motpek;
        int text,mote,type;
        char *pek;
        pek=hittaefter(mess->rm_Args[0]);
        if(!pek[0]) {
                mess->rm_Result1=10;
                mess->rm_Result2=NULL;
                return;
        }
        text=atoi(pek);
        pek=hittaefter(pek);
        if(!pek[0]) type=MOTE_ORGINAL;
        else {
                mote=atoi(pek);
                motpek=getmotpek(mote);
                if(!motpek) {
                        mess->rm_Result1=10;
                        mess->rm_Result2=NULL;
                        return;
                }
                type=motpek->type;
        }
        if(type==MOTE_ORGINAL) org_visatext(text);
        mess->rm_Result1=0;
        mess->rm_Result2=NULL;
}
Пример #4
0
void igen(void) {
    struct Mote *motpek;
    if(senast_text_typ==BREV) visabrev(senast_brev_nr,senast_brev_anv);
    else if(senast_text_typ==TEXT) {
        motpek=getmotpek(senast_text_mote);
        if(motpek->type==MOTE_ORGINAL) org_visatext(senast_text_nr, FALSE);
        else if(motpek->type==MOTE_FIDO) fido_visatext(senast_text_nr,motpek);
    }
    else puttekn("\r\n\nDu har inte läst någon text ännu!\r\n\n",-1);
}
Пример #5
0
void rxentermeet(struct RexxMsg *mess) {
        int motnr;
        motnr=atoi(hittaefter(mess->rm_Args[0]));
        if(!getmotpek(motnr)) {
                mess->rm_Result1=10;
                mess->rm_Result2=NULL;
                return;
        }
        sendrexxrc=motnr;
        mess->rm_Result1=0;
        mess->rm_Result2=NULL;
}
Пример #6
0
int radmot(void) {
	int motnr,x,words;
	char lappfile[40];
	BPTR fh;
	struct Mote *motpek;
	if((motnr=parsemot(argument))==-1) {
		puttekn("\r\n\nFinns inget möte som heter så!\r\n\n",-1);
		return(-5);
	}
	if(motnr==-3) {
		puttekn("\r\n\nSkriv: Radera Möte <mötesnamn>\r\n\n",-1);
		return(-5);
	}
	motpek=getmotpek(motnr);
	if(!motpek) printf("ARRRRGH!! Fel på motpek!\n");
	if(!MayAdminConf(motnr, inloggad, &Servermem->inne[nodnr])) {
	   	puttekn("\n\n\rDu har ingen rätt att radera det mötet!\n\r",-1);
	   	return(-5);
	}
	sprintf(outbuffer,"\r\n\nÄr du säker på att du vill radera mötet %s? ",motpek->namn);
	puttekn(outbuffer,-1);
	if(!jaellernej('j','n',2)) {
		puttekn("Nej\n\n\r",-1);
		return(-5);
	}
	puttekn("Ja\r\n\n",-1);
	Remove((struct Node *)motpek);
	motpek->namn[0]=0;
	writemeet(motpek);
	FreeMem(motpek,sizeof(struct Mote));
	sprintf(lappfile,"NiKom:Lappar/%d.motlapp",motnr);
	DeleteFile(lappfile);
	for(x=Servermem->info.lowtext;x<=Servermem->info.hightext;x++) {
		if(Servermem->texts[x%MAXTEXTS]==motnr) Servermem->texts[x%MAXTEXTS]=-1;
	}
	NiKForbid();
	if(!(fh=Open("NiKom:DatoCfg/Textmot.dat",MODE_OLDFILE))) {
		puttekn("\r\n\nKunde inte öppna NiKom:DatoCfg/Textmot.dat\r\n\n",-1);
		NiKPermit();
		return(-5);
	}
	words=Write(fh,(void *)Servermem->texts,2*MAXTEXTS);
	if(words==-1) puttekn("\r\n\nFel vid skrivandet av Textmot.dat\r\n\n",-1);
	Close(fh);
	NiKPermit();
	return(mote2==motnr ? -9 : -5);
}
Пример #7
0
int endast(void) {
	int antal,foo=TRUE;
	int motnr, nyttmote = 1;
	struct Mote *motpek = NULL;
	if(!isdigit(argument[0])) {
		puttekn("\r\n\nSkriv: Endast <antal texter> [mötesnamn]\r\n",-1);
		return(-5);
	}
	antal=atoi(argument);
	argument=hittaefter(argument);
	if(argument[0])
	{
		if(matchar(argument,Servermem->cfg.brevnamn))
			motnr = -1;
		else
		{
			motnr=parsemot(argument);
			if(motnr==-3)
			{
				puttekn("\r\n\nSkriv: Endast <antal texter> [mötesnamn]\r\n\n",-1);
				return(-5);
			}
			if(motnr==-1)
			{
				puttekn("\r\n\nFinns inget sådant möte!\r\n\n", -1);
				return(-5);
			}
		}
		nyttmote = 0;
	}
	else
		motnr = mote2;

	if(motnr==-1) {
		Servermem->inne[nodnr].brevpek=getnextletter(inloggad)-antal;
		foo=getfirstletter(inloggad);
		if(foo>Servermem->inne[nodnr].brevpek) Servermem->inne[nodnr].brevpek=foo;
	} else {
		motpek = getmotpek(motnr);
		if(motpek->type==MOTE_ORGINAL) org_endast(motnr,antal);
		else if(motpek->type==MOTE_FIDO) fido_endast(motpek,antal);
	}
	if(nyttmote)
		return(-11);
	else
		return(-5);
}
Пример #8
0
void atersekom(void) {
    struct Mote *motpek;
    if(senast_text_typ==BREV) {
        if(!brevread.reply[0]) puttekn("\r\n\nTexten är inte någon kommentar!\r\n\n",-1);
        else visabrev(atoi(hittaefter(brevread.reply)),atoi(brevread.reply));
    }
    else if(senast_text_typ==TEXT) {
        motpek=getmotpek(senast_text_mote);
        if(motpek->type==MOTE_ORGINAL) {
            if(readhead.kom_till_nr==-1) puttekn("\r\n\nTexten är inte någon kommentar!\r\n\n",-1);
            else if(readhead.kom_till_nr<Servermem->info.lowtext) puttekn("\r\n\nTexten finns inte!\r\n\n",-1);
            else org_visatext(readhead.kom_till_nr, FALSE);
        }
        else if(motpek->type==MOTE_FIDO) puttekn("\n\n\rÅterse Kommenterade kan inte användas på Fido-texter\n\r",-1);
    }
    else puttekn("\r\n\nDu har inte läst någon text ännu!\r\n\n",-1);
}
Пример #9
0
void listaarende(void) {
	char *nextarg=argument,namn[50],kom[10];
	int x,dir=-1,from=-1,baratexter=FALSE;
	struct Mote *motpek;
	struct Header lahead;
	struct tm *ts;
	if(mote2==-1) {
		sprintf(outbuffer,"\n\n\rAnvänd 'Lista Brev' i %s\n\r",Servermem->cfg.brevnamn);
		puttekn(outbuffer,-1);
		return;
	}
	while(nextarg[0]) {
		if(nextarg[0]=='-') {
			if(nextarg[1]=='t' || nextarg[1]=='T') baratexter=TRUE;
			else if(nextarg[1]=='f' || nextarg[1]=='F') {
				dir=1;
				if(from<0) from=-2;
			}
		} else if(isdigit(nextarg[0])) from=atoi(nextarg);
		nextarg=hittaefter(nextarg);
	}
	motpek=getmotpek(mote2);
	if(motpek->type==MOTE_FIDO) {
		fidolistaarende(motpek,dir);
		return;
	}
	puttekn("\r\n\nNamn                              Text    Kom   Datum  Ärende",-1);
	puttekn("\r\n-------------------------------------------------------------------------\r\n",-1);
	if(from==-1) from=Servermem->info.hightext;
	else if(from==-2) from=Servermem->info.lowtext;
	for(x=from;x>=Servermem->info.lowtext && x<=Servermem->info.hightext;x+=dir) {
		if(Servermem->texts[x%MAXTEXTS]!=mote2) continue;
		if(readtexthead(x,&lahead)) return;
		if(lahead.kom_till_nr!=-1 && baratexter) continue;
		strcpy(namn,getusername(lahead.person));
		lahead.arende[22]=0;
		ts=localtime(&lahead.tid);
		if(lahead.kom_till_nr==-1) strcpy(kom,"   -");
		else sprintf(kom,"%d",lahead.kom_till_nr);
		sprintf(outbuffer,"%-34s%6d %6s %02d%02d%02d %s\r\n",namn,lahead.nummer,kom,ts->tm_year,ts->tm_mon+1,ts->tm_mday,lahead.arende);
		if(puttekn(outbuffer,-1)) return;
	}
}
Пример #10
0
int skriv(void) {
    struct Mote *motpek;
    if(mote2==-1) {
        sprintf(outbuffer,"\r\n\nAnvänd kommandot 'Brev' i %s.\r\n",Servermem->cfg.brevnamn);
        puttekn(outbuffer,-1);
        return(0);
    }
    motpek=getmotpek(mote2);
    if(!motpek) {
        puttekn("\n\n\rHmm.. Mötet du befinner dig i finns inte.\n\r",-1);
        return(0);
    }
    if(!MayWriteConf(motpek->nummer, inloggad, &Servermem->inne[nodnr])) {
        puttekn("\r\n\nDu får inte skriva i det här mötet!\r\n\n",-1);
        return(0);
    }
    if(motpek->type==MOTE_ORGINAL) return(org_skriv());
    else if(motpek->type==MOTE_FIDO) return(fido_skriv(EJKOM,0));
    return(0);
}
Пример #11
0
void varmote(int mote) {
    int cnt;
    struct Mote *conf;
    conf = getmotpek(mote);
    SendStringCat("\r\n\n%s\r\n", CATSTR(MSG_WHERE_YOU_ARE_IN), conf->namn);
    if(conf->type == MOTE_FIDO) {
        if(conf->lowtext > conf->texter) {
            SendString("%s\r\n", CATSTR(MSG_WHERE_NO_TEXTS));
        } else {
            SendStringCat("%s\r\n", CATSTR(MSG_WHERE_TEXTS_NUMBERED), conf->lowtext, conf->texter);
        }
    }
    cnt = countunread(mote);
    if(cnt == 0) {
        SendString("%s\r\n", CATSTR(MSG_WHERE_NO_UNREAD_TEXTS));
    } else if(cnt == 1) {
        SendString("%s\r\n", CATSTR(MSG_WHERE_ONE_UNREAD_TEXT));
    } else {
        SendStringCat("%s\r\n", CATSTR(MSG_WHERE_MANY_UNREAD_TEXTS), cnt);
    }
}
Пример #12
0
void radtext(void) {
	int nummer;
	struct Header radhead;
	struct Mote *motpek;
	nummer = atoi(argument);
	motpek=getmotpek(Servermem->texts[nummer%MAXTEXTS]);
	if(motpek->type != MOTE_ORGINAL) {
		puttekn("\n\n\rDu kan bara radera texter i interna möten.\n\n\r",-1);
		return;
	}
	if(nummer < Servermem->info.lowtext || nummer > Servermem->info.hightext) {
		puttekn("\r\n\nTexten finns inte!\r\n\n",-1);
		return;
	}
	if(readtexthead(nummer,&radhead)) return;
	if(radhead.person!=inloggad && !MayAdminConf(motpek->nummer, inloggad, &Servermem->inne[nodnr])) {
		puttekn("\r\n\nDu kan bara radera texter av dig själv!\r\n\n",-1);
		return;
	}
	writetextmot(nummer,-1);
}
Пример #13
0
int hasUnreadInConf(int confId) {
  struct Mote *conf;
  if(confId == MAILBOX_CONFID) {
    return HasUnreadMail();
  }
  if(!IsMemberConf(confId, inloggad, &Servermem->inne[nodnr])) {
    return 0;
  }
  if((conf = getmotpek(confId)) == NULL) {
    LogEvent(SYSTEM_LOG, ERROR,
             "Can't find struct for confId %d in hasUnreadConf()", confId);
    return 0;
  }
  switch(conf->type) {
  case MOTE_ORGINAL:
    return HasUnreadInOrgConf(confId);
  case MOTE_FIDO:
    return HasUnreadInFidoConf(conf);
  default:
    LogEvent(SYSTEM_LOG, ERROR,
             "Undefined type %d for conf %d in hasUnreadConf()", conf->type, confId);
  }
  return 0;
}
Пример #14
0
void Cmd_Read(void) {
  int textId;
  struct Mote *conf;
  char verbose = FALSE, *flag;
  if(argument[0] == '\0') {
    SendString("\r\n\nSkriv: Läsa <textnr>\r\n");
    return;
  }
  textId = parseTextNumber(argument, mote2 == -1 ? BREV : 0);
  if(textId == -1) {
    SendString("\r\n\nFinns ingen sådan text.\r\n");
    return;
  }
  flag = hittaefter(argument);
  if(flag[0] == '-' && (flag[1] == 'v' || flag[1] == 'V')) {
    verbose = TRUE;
  }
  
  if(mote2 == -1) {
    brev_lasa(textId);
  }
  else {
    conf = getmotpek(mote2);
    if(conf == NULL) {
      LogEvent(SYSTEM_LOG, ERROR,
               "Can't find conference %d in memory in Cmd_Read().", mote2);
      DisplayInternalError();
      return;
    }
    if(conf->type == MOTE_ORGINAL) {
      org_lasa(textId, verbose);
    } else if(conf->type == MOTE_FIDO) {
      fido_lasa(textId,conf);
    }
  }
}
Пример #15
0
void vilka(void) {
	int x,verbose=FALSE;
	long timenow, idle;
	struct Mote *motpek;
	char namn[50],bps[15];
	if(argument[0]) {
		if(argument[0] == '-' && (argument[1] == 'v' || argument[1] == 'V')) verbose = TRUE;
	}
	puttekn("\r\n\n",-1);
	timenow = time(NULL);
	for(x=0;x<MAXNOD;x++) {
		if(!Servermem->nodtyp[x]) continue;
		if(Servermem->inloggad[x] == -1) strcpy(namn,"<Ingen inloggad>");
		else if(Servermem->inloggad[x] == -2) strcpy(namn,"<Uppringd>");
		else strcpy(namn,getusername(Servermem->inloggad[x]));
		if(Servermem->nodtyp[x]==NODCON) sprintf(outbuffer,"Nod #%-2d CON %-20s %s\n\r",x,Servermem->nodid[x],namn);
		else if(Servermem->nodtyp[x]==NODSER) sprintf(outbuffer,"Nod #%-2d SER %-20s %s\n\r",x,Servermem->nodid[x],namn);
		else sprintf(outbuffer,"Nod #%-2d FOO %-20s %s\n\r",x,Servermem->nodid[x],namn);
		puttekn(outbuffer,-1);
		if(!verbose) continue;
		idle = timenow - Servermem->idletime[x];
		if(Servermem->inloggad[x] == -1 || Servermem->inloggad[x] == -2)
		{
/*			eka('\n');
			continue; */

			if(Servermem->inloggad[x] == -2)
				sprintf(bps,"Bps: %-7d%15d:%02d %c\r\n\n",Servermem->connectbps[x],idle/3600,(idle%3600)/60,Servermem->say[x] ? '*' : ' ');
			else
				sprintf(bps,"Bps: -      %15d:%02d %c\r\n\n",idle/3600,(idle%3600)/60,Servermem->say[x] ? '*' : ' ');

			puttekn(bps,-1);
			continue;
		}
		if(Servermem->nodtyp[x]==NODCON)
			sprintf(bps,"Bps: -      %15d:%02d %c",idle/3600,(idle%3600)/60,Servermem->say[x] ? '*' : ' ');
		else sprintf(bps,"Bps: %-7d%15d:%02d %c",Servermem->connectbps[x],idle/3600,(idle%3600)/60,Servermem->say[x] ? '*' : ' ');
		switch(Servermem->action[x]) {
			case INGET :
				sprintf(outbuffer,"%-32s Har inga olästa texter\r\n\n",bps);
				break;
			case SKRIVER :
				if(Servermem->varmote[x]!=-1) {
					motpek=getmotpek(Servermem->varmote[x]);
					if(!motpek) continue;
					if(!MaySeeConf(motpek->nummer, inloggad, &Servermem->inne[nodnr]))
						sprintf(outbuffer,"%-32s Skriver en text\r\n\n",bps);
					else sprintf(outbuffer,"%-32s Skriver i %s\r\n\n",bps,motpek->namn);
				} else sprintf(outbuffer,"%-32s Skriver ett brev\r\n\n",bps);
				break;
			case LASER :
				if(Servermem->varmote[x]!=-1) {
					motpek=getmotpek(Servermem->varmote[x]);
					if(!motpek) continue;
					if(!MaySeeConf(motpek->nummer, inloggad, &Servermem->inne[nodnr]))
						sprintf(outbuffer,"%-32s Läser texter\r\n",bps);
					else sprintf(outbuffer,"%-32s Läser i %s\r\n",bps,motpek->namn);
				} else sprintf(outbuffer,"%-32s Läser i %s\r\n",bps,Servermem->cfg.brevnamn);
				break;
			case GORNGTANNAT :
				sprintf(outbuffer,"%-32s %s\r\n",bps,Servermem->vilkastr[x]);
				break;
			case UPLOAD :
				if(!Servermem->areor[Servermem->varmote[x]].namn[0] || !arearatt(Servermem->varmote[x], inloggad, &Servermem->inne[nodnr]))
					sprintf(outbuffer,"%-32s Laddar upp\r\n",bps);
				else {
					if(Servermem->vilkastr[x]) sprintf(outbuffer,"%-32s Laddar upp %s\r\n",bps,Servermem->vilkastr[x]);
					else sprintf(outbuffer,"%-32s Ska strax ladda upp en fil\r\n",bps);
				}
				break;
			case DOWNLOAD :
				if(!Servermem->areor[Servermem->varmote[x]].namn[0] || !arearatt(Servermem->varmote[x], inloggad, &Servermem->inne[nodnr]))
					sprintf(outbuffer,"%-32s Laddar ner\r\n",bps);
				else {
					if(Servermem->vilkastr[x]) sprintf(outbuffer,"%-32s Laddar ner %s\r\n",bps,Servermem->vilkastr[x]);
					else sprintf(outbuffer,"%-32s Ska strax ladda ner en fil\r\n",bps);
				}
				break;
			default :
				sprintf(outbuffer,"%-32s <Gör något odefinierat>\r\n",bps);
				break;
		}
		if(Servermem->CallerID[x])
		{
			strcat(outbuffer, Servermem->CallerID[x]);
			strcat(outbuffer, "\r\n");
		}

		strcat(outbuffer, "\n");
		puttekn(outbuffer,-1);
	}
}
Пример #16
0
int andmot(void) {
	int motnr,going=TRUE,tillf,chng=FALSE,y,mad,clearmed,setratt,changed,x;
	struct ShortUser *userletpek;
	struct FidoDomain *domain;
	struct User skuser;
	struct Mote tempmote,*motpek;
	char tkn;
	if((motnr=parsemot(argument))==-1) {
		puttekn("\r\n\nFinns inget möte som heter så!\r\n\n",-1);
		return(0);
	} else if(motnr==-3) {
		puttekn("\r\n\nSkriv: Ändra Möte <mötesnamn>\r\n\n",-1);
		return(0);
	}
	motpek=getmotpek(motnr);
	if(!MayAdminConf(motnr, inloggad, &Servermem->inne[nodnr])) {
		puttekn("\r\n\nDu har ingen rätt att ändra på det mötet!\r\n\n",-1);
		return(0);
	}
	memcpy(&tempmote,motpek,sizeof(struct Mote));
	while(going) {
		sprintf(outbuffer,"\r\nNamn : (%s) ",tempmote.namn);
		puttekn(outbuffer,-1);
		if(getstring(EKO,40,NULL)) return(1);
		if(inmat[0]) {
			if((tillf=parsemot(inmat))!=-1 && tillf!=motnr) puttekn("\r\n\nMötet finns redan!\r\n",-1);
			else {
				strncpy(tempmote.namn,inmat,40);
				tempmote.namn[40] = 0;
				going=FALSE;
			}
		} else going=FALSE;
	}
	sprintf(outbuffer,"\r\nMAD (%s) ",getusername(tempmote.mad));
	puttekn(outbuffer,-1);
	if(getstring(EKO,40,NULL)) return(1);
	if(inmat[0]) {
		if((mad=parsenamn(inmat))==-1) puttekn("\r\nFinns ingen sådan användare!",-1);
		else tempmote.mad=mad;
	}
	sprintf(outbuffer,"\r\nSorteringsvärde : (%d) ",tempmote.sortpri);
	puttekn(outbuffer,-1);
	if(getstring(EKO,10,NULL)) return(1);
	if(inmat[0]) {
		tillf=atoi(inmat);
		if(tillf<0 || tillf>LONG_MAX) {
			sprintf(outbuffer,"\n\rVärdet måste ligga mellan 0 och %d",LONG_MAX);
			puttekn(outbuffer,-1);
		}
		else tempmote.sortpri=tillf;
	}
	puttekn("\r\nSka mötet vara slutet? ",-1);
	if(!jaellernej('j','n',tempmote.status & SLUTET ? 1 : 2)) {
		puttekn("Öppet",-1);
		if(tempmote.status & SLUTET) {
			chng=TRUE;
			tempmote.status &= ~SLUTET;
		}
	} else {
		puttekn("Slutet",-1);
		if(!(tempmote.status & SLUTET)) {
			chng=TRUE;
			tempmote.status |= SLUTET;
		}
		puttekn("\r\nVilka grupper ska ha tillgång till mötet? (? för lista)\r\n",-1);
		if(editgrupp((char *)&tempmote.grupper)) return(1);
	}
	puttekn("\r\nSka mötet vara skrivskyddat? ",-1);
	if(!jaellernej('j','n',tempmote.status & SKRIVSKYDD ? 1 : 2)) {
		puttekn("Oskyddat",-1);
		tempmote.status &= ~SKRIVSKYDD;
	} else {
		tempmote.status |= SKRIVSKYDD;
		puttekn("Skyddat",-1);
	}
	puttekn("\r\nSka mötet vara kommentarsskyddat? ",-1);
	if(!jaellernej('j','n',tempmote.status & KOMSKYDD ? 1 : 2)) {
		puttekn("Oskyddat",-1);
		tempmote.status &= ~KOMSKYDD;
	} else {
		tempmote.status |= KOMSKYDD;
		puttekn("Skyddat",-1);
	}
	puttekn("\r\nSka mötet vara hemligt? ",-1);
	if(!jaellernej('j','n',tempmote.status & HEMLIGT ? 1 : 2)) {
		puttekn("Ej hemligt",-1);
		tempmote.status &= ~HEMLIGT;
	} else {
		tempmote.status |= HEMLIGT;
		puttekn("Hemligt",-1);
	}
	if(!(tempmote.status & SLUTET)) {
		puttekn("\n\rSka alla användare bli medlemmar automagiskt? ",-1);
		if(!jaellernej('j','n',tempmote.status & AUTOMEDLEM ? 1 : 2)) {
			puttekn("Nej",-1);
			if(tempmote.status & AUTOMEDLEM) {
				chng=TRUE;
				tempmote.status &= ~AUTOMEDLEM;
			}
		} else {
			puttekn("Ja",-1);
			tempmote.status |= AUTOMEDLEM;
		}
		puttekn("\r\nSka rättigheterna styra skrivmöjlighet? ",-1);
		if(!jaellernej('j','n',tempmote.status & SKRIVSTYRT ? 1 : 2)) {
			puttekn("Nej",-1);
			if(tempmote.status & SKRIVSTYRT) chng=TRUE;
			tempmote.status &= ~SKRIVSTYRT;
		} else {
			puttekn("Ja",-1);
			if(!(tempmote.status & SKRIVSTYRT)) chng=TRUE;
			tempmote.status |= SKRIVSTYRT;
			puttekn("\r\nVilka grupper ska ha tillgång till mötet? (? för lista)\r\n",-1);
			if(editgrupp((char *)&tempmote.grupper)) return(1);
		}
	} else tempmote.status &= ~(AUTOMEDLEM | SKRIVSTYRT);
	puttekn("\r\nSka mötet bara vara åtkomligt från ARexx? ",-1);
	if(!jaellernej('j','n',tempmote.status & SUPERHEMLIGT ? 1 : 2)) {
		puttekn("Nej",-1);
		tempmote.status &= ~SUPERHEMLIGT;
	} else {
		tempmote.status |= SUPERHEMLIGT;
		puttekn("Ja",-1);
	}
	if(tempmote.type == MOTE_FIDO) {
		sprintf(outbuffer,"\n\rKatalog: (%s) ",tempmote.dir);
		puttekn(outbuffer,-1);
		getstring(EKO,79,NULL);
		if(inmat[0]) strcpy(tempmote.dir,inmat);
		sprintf(outbuffer,"\n\rTag-namn: (%s) ",tempmote.tagnamn);
		puttekn(outbuffer,-1);
		getstring(EKO,49,NULL);
		if(inmat[0]) strcpy(tempmote.tagnamn,inmat);
		sprintf(outbuffer,"\n\rOrigin: (%s) ",tempmote.origin);
		puttekn(outbuffer,-1);
		getstring(EKO,69,NULL);
		if(inmat[0]) strcpy(tempmote.origin,inmat);
		sprintf(outbuffer,"\n\n\r%c1: ISO Latin 1 (ISO 8859-1)\n\r",tempmote.charset==CHRS_LATIN1 ? '*' : ' ');
		puttekn(outbuffer,-1);
		sprintf(outbuffer,"%c2: SIS-7 (SF7, 'Måsvingar')\n\r",tempmote.charset==CHRS_SIS7 ? '*' : ' ');
		puttekn(outbuffer,-1);
		sprintf(outbuffer,"%c3: IBM CodePage\n\r",tempmote.charset==CHRS_CP437 ? '*' : ' ');
		puttekn(outbuffer,-1);
		sprintf(outbuffer,"%c4: Mac\n\n\r",tempmote.charset==CHRS_MAC ? '*' : ' ');
		puttekn(outbuffer,-1);
		puttekn("Val: ",-1);
		for(;;) {
			tkn=gettekn();
			if(tkn=='1' || tkn=='2' || tkn=='3' || tkn=='4' || tkn=='\r') break;
		}
		switch(tkn) {
			case '1' : tempmote.charset = CHRS_LATIN1; break;
			case '2' : tempmote.charset = CHRS_SIS7; break;
			case '3' : tempmote.charset = CHRS_CP437; break;
			case '4' : tempmote.charset = CHRS_MAC; break;
			default: break;
		}
		puttekn("\n\n\r",-1);
		for(x=0;x<10;x++) {
			if(!Servermem->fidodata.fd[x].domain[0]) break;
			sprintf(outbuffer,"%c%3d: %s (%d:%d/%d.%d)\n\r",tempmote.domain == Servermem->fidodata.fd[x].nummer ? '*' : ' ',
			                                             Servermem->fidodata.fd[x].nummer,
			                                             Servermem->fidodata.fd[x].domain,
			                                             Servermem->fidodata.fd[x].zone,
			                                             Servermem->fidodata.fd[x].net,
			                                             Servermem->fidodata.fd[x].node,
			                                             Servermem->fidodata.fd[x].point);
			puttekn(outbuffer,-1);
		}
		if(!x) {
			puttekn("\n\rDu måste definiera en domän i NiKomFido.cfg först!\n\r",-1);
			return(0);
		}
		for(;;) {
			if(getstring(EKO,10,NULL)) return(1);
			if(!inmat[0]) break;
			if(domain=getfidodomain(atoi(inmat),0)) {
				tempmote.domain=domain->nummer;
				break;
			} else puttekn("\n\rFinns ingen sådan domän.\n\r",-1);
		}
	}


	puttekn("\r\n\nÄr allt korrekt? ",-1);
	if(jaellernej('j','n',1)) puttekn("Ja\n\n\r",-1);
	else {
		puttekn("Nej\r\n\n",-1);
		return(0);
	}
	if(chng) {
		puttekn("Users.dat kommer nu att gås igenom för att nollställa medlemskap\n\r",-1);
		puttekn("och rättigheter som om mötet var nyskapat.\n\n\r",-1);
		puttekn("Är ändringarna fortfarande korrekta? ",-1);
		if(!jaellernej('j','n',1)) {
			puttekn("Nej\n\r",-1);
			return(0);
		}
		puttekn("Ja\n\r",-1);
	}
	memcpy(motpek,&tempmote,sizeof(struct Mote));
	writemeet(motpek);
	if(!chng) return(0);
	if((tempmote.status & AUTOMEDLEM) && !(tempmote.status & SKRIVSTYRT)) return(0);
	if(tempmote.status & SUPERHEMLIGT) return(0);
	if(tempmote.status & AUTOMEDLEM) clearmed=FALSE;
	else clearmed=TRUE;
	if(tempmote.status & (SLUTET | SKRIVSTYRT)) setratt=FALSE;
	else setratt=TRUE;
	for(y=0;y<MAXNOD;y++) {
		BAMCLEAR(Servermem->inne[y].motmed,tempmote.nummer);
		if(setratt) BAMSET(Servermem->inne[y].motratt,tempmote.nummer);
		else BAMCLEAR(Servermem->inne[y].motratt,tempmote.nummer);
	}
	puttekn("\r\nÄndrar i Users.dat..\r\n",-1);
	for(userletpek=(struct ShortUser *)Servermem->user_list.mlh_Head;userletpek->user_node.mln_Succ;userletpek=(struct ShortUser *)userletpek->user_node.mln_Succ) {
		if(!(userletpek->nummer%10)) {
			sprintf(outbuffer,"\r%d",userletpek->nummer);
			puttekn(outbuffer,-1);
		}
		if(readuser(userletpek->nummer,&skuser)) return(0);
		changed=FALSE;
		if(setratt!=BAMTEST(skuser.motratt,tempmote.nummer)) {
			if(setratt) BAMSET(skuser.motratt,tempmote.nummer);
			else BAMCLEAR(skuser.motratt,tempmote.nummer);
			changed=TRUE;
		}
		if(clearmed && BAMTEST(skuser.motmed,tempmote.nummer)) {
			BAMCLEAR(skuser.motmed,tempmote.nummer);
			changed=TRUE;
		}
		if(changed && writeuser(userletpek->nummer,&skuser)) return(0);

	}
	for(y=0;y<MAXNOD;y++) {
		BAMCLEAR(Servermem->inne[y].motmed,tempmote.nummer);
		if(setratt) BAMSET(Servermem->inne[y].motratt,tempmote.nummer);
		else BAMCLEAR(Servermem->inne[y].motratt,tempmote.nummer);
	}
	BAMSET(Servermem->inne[nodnr].motratt,tempmote.nummer);
	BAMSET(Servermem->inne[nodnr].motmed,tempmote.nummer);
	return(0);
}
Пример #17
0
int skapmot(void) {
    struct ShortUser *shortUser;
    int mad, setPermission, changed, ch, i, fidoDomainId, highestId;
    struct FidoDomain *fidoDomain;
    BPTR lock;
    struct User user;
    struct Mote tmpConf,*searchConf,*newConf;

    memset(&tmpConf, 0, sizeof(struct Mote));
    if(argument[0] == '\0') {
        SendString("\r\n\nNamn på mötet: ");
        if(GetString(40,NULL)) {
            return 1;
        }
        strcpy(tmpConf.namn, inmat);
    } else {
        strcpy(tmpConf.namn, argument);
    }
    if(parsemot(tmpConf.namn) != -1) {
        SendString("\r\n\nFinns redan ett sådant möte!\r\n");
        return 0;
    }
    tmpConf.skapat_tid = time(NULL);;
    tmpConf.skapat_av = inloggad;
    for(;;) {
        SendString("\r\nMötesAdministratör (MAD) : ");
        if(GetString(5,NULL)) {
            return 1;
        }
        if(inmat[0]) {
            if((mad = parsenamn(inmat)) == -1) {
                SendString("\r\nFinns ingen sådan användare!");
            } else {
                tmpConf.mad = mad;
                break;
            }
        }
    }
    SendString("\n\rSorteringsvärde: ");
    tmpConf.sortpri = GetNumber(0, LONG_MAX, NULL);

    if(EditBitFlagShort("\r\nSka mötet vara slutet?", 'j', 'n', "Slutet", "Öppet",
                        &tmpConf.status, SLUTET)) {
        return 1;
    }
    if(tmpConf.status & SLUTET) {
        SendString("\r\nVilka grupper ska ha tillgång till mötet? (? för lista)\r\n");
        if(editgrupp((char *)&tmpConf.grupper)) {
            return 1;
        }
    }
    if(EditBitFlagShort("\r\nSka mötet vara skrivskyddat?", 'j', 'n',
                        "Skyddat", "Oskyddat", &tmpConf.status, SKRIVSKYDD)) {
        return 1;
    }
    if(EditBitFlagShort("\r\nSka mötet vara kommentarsskyddat?", 'j', 'n',
                        "Skyddat", "Oskyddat", &tmpConf.status, KOMSKYDD)) {
        return 1;
    }
    if(EditBitFlagShort("\r\nSka mötet vara hemligt?", 'j', 'n',
                        "Hemligt", "Ej hemligt", &tmpConf.status, HEMLIGT)) {
        return 1;
    }
    if(!(tmpConf.status & SLUTET)) {
        if(EditBitFlagShort("\r\nSka alla användare bli medlemmar automagiskt?", 'j', 'n',
                            "Ja", "Nej", &tmpConf.status, AUTOMEDLEM)) {
            return 1;
        }
        if(EditBitFlagShort("\r\nSka rättigheterna styra skrivmöjlighet?", 'j', 'n',
                            "Ja", "Nej", &tmpConf.status, SKRIVSTYRT)) {
            return 1;
        }
        if(tmpConf.status & SKRIVSTYRT) {
            SendString("\r\nVilka grupper ska ha tillgång till mötet? (? för lista)\r\n");
            if(editgrupp((char *)&tmpConf.grupper)) {
                return 1;
            }
        }
    }
    if(EditBitFlagShort("\r\nSka mötet enbart kommas åt från ARexx?", 'j', 'n',
                        "Ja", "Nej", &tmpConf.status, SUPERHEMLIGT)) {
        return 1;
    }

    SendString("\n\n\rVilken typ av möte ska det vara?\n\r");
    SendString("1: Lokalt möte\n\r");
    SendString("2: Fido-möte\n\n\r");
    SendString("Val: ");
    for(;;) {
        ch = GetChar();
        if(ch == GETCHAR_LOGOUT) {
            return 1;
        }
        if(ch == '1' || ch == '2') {
            break;
        }
    }
    if(ch == '1') {
        SendString("Lokalt möte\n\n\r");
        tmpConf.type = MOTE_ORGINAL;
    } else {
        SendString("Fido-möte\n\n\r");
        tmpConf.type = MOTE_FIDO;
        if(EditString("Katalog for .msg-filerna", tmpConf.dir, 79, TRUE)) {
            return 1;
        }
        if(!(lock = Lock(tmpConf.dir, SHARED_LOCK))) {
            if(!(lock = CreateDir(tmpConf.dir)))
                SendString("\n\rKunde inte skapa katalogen\n\r");
        }
        if(lock) {
            UnLock(lock);
        }
        if(EditString("FidoNet tag-namn", tmpConf.tagnamn, 49, TRUE)) {
            return 1;
        }
        strcpy(tmpConf.origin, Servermem->fidodata.defaultorigin);
        if(MaybeEditString("Origin-rad", tmpConf.origin, 69)) {
            return 1;
        }

        SendString("\n\n\rVilken teckenuppsättning ska användas för utgående texter?\n\r");
        SendString("1: ISO Latin 1 (ISO 8859-1)\n\r");
        SendString("2: SIS-7 (SF7, 'Måsvingar')\n\r");
        SendString("3: IBM CodePage\n\r");
        SendString("4: Mac\n\n\r");
        SendString("Val: ");
        for(;;) {
            ch = GetChar();
            if(ch == GETCHAR_LOGOUT) {
                return 1;
            }
            if(ch == '1' || ch == '2' || ch == '3' || ch == '4') {
                break;
            }
        }
        switch(ch) {
        case '1':
            SendString("ISO Latin 1\n\n\r");
            tmpConf.charset = CHRS_LATIN1;
            break;
        case '2':
            SendString("SIS-7\n\n\r");
            tmpConf.charset = CHRS_SIS7;
            break;
        case '3':
            SendString("IBM CodePage\n\n\r");
            tmpConf.charset = CHRS_CP437;
            break;
        case '4':
            SendString("Mac\n\n\r");
            tmpConf.charset = CHRS_MAC;
            break;
        }
        SendString("Vilken domän är mötet i?\n\r");
        highestId = 0;
        for(i = 0; i < 10; i++) {
            if(!Servermem->fidodata.fd[i].domain[0]) {
                break;
            }
            highestId = max(highestId, Servermem->fidodata.fd[i].nummer);
            SendString("%3d: %s (%d:%d/%d.%d)\n\r",
                       Servermem->fidodata.fd[i].nummer,
                       Servermem->fidodata.fd[i].domain,
                       Servermem->fidodata.fd[i].zone,
                       Servermem->fidodata.fd[i].net,
                       Servermem->fidodata.fd[i].node,
                       Servermem->fidodata.fd[i].point);
        }
        if(i == 0) {
            SendString("\n\rDu måste definiera en domän i NiKomFido.cfg först!\n\r");
            return 0;
        }
        for(;;) {
            SendString("\r\nDomän: ");
            if(GetString(5, NULL)) {
                return 1;
            }
            fidoDomainId = atoi(inmat);
            if(fidoDomain = getfidodomain(fidoDomainId, 0)) {
                break;
            } else {
                SendString("\n\rFinns ingen sådan domän.\n\r");
            }
        }
        tmpConf.domain = fidoDomain->nummer;
        SendString("%s\n\n\r", fidoDomain->domain);
    }
    for(i = 0; i < MAXMOTE; i++) {
        if(getmotpek(i) == NULL) {
            break;
        }
    }
    if(i >= MAXMOTE) {
        SendString("\n\n\rDet finns inte plats för fler möten.\n\r");
        return 0;
    }
    tmpConf.nummer = i;
    if(!(newConf = (struct Mote *)AllocMem(sizeof(struct Mote),
                                           MEMF_CLEAR | MEMF_PUBLIC))) {
        LogEvent(SYSTEM_LOG, ERROR, "Could not allocate %d bytes.", sizeof(struct Mote));
        DisplayInternalError();
        return 0;
    }
    memcpy(newConf, &tmpConf, sizeof(struct Mote));
    ITER_EL(searchConf, Servermem->mot_list, mot_node, struct Mote *) {
        if(searchConf->sortpri > newConf->sortpri) {
            break;
        }
    }

    searchConf = (struct Mote *)searchConf->mot_node.mln_Pred;
    Insert((struct List *)&Servermem->mot_list, (struct Node *)newConf,
           (struct Node *)searchConf);
    writemeet(newConf);

    if((newConf->status & AUTOMEDLEM) && !(newConf->status & SKRIVSTYRT)) {
        return 0;
    }
    if(newConf->status & SUPERHEMLIGT) {
        return 0;
    }

    setPermission = (newConf->status & (SLUTET | SKRIVSTYRT)) ? FALSE : TRUE;
    for(i = 0; i < MAXNOD; i++) {
        BAMCLEAR(Servermem->inne[i].motmed, newConf->nummer);
        if(setPermission) {
            BAMSET(Servermem->inne[i].motratt, newConf->nummer);
        } else {
            BAMCLEAR(Servermem->inne[i].motratt, newConf->nummer);
        }
    }

    SendString("\r\nÄndrar i användardata..\r\n");
    ITER_EL(shortUser, Servermem->user_list, user_node, struct ShortUser *) {
        if(!(shortUser->nummer % 10)) {
            SendString("\r%d", shortUser->nummer);
        }
        if(readuser(shortUser->nummer, &user)) {
            LogEvent(SYSTEM_LOG, ERROR, "Could not read user %d to set "
                     "membership/permissions for new conference.", shortUser->nummer);
            DisplayInternalError();
            return 0;
        }
        changed = FALSE;
        if(setPermission != BAMTEST(user.motratt, newConf->nummer)) {
            if(setPermission) {
                BAMSET(user.motratt, newConf->nummer);
            } else {
                BAMCLEAR(user.motratt, newConf->nummer);
            }
            changed = TRUE;
        }
        if(!(newConf->status & AUTOMEDLEM) && BAMTEST(user.motmed, newConf->nummer)) {
            BAMCLEAR(user.motmed, newConf->nummer);
            changed = TRUE;
        }
        if(changed && writeuser(shortUser->nummer, &user)) {
            LogEvent(SYSTEM_LOG, ERROR, "Could not write user %d to set "
                     "membership/permissions for new conference.", shortUser->nummer);
            DisplayInternalError();
            return 0;
        }

    }
    for(i = 0; i < MAXNOD; i++) {
        BAMCLEAR(Servermem->inne[i].motmed, newConf->nummer);
        if(setPermission) {
            BAMSET(Servermem->inne[i].motratt, newConf->nummer);
        } else {
            BAMCLEAR(Servermem->inne[i].motratt, newConf->nummer);
        }
    }
    BAMSET(Servermem->inne[nodnr].motratt, newConf->nummer);
    BAMSET(Servermem->inne[nodnr].motmed, newConf->nummer);
    if(newConf->type == MOTE_FIDO) {
        ReScanFidoConf(newConf, 0);
    }
    return 0;
}
Пример #18
0
char *getmotnamn(int motnr) {
	struct Mote *motpek=getmotpek(motnr);
	if(!motpek) return("<Okänt möte>");
	return(motpek->namn);
}
Пример #19
0
void Cmd_Reply(void) {
  struct Mote *conf;
  int isCorrect;

  if(argument[0]) {
    if(mote2 == -1) {
      brev_kommentera();
      return;
    }
    conf = getmotpek(mote2);
    if(conf->type == MOTE_ORGINAL) {
      org_kommentera();
      return;
    }
    if(conf->type == MOTE_FIDO) {
      if(!MayReplyConf(mote2, inloggad, &Servermem->inne[nodnr])) {
        SendString("\r\n\nDu får inte kommentera den texten!\r\n\n");
        return;
      }
      if(conf->status & KOMSKYDD) {
        if(GetYesOrNo("\r\n\n", "Vill du verkligen kommentera i ett kommentarsskyddat möte?",
                      NULL, NULL, "Ja", "Nej", "\r\n", FALSE, &isCorrect)) {
          return;
        }
        if(!isCorrect) {
          return;
        }
      }
      fido_skriv(TEXTTYPE_REPLY, atoi(argument));
      return;
    }
  }

  if(!senast_text_typ) {
    SendString("\n\n\rDu har inte läst någon text ännu.\n\r");
    return;
  }
  if(senast_text_typ == BREV) {
    brev_kommentera();
    return;
  }
  conf = getmotpek(senast_text_mote);
  if(!conf) {
    LogEvent(SYSTEM_LOG, ERROR,
             "Conference for last read text (confId = %d) does not exist.",
             senast_text_mote);
    DisplayInternalError();
    return;
  }
  if(!MayReplyConf(senast_text_mote, inloggad, &Servermem->inne[nodnr])) {
    SendString("\r\n\nDu får inte kommentera den texten!\r\n\n");
    return;
  }
  if(conf->status & KOMSKYDD) {
    if(GetYesOrNo("\r\n\n", "Vill du verkligen kommentera i ett kommentarsskyddat möte?",
                  NULL, NULL, "Ja", "Nej", "\r\n", FALSE, &isCorrect)) {
      return;
    }
    if(!isCorrect) {
      return;
    }
  }
  if(conf->type == MOTE_ORGINAL) {
    org_kommentera();
  } else if(conf->type == MOTE_FIDO) {
    fido_skriv(TEXTTYPE_REPLY, senast_text_nr);
  }
}