home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume35 / mbox / part08 < prev    next >
Text File  |  1993-02-05  |  55KB  |  2,342 lines

  1. Newsgroups: comp.sources.misc
  2. From: Volker.Schuermann@unnet.w.open.de (Volker Schuermann)
  3. Subject: v35i043:  mbox - ix/Mbox, A BBS for UNIX and MINIX v1.6 PL10j7, Part08/15
  4. Message-ID: <1993Feb5.185757.10404@sparky.imd.sterling.com>
  5. X-Md4-Signature: 885adf7a06236cec7ead855067199abc
  6. Date: Fri, 5 Feb 1993 18:57:57 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: Volker.Schuermann@unnet.w.open.de (Volker Schuermann)
  10. Posting-number: Volume 35, Issue 43
  11. Archive-name: mbox/part08
  12. Environment: MINIX, ISC, ESIX, SVR3
  13. Supersedes: mbox: Volume 31, Issue 16-27
  14.  
  15. #! /bin/sh
  16. # This is a shell archive.  Remove anything before this line, then feed it
  17. # into a shell via "sh file" or similar.  To overwrite existing files,
  18. # type "sh file -c".
  19. # Contents:  src/misc2.c src/pd.c wendy/ctrl.c
  20. # Wrapped by kent@sparky on Fri Feb  5 12:18:10 1993
  21. PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
  22. echo If this archive is complete, you will see the following message:
  23. echo '          "shar: End of archive 8 (of 15)."'
  24. if test -f 'src/misc2.c' -a "${1}" != "-c" ; then 
  25.   echo shar: Will not clobber existing file \"'src/misc2.c'\"
  26. else
  27.   echo shar: Extracting \"'src/misc2.c'\" \(11618 characters\)
  28.   sed "s/^X//" >'src/misc2.c' <<'END_OF_FILE'
  29. X/***************************************************************************/
  30. X/*        PROGRAMM  ix/Mbox                           */
  31. X/*             DATEI  misc2.c                           */
  32. X/*        FUNKTIONEN  chk_newsgrp(), subb(), loeschen(), brett()        */
  33. X/*              fetch_reciepy()                       */
  34. X/*             AUTOR  vs (Volker Schuermann/MINIX-Version)           */
  35. X/*  LETZTE AENDERUNG  11.06.1992                       */
  36. X/***************************************************************************/
  37. X
  38. X#include <stdio.h>
  39. X
  40. X#include "mbox.h"
  41. X
  42. X
  43. X
  44. X
  45. X
  46. X/***************************************************************************/
  47. X/*      FUNKTION  chk_newsgrp()                           */
  48. X/*  BESCHREIBUNG  Stellt fest, ob ein Benutzer die angefragt NG betreten   */
  49. X/*          darf.                                                       */
  50. X/*     PARAMETER  s  =  Name der fraglichen NG                   */
  51. X/*     RUECKGABE  -1 =  Kein Zugang/Zugriff :-(                            */
  52. X/*                 1 =  Zugang erlaubt :-)                    */
  53. X/***************************************************************************/
  54. X
  55. Xint chk_newsgrp( s )
  56. Xunsigned char s[];
  57. X{
  58. X  int i = 1, ok = -1;
  59. X
  60. X  while ((i < MAX_NEWSGRPS) && (newsgrp[i][0] != '\0') && (ok == -1)) {
  61. X    if (strcomp(newsgrp[i], s) == 0) ok = 0;
  62. X    if (strcomp(newsgrp[i], "all") == 0) ok = 0;
  63. X    i++;
  64. X  }
  65. X
  66. X  return ok;
  67. X}
  68. X
  69. X
  70. X
  71. X
  72. X/***************************************************************************/
  73. X/*      FUNKTION  subb()                           */
  74. X/*  BESCHREIBUNG  Ist die angefragte NG eine Unter-NG, oder ein kompletter */
  75. X/*          Pfad ??                                                  */
  76. X/*     PARAMETER  s  =  Name der NG                         |              */
  77. X/*     RUECKGABE  0  =  Unter-NG (z.B. minix)               v              */
  78. X/*          n  =  Erste Obergruppe endet bei 'n' (comp.os.minix)     */
  79. X/***************************************************************************/
  80. X
  81. Xint subb(s)
  82. Xunsigned char s[];
  83. X{
  84. X  int a = 0, i = 0;
  85. X
  86. X  while (s[i] != '\0') {
  87. X    if ((s[i] == '.') && (a == 0)) a = i;
  88. X    i++;
  89. X  }
  90. X  return a;
  91. X}
  92. X
  93. X
  94. X
  95. X
  96. X/***************************************************************************/
  97. X/*      FUNKTION  loeschen()                           */
  98. X/*  BESCHREIBUNG  Gezielt einen persoenliche Mail loeschen.           */
  99. X/*     PARAMETER  arg  =  Nummer der Mail                                  */
  100. X/*     RUECKGABE  keine                                                       */
  101. X/***************************************************************************/
  102. X
  103. Xvoid loeschen(arg)
  104. Xunsigned char arg[];
  105. X{
  106. X  FILE *fp;
  107. X  FILE *ff;
  108. X  unsigned char s[STRING];
  109. X  unsigned char entry[STRING];
  110. X  unsigned char index[STRING];
  111. X  unsigned char t[STRING];
  112. X  unsigned char ex[255];
  113. X  unsigned char c;
  114. X  int i, a = atoi(arg);
  115. X  int ok;
  116. X
  117. X
  118. X  if ((arg[0] < '1') || (arg[0] > '9')) {
  119. X    ansi("md");
  120. X    printf(" %s\n", MI201_MSG);
  121. X    ansi("me");
  122. X    return;
  123. X  }
  124. X  if (strcomp(BRETT, "PM") != 0) {
  125. X    if(arg[0] < 33) return;
  126. X    if(USER.level < ADMIN_LEV){
  127. X        ansi("md");
  128. X        printf(" %s %d ...\n", MI202_MSG, USER.level);
  129. X        ansi("me");
  130. X    }
  131. X    else{
  132. X        sprintf(entry, "%s/%s", BRETT, arg);
  133. X        unlink(entry);
  134. X        printf("\n\n%s\n", MI203_MSG);        
  135. X        sprintf(entry, "%s %s -X", MB_DAEMON, NG);
  136. X        system(entry);
  137. X    }
  138. X    return;
  139. X  }
  140. X
  141. X  if(USER.level == GUEST_LEV){
  142. X    return;
  143. X  }
  144. X
  145. X  sprintf(entry, "%s/usr/%d/%s", HOME, USER.id, arg);
  146. X  sprintf(index, "%s/usr/%d/INDEX", HOME, USER.id);
  147. X
  148. X  sprintf(s, "%s/loe%d", TMP, getpid());
  149. X  ff = fopen(s, "w");
  150. X
  151. X  fp = fopen(index, "r");
  152. X  if (fp == NULL) {
  153. X    nerror("misc2.c", 109, "loeschen", "Datei-Lesefehler", index);
  154. X  }
  155. X  ok = 0;
  156. X
  157. X  while (fgets(ex, 250, fp) != NULL) {
  158. X    if (atoi(ex) != a)
  159. X        fputs(ex, ff);
  160. X    else
  161. X        ok = 1;
  162. X  }
  163. X  fclose(fp);
  164. X  fclose(ff);
  165. X
  166. X  sprintf(t, "cp %s %s", s, index);
  167. X  system(t);
  168. X  unlink(s);
  169. X  unlink(entry);
  170. X}
  171. X
  172. X
  173. X
  174. X/***************************************************************************/
  175. X/*      FUNKTION  brett()                           */
  176. X/*  BESCHREIBUNG  Wechselt das Brett, zeigt Bretter an etc. pp.        */
  177. X/*     PARAMETER  arg  =  '!'     =  Brettername ausgeben           */
  178. X/*          arg  =  ''      =  aktuelle Bretter ausgeben           */
  179. X/*          arg  =  '*'     =  alle Bretter ausgeben               */
  180. X/*          arg  =  '#'     =  Gruppen ausgeben                      */
  181. X/*          arg  =  '..'    =  eine Gruppe zurueck           */
  182. X/*          arg  =  '^'     =  ALLE (!) Bretter ausgeben           */
  183. X/*          arg  = 'Brett'  =  ins Brett 'Brett' wechseln           */
  184. X/*     RUECKGABE  keine                                                       */
  185. X/***************************************************************************/
  186. X
  187. X/*
  188. Xvoid brett(arg)  Compiler Bug ???? 
  189. X*/
  190. Xbrett(arg)
  191. Xunsigned char arg[];
  192. X{
  193. X  FILE *fp;
  194. X  FILE *ff;
  195. X  unsigned char s[STRING];
  196. X  unsigned char o[STRING];
  197. X  int a, b, h;
  198. X  unsigned char t[STRING];
  199. X  unsigned char org[STRING];
  200. X  unsigned char maybe[STRING];
  201. X  int this;
  202. X  int i, j;
  203. X  int subboard = 0;
  204. X  unsigned char c;
  205. X  int plus = 0;
  206. X  int zeile = 0;
  207. X  int swing = 1;  
  208. X  int fpid;
  209. X
  210. X  if (arg[0] == '!') {
  211. X    printf("\n\n");
  212. X    ansi( "md" );
  213. X    printf("%s", MI204_MSG);
  214. X    ansi( "me" );
  215. X    printf(" %s\n", NG);
  216. X    ansi( "md" );
  217. X    printf("%s", MI204aMSG);
  218. X    ansi( "me" );
  219. X    printf(" ");    
  220. X
  221. X    if(strcomp(BRETT, "PM") == 0){
  222. X        printf("%s", MI204bMSG);
  223. X    }
  224. X    else{
  225. X        fp = fopen( NEWSGROUPS, "r" );
  226. X        if(fp == NULL){
  227. X            nerror("misc2.c", 190, "brett", "Datei-Lesefehler", NEWSGROUPS);
  228. X        }
  229. X        h = 0;
  230. X        while((h == 0) && (fgets(s, 80, fp) != NULL)){
  231. X            if(strcomp(NG, s) == 0){
  232. X                a = 0; 
  233. X                while(s[a] > 32) a++;
  234. X                while(s[a] < 32) a++;
  235. X                strcpy(t, (unsigned char *) strcopy(s, a, 80)); 
  236. X                printf("%s", (unsigned char *) stripped(t));
  237. X                h++;
  238. X            }
  239. X        }
  240. X        fclose(fp);
  241. X    }
  242. X    printf("\n");
  243. X    return;
  244. X  }
  245. X  if ((arg[0] == '+') || (arg[0] == '-')) {
  246. X    scanner(arg[0] + 255);
  247. X    return;
  248. X  }
  249. X  if (arg[0] == '\0') {
  250. X    maybe_locked(UGROUPS, "r");
  251. X    fp = fopen(UGROUPS, "r");
  252. X    if (fp == NULL) {
  253. X        nerror("misc2.c", 908, "brett", "Datei-Lesefehler", UGROUPS);
  254. X    }
  255. X    arg[0] = '*';
  256. X  }
  257. X  else {
  258. X    maybe_locked(NGROUPS, "r");
  259. X    fp = fopen(NGROUPS, "r");
  260. X    if (fp == NULL) {
  261. X        nerror("misc2.c", 916, "brett", "Datei-Lesefehler", NGROUPS);
  262. X    }
  263. X  }
  264. X
  265. X
  266. X  org[0] = '\0';
  267. X  strcat(org, arg);
  268. X
  269. X  if (arg[0] == '.') {
  270. X    i = 0;
  271. X    j = 0;
  272. X    strcpy(org, NG);
  273. X    while (org[i] != '\0') {
  274. X        if (org[i] == '.') j = i;
  275. X        i++;
  276. X    }
  277. X    if (j == 0) return;
  278. X    org[j] = '\0';
  279. X  }
  280. X  if (arg[0] == '#') subboard++;
  281. X
  282. X  zeile = 0;
  283. X
  284. X  show(NGROUPS, 99, 99); /* RESET */
  285. X
  286. X  if ((arg[0] == '*') || (arg[0] == '+') || (arg[0] == '#') || (arg[0] == '~') || (arg[0] == '^')) {
  287. X
  288. X    if(arg[0] != '^'){
  289. X        sprintf(s, "%s %d) ", MI205_MSG, USER.level);
  290. X    }
  291. X    else{
  292. X        sprintf(s, "%s 10) ", MI205_MSG);
  293. X    }
  294. X    headline(s);
  295. X    i = 0;
  296. X    strcpy(o, (unsigned char *) "OOPS");
  297. X
  298. X    while (fscanf(fp, "%s %d %d %s", s, &a, &h, t) > 0) {
  299. X#ifdef _CNEWS
  300. X        if(t[0] == '=')     
  301. X            continue; 
  302. X#endif
  303. X        if (arg[0] == '~') {
  304. X            if (strcomp(NG, s) != 0) continue;
  305. X        }
  306. X        if ((strcomp(o, s) != 0) || (subboard == 0)) {
  307. X            if (subboard != 0) {
  308. X                j = subb(s);
  309. X                if (j != 0) s[j] = '\0';
  310. X                o[0] = '\0'; strcat(o, s);
  311. X            }
  312. X            if ((chk_newsgrp(s) == 0) || (arg[0] == '^')){
  313. X                s[((80/USER.schluessel[1]) -2)] = '\0';
  314. X                strcat(s, "                                   ");
  315. X                s[((80/USER.schluessel[1]) -1)] = '\0';
  316. X                printf("%s", s);
  317. X                i++;
  318. X                plus++;
  319. X                if (i == USER.schluessel[1]) {
  320. X                    printf("\n");
  321. X                    i = 0;                
  322. X                    zeile++;
  323. X                    if (zeile >= MAX_SCR_LINES) {
  324. X                        zeile = 0;
  325. X                        if(USER.more != 0){
  326. X                            if (more() != 0) return (int) 1;
  327. X                        }
  328. X                    }
  329. X                }
  330. X            }
  331. X        }
  332. X    }
  333. X    if (plus == 0) {
  334. X        printf("%s", MI206_MSG);
  335. X    }
  336. X    printf("\n");
  337. X  }
  338. X  else {
  339. X    if (org[0] != '\0') {
  340. X
  341. X        SO_WHAT:
  342. X
  343. X        strcpy(o, (unsigned char *) org);
  344. X
  345. X        i = 0;
  346. X        while (org[i] != '\0') {
  347. X            t[i] = org[i];
  348. X            if (t[i] == '.') t[i] = '/';
  349. X            i++;
  350. X        }
  351. X        t[i] = '\0';
  352. X
  353. X        sprintf(s, "%s/%s", NEWS, t);
  354. X
  355. X        if (chdir(s) != 0) {
  356. X            sprintf(o, "%s.%s", NG, org);
  357. X            i = 0;
  358. X            while (o[i] != '\0') {
  359. X                t[i] = o[i];
  360. X                if (t[i] == '.') t[i] = '/';
  361. X                i++;
  362. X            }
  363. X            t[i] = '\0';
  364. X            sprintf(s, "%s/%s", NEWS, t);
  365. X        }
  366. X        if (chdir(s) != 0) {
  367. X            this = 9999;
  368. X            maybe_locked(NGROUPS, "r");
  369. X            ff = fopen(NGROUPS, "r");
  370. X            if (ff == NULL) {
  371. X                nerror("misc2.c", 1001, "brett", "Datei-Lesefehler", NGROUPS);
  372. X            }
  373. X            while (fscanf(ff, "%s %d %d %s", s, &i, &i, t) > 0) {
  374. X                i = strcomp(org, s);
  375. X                if (i < this) {
  376. X                    this = i;
  377. X                    strcpy(maybe, s);
  378. X                }
  379. X            }
  380. X            fclose(ff);
  381. X            
  382. X            strcpy(org, maybe);
  383. X            printf("\n\n");
  384. X            ansi("mr");
  385. X            printf("%s \"%s\" [%c, %c] >", MI207_MSG, maybe, GBL06_MSG, GBL07_MSG);
  386. X            ansi("me");
  387. X
  388. X            c = yesno();
  389. X            
  390. X            if (c != GBL07_MSG) goto SO_WHAT;
  391. X
  392. X            printf("\n");
  393. X        }
  394. X        else {
  395. X
  396. X            if (chk_newsgrp(o) == 0) {
  397. X                strcpy(BRETT, s);
  398. X                printf("\n");
  399. X                sprintf(NG, "%s", o);
  400. X                if(length(o) > 14){
  401. X#ifndef _LONGNAMES
  402. X                    strcpy(o, (unsigned char *) shortname(o));
  403. X#endif
  404. X                }
  405. X#ifdef _NOINDEX
  406. X                printf("\n%s ..", MI211_MSG);
  407. X                switch( (fpid = fork()) ){
  408. X                    case -1 :
  409. X                        break;
  410. X                    case  0 :    while(1){
  411. X                                printf(".");
  412. X                                sleep(1);
  413. X                            }    
  414. X                        break;
  415. X                }
  416. X                sprintf(s, "%s %s -x", MB_DAEMON, NG);
  417. X                system( s );
  418. X                sprintf(s, "mv %s/%s/%s %s/inhalt.%d", HOME, LIB, o, TMP, getpid());
  419. X                system( s );
  420. X                sprintf(INHALT, "%s/inhalt.%d", TMP, getpid());
  421. X                kill( fpid, SIGKILL );
  422. X                (void) wait( &fpid );
  423. X                printf("\n");                
  424. X#else                
  425. X                sprintf(INHALT, "%s/%s", LIB, o);
  426. X#endif
  427. X            } else {
  428. X                ansi("md");
  429. X                printf(" %s\n", MI210_MSG);
  430. X                ansi("me");
  431. X            }
  432. X        }
  433. X        chdir(HOME);
  434. X    }
  435. X  }
  436. X  fclose(fp);
  437. X  return;
  438. X}
  439. X
  440. X
  441. X/***************************************************************************/
  442. X/*      FUNKTION  fetch_receipy()                       */
  443. X/*  BESCHREIBUNG  Im REPLY-Modus wird die Adresse des Empfaengers aus      */
  444. X/*              dessen Mail gefiltert.                                   */
  445. X/*     PARAMETER  REP  =  Datei mit der Mail des zukuenftigen Empfaengers  */
  446. X/*     RUECKGABE  Adresse des Empfaengers                                  */
  447. X/***************************************************************************/
  448. X
  449. Xunsigned char *fetch_reciepy(REP)
  450. Xunsigned char REP[];
  451. X{
  452. X  FILE *fp;
  453. X  unsigned char s[STRING];
  454. X  unsigned char t[STRING];
  455. X  unsigned char f[STRING];
  456. X  int ok = 0, i;
  457. X  int beg = 0;
  458. X  int bang = 0, at = 0, strange = 0, stranger = 0, gate = 0;
  459. X
  460. X  fetch_local = 0;
  461. X  fetch_subj[0] = '\0';
  462. X
  463. X  fp = fopen(REP, "r");
  464. X  if (fp == NULL) {
  465. X    nerror("mail.c", 31, "fetch_reciepy", "Datei_Lesefehler", REP);
  466. X  }
  467. X  while (fgets(f, 80, fp) != NULL) {
  468. X    if (strcomp("From: ", f) == 0) {
  469. X        beg = 6;
  470. X        ok = 1;
  471. X        strcpy(s, f);
  472. X    }
  473. X    if (strcomp("From ", f) == 0) { /* local mail */
  474. X        beg = 5; 
  475. X        ok = 1;
  476. X        strcpy(s, f);
  477. X    }
  478. X    if (strcomp("Reply-To: ", f) == 0) {
  479. X        beg = 10;
  480. X        ok = 1;
  481. X        strcpy(s, f);
  482. X    }
  483. X    if (strcomp("Subject: ", s) == 0) {
  484. X        strcpy(fetch_subj, (unsigned char *) strcopy(s, 9, 79));
  485. X    }
  486. X  }
  487. X  fclose(fp);
  488. X
  489. X  if (ok == 0) {
  490. X    return (unsigned char *) "OOPS";
  491. X  }
  492. X  i = beg;
  493. X  ok = 0;
  494. X
  495. X  while (s[i] != '\0') {
  496. X    if (s[i] == '(') ok = i - 2;
  497. X    if (s[i] == '<') strange = i + 1;
  498. X    if (s[i] == '>') stranger = i - 1;
  499. X    i++;
  500. X  }
  501. X  if (ok == 0) ok = i;
  502. X  strcpy(t, (unsigned char *) strcopy(s, beg, ok));
  503. X
  504. X  if ((strange != 0) && (stranger != 0)) {
  505. X    strcpy(t, (unsigned char *) strcopy(s, strange, stranger));
  506. X    return (unsigned char *) t;
  507. X  }
  508. X  i = 0;
  509. X  while (t[i] != '\0') {
  510. X    if (t[i] == '@') at = i;
  511. X    if (t[i] == '!') bang = i;
  512. X    if (t[i] == '%') gate = i;
  513. X    i++;
  514. X  }
  515. X
  516. X  if ((at != 0) && (gate == 0)) {
  517. X    strcpy(s, (unsigned char *) strcopy(t, (at + 1), length(t)));
  518. X    if (strcomp(UUCPSITE, s) == 0) {    /* local user */
  519. X        fetch_local = 1;
  520. X        strcpy(s, (unsigned char *) strcopy(t, 0, (at - 1)));
  521. X        i = 0;
  522. X        while (s[i] != '\0') {
  523. X            if (s[i] == '.') s[i] = ' ';
  524. X            i++;
  525. X        }
  526. X        return (unsigned char *) s;
  527. X    }
  528. X  }
  529. X
  530. X  if (beg == 5) {  /* local mail */
  531. X    i = 0;
  532. X    while((t[i] != '\0') && (t[i] != ' ')) i++;
  533. X    t[i] = '\0';
  534. X  }
  535. X
  536. X  return (unsigned char *) t;
  537. X}
  538. X
  539. END_OF_FILE
  540.   if test 11618 -ne `wc -c <'src/misc2.c'`; then
  541.     echo shar: \"'src/misc2.c'\" unpacked with wrong size!
  542.   fi
  543.   # end of 'src/misc2.c'
  544. fi
  545. if test -f 'src/pd.c' -a "${1}" != "-c" ; then 
  546.   echo shar: Will not clobber existing file \"'src/pd.c'\"
  547. else
  548.   echo shar: Extracting \"'src/pd.c'\" \(18843 characters\)
  549.   sed "s/^X//" >'src/pd.c' <<'END_OF_FILE'
  550. X/***************************************************************************/
  551. X/*        PROGRAMM  ix/Mbox                           */
  552. X/*             DATEI  pd.c                           */
  553. X/*        FUNKTIONEN  pd(), download(), status(), mkix(), statistik()       */
  554. X/*             AUTOR  vs (Volker Schuermann/MINIX-Version)           */
  555. X/*  LETZTE AENDERUNG  27.06.1992                       */
  556. X/***************************************************************************/
  557. X  
  558. X#include <stdio.h>
  559. X#include <sys/types.h>
  560. X#include <signal.h>
  561. X#include <sys/stat.h>
  562. X#include <time.h>
  563. X
  564. X#include "mbox.h"
  565. X
  566. X
  567. X/***************************************************************************/
  568. X/*      FUNKTION  pd()                               */
  569. X/*  BESCHREIBUNG  Eine Datei wird mit o. ohne Protokoll uebertragen.       */
  570. X/*          Diese Funktion wird von "lesen()" oder "pruefe()"        */
  571. X/*          aufgerufen, wenn die zu bearbeitende Datei den Kenn-     */
  572. X/*          zeichner "BINFILE" enthaelt.                             */
  573. X/*     PARAMETER  arg = Dateiname                                          */
  574. X/*     RUECKGABE  keine                               */
  575. X/***************************************************************************/
  576. X
  577. Xvoid pd(arg, keywds)
  578. Xunsigned char arg[], keywds[];
  579. X{
  580. X  FILE *fp;
  581. X  FILE *ff;
  582. X
  583. X  unsigned char s[STRING];
  584. X  unsigned char tmp[STRING];
  585. X  unsigned char c;
  586. X  unsigned char protokoll;
  587. X  unsigned char cd[STRING];
  588. X  struct stat fst;
  589. X  long ts, tn;
  590. X
  591. X  int cps, bps, eff;
  592. X  int ok, i;
  593. X
  594. X  strcpy(cd, stripped(arg));
  595. X
  596. X  printf("\n\n");
  597. X  ansi("md");
  598. X  printf("%s\n\n", PD01_MSG);
  599. X  
  600. X  if(keywds[0] != '\0'){
  601. X    printf("%s ", PD02_MSG); 
  602. X    ansi("me");
  603. X    printf("%s\n\n", keywds);
  604. X  }
  605. X  else{
  606. X     ansi("me");
  607. X  }
  608. X
  609. X  ansi("mr");
  610. X  printf("%c%s [%c, %c, (%c)] >  ", CR, PD03_MSG, GBL06_MSG, GBL07_MSG, PD06_MSG);
  611. X  ansi("me");
  612. X
  613. X  do {
  614. X    c = getint();
  615. X    if (c >= 97) c -= 32;
  616. X    if ((c != GBL06_MSG) && (c != GBL07_MSG) && (c != PD06_MSG)) c = 0;
  617. X  } while (c == 0);
  618. X
  619. X  printf("%c", c);
  620. X
  621. X  if (c == PD06_MSG) {    /*  X  */
  622. X    printf("\n");
  623. X    sigcatch(SIGINT);    
  624. X  }
  625. X
  626. X  if (c != GBL06_MSG) {    /*  J  */
  627. X    printf("\n");
  628. X    return;
  629. X  }
  630. X  ansi("mr");
  631. X  printf("%c[%s] %c, %c, %c, %c ? > ", CR, PD07_MSG, PD08_MSG, PD09_MSG, PD10_MSG, PD11_MSG);
  632. X  ansi("me");
  633. X
  634. X
  635. X  do {
  636. X    protokoll = getint();
  637. X    if (protokoll >= 97) protokoll -= 32;
  638. X    if (protokoll == '?') {
  639. X        clearline();
  640. X        ansi("mr");
  641. X        printf("%c%s > ", CR, PD12_MSG);
  642. X        ansi("me");
  643. X    }
  644. X    if ((protokoll != PD08_MSG) && (protokoll != PD09_MSG) &&
  645. X        (protokoll != PD10_MSG) && (protokoll != PD11_MSG))
  646. X        protokoll = 0;
  647. X  } while (protokoll == 0);
  648. X
  649. X
  650. X  printf("%c", protokoll);
  651. X
  652. X  signal(SIGINT,  SIG_IGN);
  653. X  signal(SIGHUP,  SIG_IGN);
  654. X  signal(SIGQUIT, SIG_IGN);
  655. X  signal(SIGABRT, SIG_IGN);
  656. X  signal(SIGTERM, SIG_IGN);
  657. X
  658. X  printf("\n\n");
  659. X  ansi("md");
  660. X  printf("%s\n\n", PD13_MSG);
  661. X  ansi("me");
  662. X
  663. X  time(&ts);
  664. X
  665. X  switch (protokoll) {
  666. X      case PD08_MSG:
  667. X        sprintf(s, "exec cat %s", cd);
  668. X        break;
  669. X      case PD09_MSG:
  670. X        sprintf(s, "exec %s -b %s 2> /dev/null", SX, cd);
  671. X        break;
  672. X      case PD10_MSG:
  673. X        sprintf(s, "exec %s %s 2> /dev/null", SB, cd);
  674. X        break;
  675. X      case PD11_MSG:
  676. X        sprintf(s, "exec %s %s 2> /dev/null", SZ, cd);
  677. X        break;
  678. X  }
  679. X  system( s );
  680. X
  681. X  time(&tn); tn = tn - ts; 
  682. X
  683. X  stat(cd, &fst);
  684. X  USER.downratio += ((long) fst.st_size / 1024);
  685. X
  686. X  ansi( "md" );
  687. X  if(tn < 1) tn = 1;
  688. X  cps = fst.st_size / tn;
  689. X  bps = cps * 11;
  690. X
  691. X  BAUDRATE = baudrate( bps );
  692. X
  693. X  eff = ((100000 / BAUDRATE) * bps) / 1000;  
  694. X
  695. X  if(bps > BAUDRATE){
  696. X    printf("\n\n%s\n", PD14_MSG);
  697. X    ok = -1;
  698. X  }
  699. X  else{    
  700. X    printf("\n\n%ld %s.\n", fst.st_size, PD15_MSG);
  701. X    ok = 0;
  702. X  }
  703. X
  704. X  ansi( "me" );
  705. X  printf("%s %d cps (ca. %d bps).", PD16_MSG, cps, bps);
  706. X  sprintf(tmp, "%s/%d.pd", TMP, getpid());
  707. X  ff = fopen( tmp, "w" );
  708. X
  709. X
  710. X  if(ok == 0){
  711. X    fprintf(ff, "%s  %c  %-40.40s", mydate( 1 ), protokoll, cd); 
  712. X    if(bps < BAUDRATE){
  713. X        fprintf(ff, "  %6.d  %6.d  %2.d%% OK\n", cps, bps, eff);
  714. X    }
  715. X    else{
  716. X        fprintf(ff, "  %6.d  %6.d  %2.d%% BRK\n", cps, bps, eff);
  717. X    }
  718. X  }
  719. X  else{
  720. X    /*
  721. X    fprintf(ff, "%s  %c  %-40.40s", mydate( 1 ), protokoll, cd); 
  722. X    fprintf(ff, "  %6.6d  %6.6d  %s\n", cps, bps, PD17_MSG);
  723. X    */
  724. X  }
  725. X
  726. X  i = 0;
  727. X
  728. X  fp = fopen( PDLOG, "r" );
  729. X  if(fp != NULL){
  730. X    while((fgets(s, 80, fp) != NULL) && (i < PRO_ENTRIES)){
  731. X        fputs(s, ff);
  732. X        i++;
  733. X    }
  734. X    fclose(fp);
  735. X  }
  736. X
  737. X  fclose(ff);
  738. X
  739. X  sprintf(cd, "mv %s %s", tmp, PDLOG);
  740. X  system( cd );
  741. X
  742. X  printf("\n");
  743. X}
  744. X
  745. X
  746. X
  747. X
  748. X/***************************************************************************/
  749. X/*      FUNKTION  status                           */
  750. X/*  BESCHREIBUNG  Verschiedene (eigentlich fast alle) Eintraege aus den    */
  751. X/*          Teilnehmerdaten werden angezeigt.                        */
  752. X/*     PARAMETER  keine                                                       */
  753. X/*     RUECKGABE  keine                                 */
  754. X/***************************************************************************/
  755. X
  756. Xvoid status()
  757. X{
  758. X  unsigned char s[STRING];
  759. X  unsigned char t[STRING];
  760. X  unsigned char d[STRING];
  761. X  unsigned char ex[255];
  762. X  int a, b;
  763. X  int i;
  764. X
  765. X
  766. X  sprintf(s, " %s %d) %s ", PD18_MSG, USER.id, USER.name);
  767. X  headline(s);
  768. X  printf("\n");
  769. X
  770. X  ansi("md");
  771. X  printf("%s", PD19_MSG);
  772. X  ansi("me");
  773. X
  774. X  printf("\n");
  775. X
  776. X  sprintf(ex, "%s                                        ", USER.name);
  777. X  ex[27] = '\0';
  778. X  strcat(ex, USER.nick);
  779. X  strcat(ex, "                            ");
  780. X  ex[45] = '\0';
  781. X  strcat(ex, USER.geburtsdatum);
  782. X  strcat(ex, "                            ");
  783. X  ex[62] = '\0';
  784. X  strcat(ex, USER.telefon1);
  785. X  printf("%s\n", ex);
  786. X
  787. X  sprintf(ex, "%s                                        ", USER.strasse);
  788. X  ex[27] = '\0';
  789. X  strcat(ex, USER.sh_name);
  790. X  strcat(ex, "                            ");
  791. X  ex[45] = '\0';
  792. X  strcat(ex, "                            ");
  793. X  ex[62] = '\0';
  794. X  strcat(ex, USER.telefon2);
  795. X  printf("%s\n", ex);
  796. X
  797. X  printf("%s\n\n", USER.wohnort);
  798. X  ansi("md");
  799. X  printf("%s", PD20_MSG);  
  800. X  ansi("me");
  801. X  printf("\n");
  802. X
  803. X  s[0] = '\0'; strcat(s, datereconv( LASTLOG ));
  804. X  strcat(s, "-"); strcat(s, timereconv( LASTTIME ));
  805. X  s[16] = '\0';
  806. X
  807. X  sprintf(ex, "       %1d       %1d  %5d     %1d       %1d     %1d      %1d  %6d  %s",
  808. X    USER.terminal, USER.editor, USER.level, USER.bell, USER.prompt, USER.more, USER.intro, USER.seq, s);
  809. X  printf("%s\n\n", ex);
  810. X
  811. X  ansi("md");
  812. X  printf("%s", PD21_MSG);  
  813. X  ansi("me");
  814. X  sprintf(ex, "\n%06.6d                      %06.6d                    %06.6d",
  815. X    (USER.elapsed / 60), USER.upratio, USER.downratio);
  816. X  printf("%s\n\n", ex);
  817. X
  818. X  ansi("md");
  819. X  printf("%s", PD22_MSG);
  820. X  ansi("me");
  821. X
  822. X  i = 0;
  823. X  strcpy(s, (unsigned char *) USER.name);
  824. X  while (s[i] != '\0') {
  825. X    if (s[i] == ' ') s[i] = '.';
  826. X    i++;
  827. X  }
  828. X
  829. X  sprintf(t,  "%s: %s@%s", PD23_MSG, s, UUCPID);
  830. X  strcpy(d, USER.account); d[10] = '\0';
  831. X  strcpy(s, (unsigned char *) strcopy(USER.account, 11, 16));
  832. X  i = atoi(s); 
  833. X  sprintf(s, "%s  %3d.%02d", d, fix(i), flt(i));
  834. X  sprintf(ex, "%-54.54s%s DM\n%s: %s%s", t, s, PD24_MSG, UUCPBANG, USER.nick);
  835. X  printf("\n%s\n", ex);
  836. X  if (USER.sh_name[0] != '\0')
  837. X    printf("%s: %s!%s\n", PD25_MSG, UUCPSITE, USER.sh_name);
  838. X
  839. X  printf("\n");
  840. X
  841. X  ansi("md");
  842. X  printf("%s\n", PD26_MSG);
  843. X
  844. X  ansi("me");
  845. X
  846. X  i = 1;
  847. X  while(newsgrp[i][0] != '\0'){
  848. X    if(i != 1) printf(", ");
  849. X    printf("%s", newsgrp[i]);
  850. X    i++;
  851. X  }
  852. X
  853. X  printf("\n\n");  
  854. X}
  855. X
  856. X
  857. X
  858. X/***************************************************************************/
  859. X/*      FUNKTION  mkix()                           */
  860. X/*  BESCHREIBUNG  Wandelt eine Datei ins UNIX-Format (CRs werden entfernt) */
  861. X/*     PARAMETER  s  =  Dateiname                                          */
  862. X/*     RUECKGABE  keine                                                    */
  863. X/***************************************************************************/
  864. X
  865. Xvoid mkix( pfad )
  866. Xunsigned char pfad[];
  867. X{
  868. X  FILE *fp; 
  869. X  FILE *ff;
  870. X
  871. X  unsigned char s[255];
  872. X  unsigned char p[255];
  873. X
  874. X  int i, ok = 0;
  875. X
  876. X  
  877. X  sprintf(p, "%sabc", pfad);
  878. X
  879. X  fp = fopen( pfad, "r" );
  880. X  if(fp == NULL){
  881. X    return;
  882. X  }      
  883. X
  884. X  ff = fopen( p, "w" );
  885. X  if(ff == NULL){
  886. X    nerror("pd.c", 243, "mkix", "Datei-Erstellungsfehler", p);    
  887. X  }
  888. X
  889. X  while((ok == 0) && (fgets(s, 254, fp) != NULL)){
  890. X    i = 0;
  891. X    while(s[i] != '\0'){
  892. X        if(s[i] == CTRL_Z){
  893. X            ok++;
  894. X            break;
  895. X        }
  896. X        i++;
  897. X    }
  898. X    if(ok == 0){
  899. X        i = strlen(s) -2;
  900. X        if(s[i] == CR){
  901. X            s[i]    = LF;
  902. X            s[i +1] = '\0';
  903. X        }
  904. X        fputs(s, ff);
  905. X    }
  906. X  }
  907. X  fclose(fp);
  908. X  fclose(ff);
  909. X
  910. X  unlink(pfad);
  911. X  rename(p, pfad);
  912. X}
  913. X
  914. X
  915. X
  916. X/***************************************************************************/
  917. X/*      FUNKTION  statitik()                           */
  918. X/*  BESCHREIBUNG  Anrufer-Protokoll auswerten                    */
  919. X/*     PARAMETER  keine                                                       */
  920. X/*     RUECKGABE  keine                                                    */
  921. X/***************************************************************************/
  922. X
  923. Xvoid statistik()
  924. X{
  925. X  FILE *fp;
  926. X
  927. X  struct tm *tp;
  928. X  time_t tt;
  929. X
  930. X  unsigned char s[STRING];
  931. X  unsigned char od[MAX_TAGE][STRING];
  932. X  unsigned char t[STRING];
  933. X  unsigned char r[STRING];
  934. X
  935. X  int v18u[MAX_TAGE];
  936. X  int n18u[MAX_TAGE];
  937. X  int v18g = 0;
  938. X  int n18g = 0;
  939. X
  940. X  int zeit = 0;
  941. X  int tage = 0;
  942. X  int max  = 0;
  943. X
  944. X  int i, a;
  945. X  int toggle = 0;
  946. X  int sun;
  947. X
  948. X  fp = fopen( CALLS, "r" );
  949. X  if(fp == NULL){
  950. X    nerror("pd.c", 288, "statistik", "Datei-Lesefehler", CALLS);        
  951. X  }
  952. X
  953. X  od[0][0] = '\0';
  954. X
  955. X  headline( PD27_MSG );
  956. X  printf("%s\n", PD28_MSG);
  957. X  printf("===============================================================================\n");
  958. X
  959. X  while((fgets(s, (STRING *2), fp) != NULL) && (tage < (MAX_SCR_LINES -7))){
  960. X    strcpy(t, (unsigned char *) strcopy(s, 64, 71));
  961. X
  962. X    if(strcomp(t, od[tage]) != 0){
  963. X        if(tage != 0){
  964. X            if((v18u[tage] + n18u[tage]) > max){
  965. X                max = v18u[tage] + n18u[tage];
  966. X            }
  967. X            v18g += v18u[tage];
  968. X            n18g += n18u[tage];
  969. X        }
  970. X        tage++;
  971. X        od[tage][0] = '\0'; strcat(od[tage], t);
  972. X        v18u[tage] = 0;
  973. X        n18u[tage] = 0;
  974. X        }
  975. X    zeit = atoi(strcopy(s, 74, 75));
  976. X    if((zeit >   6) && (zeit < 18)) v18u[tage]++;
  977. X    if((zeit >= 18) || (zeit <= 6)) n18u[tage]++;
  978. X  }
  979. X
  980. X  sprintf(s, "%s", "ooooooooooooooooooooooooooooooooooooooooooooooooooooo");
  981. X
  982. X  time(&tt);
  983. X  tp = localtime(&tt);
  984. X  sun = tp->tm_wday;
  985. X
  986. X  for(i = 1; i < tage; i++){
  987. X    sprintf(t, "%s", s);
  988. X    a = (290 / max * (v18u[i] + n18u[i])) / 10;
  989. X    t[a] = '\0';    
  990. X    strcpy(r, "    ");    
  991. X    if(sun == 0){
  992. X        strcpy(r, PD29_MSG);
  993. X        toggle++;    
  994. X        ansi( "md" );
  995. X    }
  996. X    if(sun == 6) 
  997. X        strcpy(r, PD30_MSG);
  998. X    sun--;
  999. X    if(sun == -1) sun = 6;
  1000. X
  1001. X    printf("%s %s %4.d        %5.d         %5.d      %s\n",
  1002. X                od[i], r, v18u[i], n18u[i], v18u[i]+n18u[i], t);
  1003. X    if(toggle != 0) ansi( "me" );
  1004. X    toggle = 0;
  1005. X  }
  1006. X
  1007. X  printf("-------------------------------------------------------------------------------\n");
  1008. X  printf("%s %5.d        %5.d         %5.d      %s\n",
  1009. X      PD31_MSG, v18g, n18g, v18g+n18g, PD32_MSG);
  1010. X  printf("===============================================================================\n");
  1011. X
  1012. X  printf("\n%s %d %s.\n", PD33_MSG, (tage -1), PD34_MSG);   
  1013. X
  1014. X  fclose(fp);
  1015. X}
  1016. X
  1017. X
  1018. X
  1019. X
  1020. X
  1021. X/***************************************************************************/
  1022. X/*      FUNKTION  archivieren()                           */
  1023. X/*  BESCHREIBUNG  Archivierer auswaehlen und Dateien packen           */
  1024. X/*     PARAMETER  arg = artikel-liste                       */
  1025. X/*     RUECKGABE  Names des Archivs                       */
  1026. X/***************************************************************************/
  1027. X
  1028. Xunsigned char *archivieren( arg )
  1029. Xunsigned char arg[];
  1030. X{
  1031. X  FILE *fp;
  1032. X  int i, c;
  1033. X
  1034. X  struct stat fstat;
  1035. X
  1036. X  unsigned char s[LONGSTRING+STRING];
  1037. X  unsigned char t[STRING];
  1038. X  unsigned char packers[10][STRING];
  1039. X  unsigned char adds[10][STRING];
  1040. X  unsigned char tar[10][STRING];
  1041. X  unsigned char en[10][STRING];
  1042. X  unsigned char cd[LONGSTRING];
  1043. X
  1044. X  int fpid;
  1045. X
  1046. X
  1047. X  headline( PD37_MSG );
  1048. X  printf("\n");
  1049. X
  1050. X  sprintf(s, "%s/%s", HOME, PACKERS);
  1051. X  fp = fopen(s, "r");
  1052. X  if (fp == NULL) {
  1053. X    nerror("pd.c", 495, "archivieren", "Datei-Lesefehler", s);
  1054. X  }
  1055. X
  1056. X  printf("  1 - Text/ASCII\n\n");
  1057. X  strcpy(packers[1], (unsigned char *) "cat");
  1058. X  strcpy(adds[1], (unsigned char *) "?");
  1059. X  strcpy(tar[1], (unsigned char *) "-");
  1060. X  en[1][0] = '\0';
  1061. X  i = 1;
  1062. X  while((fgets(s, 80, fp) != NULL) && (s[0] == '/'));
  1063. X  while((i < 10) && (fscanf(fp, "%s %s %s %s %s", s, packers[i], adds[i], tar[i], en[i]) > 0)){
  1064. X    i++;
  1065. X    printf("  %d - %s\n\n", i, s); 
  1066. X  }
  1067. X  fclose(fp);
  1068. X
  1069. X  ansi("md");
  1070. X  printf("\n%s > ", PD38_MSG);
  1071. X  ansi("me");
  1072. X
  1073. X  c = getint();
  1074. X  if(c > 32) printf("%c", c);
  1075. X  c -= 49;
  1076. X
  1077. X  if((c > i) || (c < 0)) return (unsigned char *) "Noe!";
  1078. X
  1079. X  
  1080. X  printf("\n\n%s .", PD39_MSG);
  1081. X
  1082. X  switch( (fpid = fork()) ){
  1083. X    case -1 :
  1084. X        break;
  1085. X    case  0 : 
  1086. X        while(1){
  1087. X            printf(".");
  1088. X            sleep(2);
  1089. X        }    
  1090. X        break;
  1091. X  }
  1092. X
  1093. X  strcpy(cd, (unsigned char *) arg);
  1094. X
  1095. X
  1096. X  if(c != 0){
  1097. X
  1098. X    if(tar[c][0] != '-'){
  1099. X        sprintf(t, "DNL%s.tar", mytime(1));
  1100. X        t[5] = 'Z';
  1101. X        sprintf(s, "exec %s %s %s > /dev/null 2>&1", TAR, t, cd);
  1102. X        system( s );
  1103. X        strcpy(cd, (unsigned char *) t);
  1104. X    }    
  1105. X    else{
  1106. X        sprintf(t, "DNL%s", mytime(1));
  1107. X        t[5] = 'Z';
  1108. X    }
  1109. X
  1110. X    if(adds[c][0] == '?')
  1111. X        sprintf(s, "exec %s %s > /dev/null 2>&1", packers[c], cd);
  1112. X    else
  1113. X        sprintf(s, "exec %s %s %s %s > /dev/null 2>&1", packers[c], adds[c], t, cd);
  1114. X    
  1115. X    system( s );
  1116. X
  1117. X    unlink( t );
  1118. X
  1119. X    strcat(t, (unsigned char *) en[c]);
  1120. X
  1121. X  }
  1122. X  else{        /* Text/ASCII */
  1123. X    
  1124. X    sprintf(t, "DNL%s", mytime(1));
  1125. X    t[5] = 'Z';    
  1126. X
  1127. X    sprintf(s, "exec %s %s > %s", packers[c], cd, t);
  1128. X
  1129. X    system( s );
  1130. X  }
  1131. X
  1132. X  kill( fpid, SIGKILL );
  1133. X  (void) wait( &fpid );
  1134. X
  1135. X  clearline();
  1136. X
  1137. X  if(tar[c][0] != '-'){
  1138. X    ansi( "md" );
  1139. X    printf( PD40_MSG );
  1140. X    ansi( "me" );
  1141. X    printf("%s\n", PD41_MSG);
  1142. X  }  
  1143. X
  1144. X  stat(t, &fstat);
  1145. X  printf("%s \"%s\" %s %ld %s.", PD42_MSG, t, PD43_MSG, fstat.st_size, PD44_MSG);
  1146. X
  1147. X
  1148. X  return (unsigned char *) t;
  1149. X}
  1150. X
  1151. X
  1152. X
  1153. X/***************************************************************************/
  1154. X/*      FUNKTION  download()                           */
  1155. X/*  BESCHREIBUNG  Text- und Binaerartikel uebertragen               */
  1156. X/*     PARAMETER  arg = artikel[-artikel]                                  */
  1157. X/*     RUECKGABE  keine                                                    */
  1158. X/***************************************************************************/
  1159. X
  1160. X#define MAX_DL_FILES 20
  1161. X
  1162. Xvoid download( arg )
  1163. Xunsigned char arg[];
  1164. X{
  1165. X  int i, k, l, m;
  1166. X  int von, bis;
  1167. X  int ALLE;
  1168. X  int protokoll, ok;
  1169. X  int cps, bps, eff;
  1170. X
  1171. X  long ts, tn;
  1172. X  long bytes_total = 0L;
  1173. X
  1174. X  struct stat fst;
  1175. X
  1176. X  unsigned char s[STRING];
  1177. X  unsigned char cd[LONGSTRING];
  1178. X  unsigned char t[(LONGSTRING+STRING)];
  1179. X  unsigned char tmp[STRING];
  1180. X
  1181. X  unsigned char files[MAX_DL_FILES][STRING];
  1182. X  int mdlp = 1;
  1183. X
  1184. X  int art[MAX_PER_NG];
  1185. X  int artp = 0;
  1186. X  int lastart;
  1187. X
  1188. X  int havetokill = 0;
  1189. X
  1190. X
  1191. X  FILE *fp, *ff;
  1192. X
  1193. X  
  1194. X  tmp[0] = '\0';
  1195. X
  1196. X  i = 0;
  1197. X  k = -1;
  1198. X  l = -1;
  1199. X  m = -1;
  1200. X
  1201. X  while (arg[i] != '\0') {
  1202. X    if (arg[i] == '-') k = i;
  1203. X    if (arg[i] == '*') l = i;
  1204. X    if ((arg[i] > 48) && (arg[i] < 58) && (m == -1)) m = i;
  1205. X    i++;
  1206. X  }
  1207. X
  1208. X  von = 1;
  1209. X  bis = 32000;
  1210. X
  1211. X  if ((m == -1) && (l == -1) && (k == -1)) {
  1212. X    return;
  1213. X  }
  1214. X
  1215. X  if ((m != -1) && (l == -1) && (k == -1)) {
  1216. X    strcpy(s, (unsigned char *) strcopy(arg, m, length(arg)));
  1217. X    von = atoi(s);
  1218. X    bis = von;
  1219. X  }
  1220. X  if (k != -1) {
  1221. X    strcpy(s, (unsigned char *) strcopy(arg, 0, (k - 1)));
  1222. X    von = atoi(s);
  1223. X    strcpy(s, (unsigned char *) strcopy(arg, (k + 1), length(arg)));
  1224. X    bis = atoi(s);
  1225. X
  1226. X    if (von == 0) von = 1;
  1227. X    if (bis == 0) bis = 32000;
  1228. X  }
  1229. X  
  1230. X  if(von > bis){
  1231. X    i = bis;
  1232. X    bis = von;
  1233. X    von = i;
  1234. X  }
  1235. X
  1236. X  maybe_locked(INHALT, "r");
  1237. X  fp = fopen(INHALT, "r");
  1238. X  if (fp == NULL) {
  1239. X    nerror("pd.c", 504, "download", "Datei-Lesefehler", INHALT);
  1240. X  }
  1241. X  while (fgets(cd, 250, fp) != NULL){
  1242. X    i = atoi(cd);
  1243. X    if((i >= von) && (i <= bis)){
  1244. X        art[artp] = i;
  1245. X        artp++;
  1246. X        if(artp > MAX_PER_NG){
  1247. X            printf("This is a known bug ;-)");
  1248. X            exit(0);
  1249. X        }        
  1250. X    }
  1251. X  }
  1252. X  fclose(fp);
  1253. X
  1254. X
  1255. X  printf("\n\n");
  1256. X
  1257. X  ansi("mr");
  1258. X  printf("%c[%s] %c, %c, %c, %c ? > ", CR, PD07_MSG, PD08_MSG, PD09_MSG, PD10_MSG, PD11_MSG);
  1259. X  ansi("me");
  1260. X
  1261. X
  1262. X  do {
  1263. X    protokoll = getint();
  1264. X    if (protokoll >= 97) protokoll -= 32;
  1265. X    if (protokoll == '?') {
  1266. X        clearline();
  1267. X        ansi("mr");
  1268. X        printf("%c%s > ", CR, PD12_MSG);
  1269. X        ansi("me");
  1270. X    }
  1271. X    if ((protokoll != PD08_MSG) && (protokoll != PD09_MSG) &&
  1272. X        (protokoll != PD10_MSG) && (protokoll != PD11_MSG))
  1273. X        protokoll = 0;
  1274. X  } while (protokoll == 0);
  1275. X
  1276. X
  1277. X  printf("%c", protokoll);
  1278. X
  1279. X  if (strcomp(BRETT, "PM") != 0) {
  1280. X           sprintf(s, "%s", BRETT); 
  1281. X  }
  1282. X  else {
  1283. X    sprintf(s, "%s/usr/%d", HOME, USER.id);
  1284. X  }
  1285. X  chdir( s );
  1286. X
  1287. X  cd[0] = '\0';
  1288. X  printf("\n\n%s .", PD36_MSG);
  1289. X
  1290. X  lastart = artp;
  1291. X
  1292. X  for( i = 0; i < artp; i++){  
  1293. X
  1294. X    sprintf(s, "%d", art[i]); 
  1295. X    
  1296. X    fp = fopen(s, "r");
  1297. X    if(fp != 0){
  1298. X        printf(".");
  1299. X
  1300. X        while ((fgets(t, 250, fp) != NULL) && (t[0] > 32));
  1301. X        while ((fgets(t, 250, fp) != NULL) && (t[0] < 32));
  1302. X
  1303. X        ok = 0;
  1304. X
  1305. X        if (strcomp("BINFILE", t) == 0) {
  1306. X            fgets(t, 80, fp);
  1307. X            strcpy(s, (unsigned char *) stripped(t));
  1308. X            ok++;
  1309. X        }
  1310. X        if(((2 + strlen(s) + strlen(cd)) < LONGSTRING) && (mdlp < MAX_DL_FILES)){
  1311. X            stat(s, &fst);
  1312. X            bytes_total += (long) fst.st_size;
  1313. X
  1314. X            if(ok != 0){
  1315. X                strcpy(files[mdlp], s);
  1316. X                mdlp++;                
  1317. X                USER.downratio += ((long) fst.st_size / 1024);
  1318. X            }
  1319. X
  1320. X            strcat(cd, s); 
  1321. X            strcat(cd, " ");
  1322. X            lastart = i;
  1323. X        }
  1324. X        fclose(fp);
  1325. X    }
  1326. X  }
  1327. X
  1328. X  if(cd[0] == '\0'){
  1329. X    ansi("md");
  1330. X    printf("%c%s\n", CR, PD35_MSG);
  1331. X    ansi("me");
  1332. X    chdir( HOME );
  1333. X    return;
  1334. X  }
  1335. X
  1336. X  if((protokoll != PD08_MSG) && (strcomp(PDNG, NG) != 0)){
  1337. X    strcpy(s, (unsigned char *) archivieren( cd ));
  1338. X    if(strcomp("Noe!", s) != 0){
  1339. X        strcpy(cd, (unsigned char *) s);
  1340. X        havetokill++;
  1341. X    }
  1342. X  }
  1343. X
  1344. X  signal(SIGINT, SIG_IGN);
  1345. X  signal(SIGHUP, SIG_IGN);
  1346. X  signal(SIGQUIT, SIG_IGN);
  1347. X  signal(SIGABRT, SIG_IGN);
  1348. X  signal(SIGTERM, SIG_IGN);
  1349. X
  1350. X  printf("\n\n");
  1351. X  ansi("md");
  1352. X  printf("%s\n\n", PD13_MSG);
  1353. X  ansi("me");
  1354. X
  1355. X  time(&ts);
  1356. X
  1357. X  switch (protokoll) {
  1358. X      case PD08_MSG:
  1359. X        sprintf(t, "exec cat %s", cd);
  1360. X        break;
  1361. X      case PD09_MSG:
  1362. X        sprintf(t, "exec %s -b %s 2> /dev/null", SX, cd);
  1363. X        break;
  1364. X      case PD10_MSG:
  1365. X        sprintf(t, "exec %s %s 2> /dev/null", SB, cd);
  1366. X        break;
  1367. X      case PD11_MSG:
  1368. X        sprintf(t, "exec %s %s 2> /dev/null", SZ, cd);
  1369. X        break;
  1370. X  }    
  1371. X  system( t );
  1372. X
  1373. X  if(havetokill != 0) unlink( cd );
  1374. X
  1375. X  time(&tn); tn = tn - ts; 
  1376. X
  1377. X  chdir( HOME );
  1378. X
  1379. X  ansi( "md" );
  1380. X  if(tn < 1) tn = 1;
  1381. X  cps = bytes_total / tn;
  1382. X  bps = cps * 11;
  1383. X
  1384. X  BAUDRATE = baudrate( bps );
  1385. X
  1386. X  eff = ((100000 / BAUDRATE) * bps) / 1000;
  1387. X
  1388. X  if(bps > BAUDRATE){
  1389. X    printf("\n\n%s\n", PD14_MSG);
  1390. X    ok = -1;
  1391. X  }
  1392. X  else{    
  1393. X    printf("\n\n%ld %s.\n", fst.st_size, PD15_MSG);
  1394. X    ok = 0;
  1395. X  }
  1396. X
  1397. X  ansi( "me" );
  1398. X  printf("%s %d cps (ca. %d bps).", PD16_MSG, cps, bps);  
  1399. X
  1400. X  
  1401. X  if(ok != -1){
  1402. X      
  1403. X    sprintf(tmp, "%s/%d.pd", TMP, getpid());
  1404. X    ff = fopen( tmp, "w" );
  1405. X
  1406. X    for(i = 1; i < mdlp; i++){
  1407. X        fprintf(ff, "%s  %c  %-40.40s", mydate( 1 ), protokoll, files[i]); 
  1408. X        fprintf(ff, "  %6.d  %6.d  %2.d%% DNL\n", cps, bps, eff);        
  1409. X    }  
  1410. X
  1411. X    i = 0;
  1412. X
  1413. X    fp = fopen( PDLOG, "r" );
  1414. X    if(fp != NULL){
  1415. X        while((fgets(s, 80, fp) != NULL) && (i < PRO_ENTRIES)){
  1416. X            fputs(s, ff);
  1417. X            i++;
  1418. X        }
  1419. X        fclose(fp);
  1420. X    }
  1421. X
  1422. X    fclose(ff);
  1423. X
  1424. X    sprintf(cd, "mv %s %s", tmp, PDLOG);
  1425. X    system( cd );
  1426. X  }
  1427. X  else{
  1428. X    if(ff != 0) fclose(ff);
  1429. X    if(tmp[0] != '\0') unlink(tmp);
  1430. X  }
  1431. X
  1432. X  if(lastart != (artp-1)){
  1433. X    ansi( "md" );
  1434. X    printf("\n%s", PD40_MSG);
  1435. X    ansi( "me" );
  1436. X    printf("%s %d %s %d %s!", PD45_MSG, art[0], PD46_MSG, art[lastart], PD47_MSG);
  1437. X  }
  1438. X
  1439. X  printf("\n\n");
  1440. X}
  1441. X
  1442. X
  1443. END_OF_FILE
  1444.   if test 18843 -ne `wc -c <'src/pd.c'`; then
  1445.     echo shar: \"'src/pd.c'\" unpacked with wrong size!
  1446.   fi
  1447.   # end of 'src/pd.c'
  1448. fi
  1449. if test -f 'wendy/ctrl.c' -a "${1}" != "-c" ; then 
  1450.   echo shar: Will not clobber existing file \"'wendy/ctrl.c'\"
  1451. else
  1452.   echo shar: Extracting \"'wendy/ctrl.c'\" \(20033 characters\)
  1453.   sed "s/^X//" >'wendy/ctrl.c' <<'END_OF_FILE'
  1454. X#include "wendy.h"
  1455. X
  1456. X/*      Statusmeldung ausgeben  */
  1457. Xctrlg( f )
  1458. Xunsigned char f[];
  1459. X{
  1460. X  unsigned char s[STRING];
  1461. X  unsigned char t[STRING];
  1462. X  t[0] = '\0';
  1463. X
  1464. X#ifdef _LOCAL 
  1465. X  if(INS_mode != 0)
  1466. X    strcpy(t, (unsigned char *) " - Einfuege-Modus");
  1467. X  sprintf(s, " %s - Spalte %d, Zeile %d (%d) %s", f, x, (ypos + y -1), lastline, t);
  1468. X#else
  1469. X  if(INS_mode != 0)
  1470. X    strcpy(t, (unsigned char *) " - Insert-Mode");
  1471. X  sprintf(s, " %s - Column %d, Line %d (%d) %s", f, x, (ypos + y -1), lastline, t);
  1472. X#endif
  1473. X  show_status( s );
  1474. X  activate( RTF_attrib );
  1475. X  ansi2( "cm", x, y );
  1476. X}
  1477. X/*      BACKSPACE       */
  1478. Xctrlh()
  1479. X{
  1480. X  unsigned char s[LONGSTRING];
  1481. X  unsigned char a[LONGSTRING];
  1482. X  unsigned char q[LONGSTRING];
  1483. X  int i, j;
  1484. X  if(x == 1){
  1485. X    if(y == START) return;
  1486. X    strcpy(s, (unsigned char *) SCREEN[y-1]);
  1487. X    i = strlen((unsigned char *) right_stripped(s));
  1488. X    strcpy(s, (unsigned char *) SCREEN[y]);
  1489. X    j = strlen((unsigned char *) right_stripped(s));
  1490. X    SCREEN[(y-1)][i] = '\0';
  1491. X    ATTRIB[(y-1)][i] = '\0';
  1492. X    strcpy(s, (unsigned char *) SCREEN[(y-1)]); strcat(s, (unsigned char *) SCREEN[y]);
  1493. X    strcat(s, (unsigned char *) "                           ");
  1494. X    strcpy(a, (unsigned char *) ATTRIB[(y-1)]); strcat(a, (unsigned char *) ATTRIB[y]);
  1495. X    strcat(a, (unsigned char *) "0000000000000000000000000000000000000000000000000000000000000000000000000000000");
  1496. X    strcpy(SCREEN[y], (unsigned char *) strcopy(s, MAXX, MAXX+MAXX));
  1497. X    strcpy(ATTRIB[y], (unsigned char *) strcopy(a, MAXX, MAXX+MAXX));
  1498. X    s[MAXX] = '\0'; strcpy(SCREEN[(y-1)], (unsigned char *) s);
  1499. X    a[MAXX] = '\0'; strcpy(ATTRIB[(y-1)], (unsigned char *) a);
  1500. X
  1501. X    strcpy(q, (unsigned char *) right_stripped(SCREEN[y]));
  1502. X
  1503. X    if(strlen((unsigned char *) right_stripped(q)) < 1)
  1504. X        ctrly();
  1505. X    else
  1506. X        show_line( SCREEN[y], ATTRIB[y], 1 );
  1507. X
  1508. X    y--; x = i + 1;
  1509. X    show_line( SCREEN[y], ATTRIB[y], x );
  1510. X    ansi2( "cm", x, y );
  1511. X
  1512. X    return;
  1513. X  }
  1514. X  strcpy(s, (unsigned char *) SCREEN[y]);
  1515. X  s[(x-2)] = '\0';
  1516. X  strcat(s, (unsigned char *) strcopy(SCREEN[y], (x-1), strlen(SCREEN[y])));
  1517. X  strcat(s, "            ");
  1518. X  s[MAXX] = '\0';
  1519. X  strcpy(SCREEN[y], (unsigned char *) s);
  1520. X  strcpy(s, (unsigned char *) ATTRIB[y]);
  1521. X  s[(x-2)] = '\0';
  1522. X  strcat(s, (unsigned char *) strcopy(ATTRIB[y], (x-1), strlen(ATTRIB[y])));
  1523. X  strcat(s, "0000000000000000000000000000000000000000000000000000000000000000000000000000000");
  1524. X  s[MAXX] = '\0';
  1525. X  strcpy(ATTRIB[y], (unsigned char *) s);
  1526. X  x--;
  1527. X  ansi2( "cm", x, y );
  1528. X  if(ansi( "dc" ) != 0){
  1529. X        show_line( SCREEN[y], ATTRIB[y], x );
  1530. X    ansi2( "cm", x, y );
  1531. X  }
  1532. X}
  1533. X/*      INSERT-Modus an/aus     */
  1534. Xctrlv()
  1535. X{
  1536. X  if(INS_mode == 0){
  1537. X        INS_mode = 1;
  1538. X#ifdef _LOCAL
  1539. X        show_status( " WENDY: Einfuegemodus aktiviert. " );
  1540. X#else
  1541. X    show_status( " WENDY: Insert mode activated. " );
  1542. X#endif
  1543. X  }
  1544. X  else{
  1545. X        INS_mode = 0;
  1546. X#ifdef _LOCAL
  1547. X        show_status( " WENDY: Einfuegemodus aus. " );
  1548. X#else
  1549. X    show_status( " WENDY: Insert mode deactivated. " );
  1550. X#endif
  1551. X  }
  1552. X  ansi2( "cm", x, y );
  1553. X}
  1554. X/*      DOWN    */
  1555. Xctrlj()
  1556. X{
  1557. X  int ymem = y;
  1558. X
  1559. X  if((y < MAXY) && (y < lastline)){
  1560. X    ansi( "do" );
  1561. X        y++;
  1562. X    return;
  1563. X  }
  1564. X
  1565. X  if(ypos < (lastline - MAXY)){
  1566. X        restore_screen( ypos );
  1567. X        ypos++;
  1568. X        prep_screen( ypos );
  1569. X
  1570. X
  1571. X    ansi2( "cm", 1, START );
  1572. X
  1573. X
  1574. X    if(ansi( "dl" ) != 0){
  1575. X        show_screen( START );
  1576. X    }
  1577. X    else{
  1578. X        y = MAXY;
  1579. X        show_line( SCREEN[MAXY], ATTRIB[MAXY], 1 );
  1580. X        y = ymem;
  1581. X    }
  1582. X    ansi2( "cm", x, y );
  1583. X  }
  1584. X}
  1585. X/*      UP      */
  1586. Xctrlk()
  1587. X{
  1588. X  if(y > START){
  1589. X    ansi( "up" );
  1590. X        y--;
  1591. X    return;
  1592. X  }
  1593. X
  1594. X  if(ypos > 1){            /* 1(!), nicht START (!) */
  1595. X        restore_screen( ypos );
  1596. X        ypos--;
  1597. X        prep_screen( ypos );
  1598. X
  1599. X
  1600. X    ansi2( "cm", 1, MAXY );
  1601. X    ansi( "ce" );
  1602. X    ansi2( "cm", x, y );
  1603. X
  1604. X
  1605. X    if(ansi( "al" ) != 0){
  1606. X        show_screen( START );
  1607. X    }
  1608. X    else{
  1609. X        show_line( SCREEN[y], ATTRIB[y], 1);
  1610. X        ansi2( "cm", x, y );
  1611. X    }
  1612. X  }
  1613. X}
  1614. X/*      CONTENT-Zeile einfuegen         */
  1615. Xctrln()
  1616. X{
  1617. X  if(RTF_toggle == 0){
  1618. X    FLAG[(ypos + y - 1)] &= ~is_plain;
  1619. X    FLAG[(ypos + y - 1)] |=  is_richtext;
  1620. X#ifdef _LOCAL
  1621. X    show_status( "Der folgende Text wird klassifiziert als 'text/richtext'." );
  1622. X#else
  1623. X    show_status( "The following text is classified as 'text/richtext'." );
  1624. X#endif
  1625. X        RTF_toggle++;
  1626. X  }
  1627. X  else{
  1628. X    FLAG[(ypos + y - 1)] &= ~is_richtext;
  1629. X    FLAG[(ypos + y - 1)] |=  is_plain;
  1630. X#ifdef _LOCAL
  1631. X    show_status( "Der folgende Text wird klassifiziert als 'text/plain'." );
  1632. X#else
  1633. X    show_status( "The following text is classified as 'text/plain'." );
  1634. X#endif
  1635. X        RTF_toggle = 0;
  1636. X  }
  1637. X  activate( RTF_attrib );
  1638. X  ansi2( "cm", x, y );
  1639. X}
  1640. X
  1641. X/*      RTF-Attribut waehlen    */
  1642. X
  1643. X
  1644. Xctrlu_output()
  1645. X{
  1646. X  ansi( "me"); ansi( "us" );
  1647. X
  1648. X  if(RTF_attrib == 'b'){
  1649. X    ansi2( "cm", 8,  1 ); printf("B");    
  1650. X  }
  1651. X  if(FORMATTER == 'c'){
  1652. X    ansi2( "cm", 16, 1 ); printf("C");    
  1653. X  }
  1654. X  if(RTF_attrib == 'f'){
  1655. X    ansi2( "cm", 26, 1 ); printf("F");    
  1656. X  }
  1657. X  if(RTF_attrib == 'i'){
  1658. X    ansi2( "cm", 35, 1 ); printf("I");    
  1659. X  }
  1660. X  if(RTF_attrib == '0'){
  1661. X    ansi2( "cm", 45, 1 ); printf("N");    
  1662. X  }
  1663. X  if(FORMATTER == 'b'){
  1664. X    ansi2( "cm", 57, 1 ); printf("o");    
  1665. X  }
  1666. X  if(RTF_attrib == 'u'){
  1667. X    ansi2( "cm", 67, 1 ); printf("U");    
  1668. X  }  
  1669. X
  1670. X  ansi( "mr" );
  1671. X  if(RTF_attrib != 'b'){
  1672. X    ansi2( "cm", 8,  1 ); printf("B");    
  1673. X  }
  1674. X  if(FORMATTER != 'c'){
  1675. X    ansi2( "cm", 16, 1 ); printf("C");    
  1676. X  }
  1677. X  if(RTF_attrib != 'f'){
  1678. X    ansi2( "cm", 26, 1 ); printf("F");    
  1679. X  }
  1680. X  if(RTF_attrib != 'i'){
  1681. X    ansi2( "cm", 35, 1 ); printf("I");    
  1682. X  }
  1683. X  if(RTF_attrib != '0'){
  1684. X    ansi2( "cm", 45, 1 ); printf("N");    
  1685. X  }
  1686. X  if(FORMATTER != 'b'){
  1687. X    ansi2( "cm", 57, 1 ); printf("o");    
  1688. X  }
  1689. X  if(RTF_attrib != 'u'){
  1690. X    ansi2( "cm", 67, 1 ); printf("U");    
  1691. X  }  
  1692. X
  1693. X}
  1694. X
  1695. Xctrlu()
  1696. X{
  1697. X  int c;
  1698. X  show_status( " RTF: <B>old  <C>enter  <F>lash  <I>talic  <N>ormal  Bl<o>ckset  <U>nderline " );
  1699. X
  1700. X  do{
  1701. X    ctrlu_output();
  1702. X      ansi2( "cm", 45, 1 );
  1703. X    c = getch();
  1704. X    if(c == ESC){
  1705. X        do{
  1706. X            c = getch();
  1707. X        }while(c < 65);
  1708. X        c = getch();
  1709. X#ifdef _LOCAL
  1710. X        show_status( " WENDY: Noe, Auswahl per Cursortaste ist noch nicht implementiert ;-) ");
  1711. X#else
  1712. X        show_status( " WENDY: Nope! Selection by cursor keys' not implemented yet!" );
  1713. X#endif
  1714. X        activate( RTF_attrib );
  1715. X        ansi2( "cm", x, y );
  1716. X        return;
  1717. X     }
  1718. X
  1719. X    switch(c){
  1720. X        case 'b' :
  1721. X        case 'B' :     if(RTF_attrib == 'b') 
  1722. X                    RTF_attrib = '0';
  1723. X                else
  1724. X                    RTF_attrib = 'b';
  1725. X                break;
  1726. X        case 'c' :
  1727. X        case 'C' :    if(FORMATTER == 'c')
  1728. X                    FORMATTER = 0;
  1729. X                else
  1730. X                    FORMATTER = 'c';
  1731. X                break;
  1732. X        case 'f' :
  1733. X        case 'F' :    if(RTF_attrib == 'f')
  1734. X                    RTF_attrib = '0';
  1735. X                else
  1736. X                    RTF_attrib = 'f';
  1737. X                break;
  1738. X        case 'i' :
  1739. X        case 'I' :    if(RTF_attrib == 'i')
  1740. X                    RTF_attrib = '0';
  1741. X                else
  1742. X                    RTF_attrib = 'i';
  1743. X                break;
  1744. X        case 'n' :
  1745. X        case 'N' :    FORMATTER = 0;
  1746. X                RTF_attrib = '0';
  1747. X                break;
  1748. X        case 'o' :
  1749. X        case 'O' :    if(FORMATTER == 'o')
  1750. X                    FORMATTER = 0;
  1751. X                else
  1752. X                    FORMATTER = 'b';
  1753. X                break;
  1754. X        case 'u' :
  1755. X        case 'U' :    if(RTF_attrib == 'u')
  1756. X                    RTF_attrib = '0';
  1757. X                else
  1758. X                    RTF_attrib = 'u';
  1759. X                break;
  1760. X        
  1761. X    }    
  1762. X  }while(isin("bBcCfFiIoOuU") != 0);
  1763. X
  1764. X  ctrlu_output();
  1765. X
  1766. X  if(BLOCK.status == BLOCKMODE) block_ctrlu();
  1767. X
  1768. X  activate( RTF_attrib );
  1769. X  ansi2( "cm", x, y );
  1770. X}
  1771. X/*      SETUP   */
  1772. X
  1773. X
  1774. Xctrls_output()
  1775. X{
  1776. X  if(MAXX <  10) MAXX =  10;
  1777. X  if(MAXX > 136) MAXX = 136;
  1778. X  if(MAXY <   4) MAXY =   4;
  1779. X  if(MAXY >  24) MAXY =  24;
  1780. X
  1781. X  ansi( "me" );
  1782. X#ifdef _LOCAL
  1783. X  ansi2( "cm", 25,  5); printf("%d  ", MAXX);
  1784. X  ansi2( "cm", 25,  7); printf("%d  ", MAXY);
  1785. X
  1786. X  ansi2( "cm", 67,  5); printf("%s           ", terminal);
  1787. X  ansi2( "cm", 67,  7); printf("%s           ", umlaut);
  1788. X#else
  1789. X  ansi2( "cm", 27,  5); printf("%d  ", MAXX);
  1790. X  ansi2( "cm", 27,  7); printf("%d  ", MAXY);
  1791. X
  1792. X  ansi2( "cm", 66,  5); printf("%s           ", terminal);
  1793. X  ansi2( "cm", 66,  7); printf("%s           ", umlaut);
  1794. X#endif
  1795. X}
  1796. Xctrls()
  1797. X{
  1798. X  FILE *fp;
  1799. X  unsigned char s[STRING];
  1800. X  unsigned char *home;
  1801. X  int c, d;
  1802. X
  1803. X
  1804. X  restore_screen( ypos );
  1805. X  ansi( "cl" );
  1806. X
  1807. X#ifdef _LOCAL
  1808. X
  1809. X  show_status( " WENDY: Parameter aendern ... " );
  1810. X  
  1811. X  ansi2( "cm",  1,  3 ); printf("Aktive Parameter:");
  1812. X
  1813. X  ansi( "mr" );
  1814. X  ansi2( "cm",  1,  5 ); printf(" 1 ");
  1815. X  ansi2( "cm",  5,  5 ); printf(" Zeichen pro Zeile " );
  1816. X  ansi2( "cm",  1,  7 ); printf(" 2 ");
  1817. X  ansi2( "cm",  5,  7 ); printf(" Anzahl der Zeilen " );
  1818. X
  1819. X  ansi2( "cm", 40,  5 ); printf(" 3 ");
  1820. X  ansi2( "cm", 44,  5 ); printf(" Terminal-Emulation   " );
  1821. X  ansi2( "cm", 40,  7 ); printf(" 4 " );
  1822. X  ansi2( "cm", 44,  7 ); printf(" Umlaut-Konvertierung " );
  1823. X
  1824. X  ansi( "me" );
  1825. X  ansi2( "cm",  1, 10); printf("Vordefinierte Konfigurationen:");
  1826. X  
  1827. X  ansi( "mr" );
  1828. X  ansi2( "cm",  1, 12); printf(" 5 ");
  1829. X  ansi2( "cm",  5, 12); printf(" UNIX (Console)          ");
  1830. X  ansi2( "cm",  1, 14); printf(" 6 ");
  1831. X  ansi2( "cm",  5, 14); printf(" MINIX (Console)         ");
  1832. X  ansi2( "cm",  1, 16); printf(" 7 ");
  1833. X  ansi2( "cm",  5, 16); printf(" DOS (ProComm ab 2.4.1)  ");
  1834. X  
  1835. X  ansi2( "cm", 40, 12); printf(" 8 ");
  1836. X  ansi2( "cm", 44, 12); printf(" DOS (TELIX ab 3.11)      ");
  1837. X  ansi2( "cm", 40, 14); printf(" 9 ");
  1838. X  ansi2( "cm", 44, 14); printf(" DOS (Telemate ab 2.11)   ");
  1839. X
  1840. X  ctrls_output();
  1841. X  do{
  1842. X        ansi2( "cm", 1, 19); printf("Nun, was soll's denn sein?      ");
  1843. X    ansi2( "cm", 28, 19 );
  1844. X    c = getch();
  1845. X    ansi2( "cm", 1, 19 );
  1846. X    switch(c){
  1847. X        case '1' :    ansi( "ce" );
  1848. X                printf("Zeichen pro Zeile (10-136): ");
  1849. X                sprintf(s, "%d", MAXX);
  1850. X                strcpy(s, (unsigned char *) getline( 3, 1101, '.', s));
  1851. X                MAXX = atoi(s);
  1852. X                break;
  1853. X        case '2' :    ansi( "ce" );
  1854. X                printf("Bildschirmzeilen (4-24): ");
  1855. X                sprintf(s, "%d", MAXY);
  1856. X                strcpy(s, (unsigned char *) getline( 2, 1101, '.', s));
  1857. X                MAXY = atoi(s);
  1858. X                break;
  1859. X        case '3' :    ansi( "mr" );
  1860. X                ansi2( "cm",  1, 21); printf(" A ");
  1861. X                ansi2( "cm",  5, 21); printf(" ANSI (X3.64)  ");
  1862. X                ansi2( "cm", 30, 21); printf(" B ");
  1863. X                ansi2( "cm", 34, 21); printf(" DEC VT100     "); 
  1864. X                ansi2( "cm", 60, 21); printf(" C ");
  1865. X                ansi2( "cm", 64, 21); printf(" MINIX CONSOLE ");
  1866. X                ansi( "me" );
  1867. X
  1868. X                ansi2( "cm", 1, 19 ); ansi( "ce" );
  1869. X                printf("Terminal-Emulation (A-C): ");
  1870. X
  1871. X                do{
  1872. X                    d = getch();
  1873. X                }while(isin("abcABC", d) == 0);
  1874. X    
  1875. X                switch(d){
  1876. X                    case 'a' :
  1877. X                    case 'A' :    strcpy(terminal, (unsigned char *) "ansi");
  1878. X                            break;
  1879. X                    case 'b' :
  1880. X                    case 'B' :    strcpy(terminal, (unsigned char *) "vt100");
  1881. X                            break;
  1882. X                    case 'c' :
  1883. X                    case 'C' :    strcpy(terminal, (unsigned char *) "minix");
  1884. X                            break;
  1885. X                }        
  1886. X                ansi2( "cm",  1, 21); ansi( "ce" );    
  1887. X                break;
  1888. X        case '4' :    ansi( "mr" );
  1889. X                ansi2( "cm",  1, 21); printf(" A ");
  1890. X                ansi2( "cm",  5, 21); printf(" ISO-8859-1  ");
  1891. X                ansi2( "cm", 30, 21); printf(" B ");
  1892. X                ansi2( "cm", 34, 21); printf(" IBM-Umlaute "); 
  1893. X                ansi( "me" );
  1894. X
  1895. X                ansi2( "cm", 1, 19 ); ansi( "ce" );
  1896. X                printf("Umlaut-Konvertierung (A-B): ");
  1897. X
  1898. X                do{
  1899. X                    d = getch();
  1900. X                }while(isin("abAB", d) == 0);
  1901. X    
  1902. X                switch(d){
  1903. X                    case 'a' :
  1904. X                    case 'A' :    strcpy(umlaut, (unsigned char *) "iso-8859-1");
  1905. X                            break;
  1906. X                    case 'b' :
  1907. X                    case 'B' :    strcpy(umlaut, (unsigned char *) "ibm");
  1908. X                            break;
  1909. X                }        
  1910. X                ansi2( "cm",  1, 21); ansi( "ce" );    
  1911. X                break;
  1912. X        case '5' :    MAXX = 80;
  1913. X                MAXY = 24;
  1914. X                strcpy(terminal, (unsigned char *) "vt100");
  1915. X                strcpy(umlaut, (unsigned char *) "iso-8859-1");    
  1916. X                break;
  1917. X        case '6' :    MAXX = 80;
  1918. X                MAXY = 24;
  1919. X                strcpy(terminal, (unsigned char *) "minix");
  1920. X                strcpy(umlaut, (unsigned char *) "ibm");    
  1921. X                break;
  1922. X        case '7' :    MAXX = 79;
  1923. X                MAXY = 24;
  1924. X                strcpy(terminal, (unsigned char *) "ansi");
  1925. X                strcpy(umlaut, (unsigned char *) "ibm");    
  1926. X                break;
  1927. X        case '8' :    MAXX = 80;
  1928. X                MAXY = 24;
  1929. X                strcpy(terminal, (unsigned char *) "ansi");
  1930. X                strcpy(umlaut, (unsigned char *) "ibm");    
  1931. X                break;
  1932. X        case '9' :    MAXX = 80;
  1933. X                MAXY = 23;
  1934. X                strcpy(terminal, (unsigned char *) "ansi");
  1935. X                strcpy(umlaut, (unsigned char *) "ibm");    
  1936. X                break;
  1937. X    }
  1938. X    ctrls_output();
  1939. X  }while(isin("123456789", c) != 0);
  1940. X
  1941. X  home = (unsigned char *) getenv( "HOME" );
  1942. X  sprintf(s, "%s/.wendy", home);
  1943. X  fp = fopen( s, "w" );
  1944. X  if(fp != 0){
  1945. X    fprintf(fp, "%d%c%c%c# Anzahl der Zeilen (4-24)\n", MAXY, TAB, TAB, TAB);
  1946. X    fprintf(fp, "%d%c%c%c# Anzahl der Zeichen pro Zeile (10-136)\n", MAXX, TAB, TAB, TAB);
  1947. X    fprintf(fp, "%s%c%c%c# Terminal-Emulation (ANSI, VT100, MINIX)\n", terminal, TAB, TAB, TAB);
  1948. X     fprintf(fp, "%s%c%c%c# Umlaut-Konvertierung (IBM, ISO-8859-1)\n", umlaut, TAB, TAB, TAB);
  1949. X    fclose(fp);
  1950. X  }  
  1951. X
  1952. X#else
  1953. X
  1954. X  show_status( " WENDY: Changing settings ... " );
  1955. X  
  1956. X  ansi2( "cm",  1,  3 ); printf("Active Settings:");
  1957. X
  1958. X  ansi( "mr" );
  1959. X  ansi2( "cm",  1,  5 ); printf(" 1 ");
  1960. X  ansi2( "cm",  5,  5 ); printf(" Characters per Line " );
  1961. X  ansi2( "cm",  1,  7 ); printf(" 2 ");
  1962. X  ansi2( "cm",  5,  7 ); printf(" Number of Lines     " );
  1963. X
  1964. X  ansi2( "cm", 40,  5 ); printf(" 3 ");
  1965. X  ansi2( "cm", 44,  5 ); printf(" Terminal-Emulation  " );
  1966. X  ansi2( "cm", 40,  7 ); printf(" 4 " );
  1967. X  ansi2( "cm", 44,  7 ); printf(" 'Umlaut'-Conversion " );
  1968. X
  1969. X  ansi( "me" );
  1970. X  ansi2( "cm",  1, 10); printf("Predefined Settings:");
  1971. X  
  1972. X  ansi( "mr" );
  1973. X  ansi2( "cm",  1, 12); printf(" 5 ");
  1974. X  ansi2( "cm",  5, 12); printf(" UNIX (Console)          ");
  1975. X  ansi2( "cm",  1, 14); printf(" 6 ");
  1976. X  ansi2( "cm",  5, 14); printf(" MINIX (Console)         ");
  1977. X  ansi2( "cm",  1, 16); printf(" 7 ");
  1978. X  ansi2( "cm",  5, 16); printf(" DOS (ProComm 2.4.1)     ");
  1979. X  
  1980. X  ansi2( "cm", 40, 12); printf(" 8 ");
  1981. X  ansi2( "cm", 44, 12); printf(" DOS (TELIX  3.11)       ");
  1982. X  ansi2( "cm", 40, 14); printf(" 9 ");
  1983. X  ansi2( "cm", 44, 14); printf(" DOS (Telemate 2.11)     ");
  1984. X
  1985. X  ctrls_output();
  1986. X  do{                                                            
  1987. X        ansi2( "cm", 1, 19); printf("Now, which one do you want ?    ");
  1988. X    ansi2( "cm", 30, 19 );
  1989. X    c = getch();
  1990. X    ansi2( "cm", 1, 19 );
  1991. X    switch(c){
  1992. X        case '1' :    ansi( "ce" );
  1993. X                printf("Characters per line (10-136): ");
  1994. X                sprintf(s, "%d", MAXX);
  1995. X                strcpy(s, (unsigned char *) getline( 3, 1101, '.', s));
  1996. X                MAXX = atoi(s);
  1997. X                break;
  1998. X        case '2' :    ansi( "ce" );
  1999. X                printf("Screenlines (4-24): ");
  2000. X                sprintf(s, "%d", MAXY);
  2001. X                strcpy(s, (unsigned char *) getline( 2, 1101, '.', s));
  2002. X                MAXY = atoi(s);
  2003. X                break;
  2004. X        case '3' :    ansi( "mr" );
  2005. X                ansi2( "cm",  1, 21); printf(" A ");
  2006. X                ansi2( "cm",  5, 21); printf(" ANSI (X3.64)  ");
  2007. X                ansi2( "cm", 30, 21); printf(" B ");
  2008. X                ansi2( "cm", 34, 21); printf(" DEC VT100     "); 
  2009. X                ansi2( "cm", 60, 21); printf(" C ");
  2010. X                ansi2( "cm", 64, 21); printf(" MINIX CONSOLE ");
  2011. X                ansi( "me" );
  2012. X
  2013. X                ansi2( "cm", 1, 19 ); ansi( "ce" );
  2014. X                printf("Terminal-Emulation (A-C): ");
  2015. X
  2016. X                do{
  2017. X                    d = getch();
  2018. X                }while(isin("abcABC", d) == 0);
  2019. X    
  2020. X                switch(d){
  2021. X                    case 'a' :
  2022. X                    case 'A' :    strcpy(terminal, (unsigned char *) "ansi");
  2023. X                            break;
  2024. X                    case 'b' :
  2025. X                    case 'B' :    strcpy(terminal, (unsigned char *) "vt100");
  2026. X                            break;
  2027. X                    case 'c' :
  2028. X                    case 'C' :    strcpy(terminal, (unsigned char *) "minix");
  2029. X                            break;
  2030. X                }        
  2031. X                ansi2( "cm",  1, 21); ansi( "ce" );    
  2032. X                break;
  2033. X        case '4' :    ansi( "mr" );
  2034. X                ansi2( "cm",  1, 21); printf(" A ");
  2035. X                ansi2( "cm",  5, 21); printf(" ISO-8859-1  ");
  2036. X                ansi2( "cm", 30, 21); printf(" B ");
  2037. X                ansi2( "cm", 34, 21); printf(" IBM-Conversion "); 
  2038. X                ansi( "me" );
  2039. X
  2040. X                ansi2( "cm", 1, 19 ); ansi( "ce" );
  2041. X                printf("'Umlaut'-Conversions (A-B): ");
  2042. X
  2043. X                do{
  2044. X                    d = getch();
  2045. X                }while(isin("abAB", d) == 0);
  2046. X    
  2047. X                switch(d){
  2048. X                    case 'a' :
  2049. X                    case 'A' :    strcpy(umlaut, (unsigned char *) "iso-8859-1");
  2050. X                            break;
  2051. X                    case 'b' :
  2052. X                    case 'B' :    strcpy(umlaut, (unsigned char *) "ibm");
  2053. X                            break;
  2054. X                }        
  2055. X                ansi2( "cm",  1, 21); ansi( "ce" );    
  2056. X                break;
  2057. X        case '5' :    MAXX = 80;
  2058. X                MAXY = 24;
  2059. X                strcpy(terminal, (unsigned char *) "vt100");
  2060. X                strcpy(umlaut, (unsigned char *) "iso-8859-1");    
  2061. X                break;
  2062. X        case '6' :    MAXX = 80;
  2063. X                MAXY = 24;
  2064. X                strcpy(terminal, (unsigned char *) "minix");
  2065. X                strcpy(umlaut, (unsigned char *) "ibm");    
  2066. X                break;
  2067. X        case '7' :    MAXX = 79;
  2068. X                MAXY = 24;
  2069. X                strcpy(terminal, (unsigned char *) "ansi");
  2070. X                strcpy(umlaut, (unsigned char *) "ibm");    
  2071. X                break;
  2072. X        case '8' :    MAXX = 80;
  2073. X                MAXY = 24;
  2074. X                strcpy(terminal, (unsigned char *) "ansi");
  2075. X                strcpy(umlaut, (unsigned char *) "ibm");    
  2076. X                break;
  2077. X        case '9' :    MAXX = 80;
  2078. X                MAXY = 23;
  2079. X                strcpy(terminal, (unsigned char *) "ansi");
  2080. X                strcpy(umlaut, (unsigned char *) "ibm");    
  2081. X                break;
  2082. X    }
  2083. X    ctrls_output();
  2084. X  }while(isin("123456789", c) != 0);
  2085. X
  2086. X  home = (unsigned char *) getenv( "HOME" );
  2087. X  sprintf(s, "%s/.wendy", home);
  2088. X  fp = fopen( s, "w" );
  2089. X  if(fp != 0){
  2090. X    fprintf(fp, "%d%c%c%c# Number of lines (4-24)\n", MAXY, TAB, TAB, TAB);
  2091. X    fprintf(fp, "%d%c%c%c# Characters per line (10-136)\n", MAXX, TAB, TAB, TAB);
  2092. X    fprintf(fp, "%s%c%c%c# Terminal-Emulation (ANSI, VT100, MINIX)\n", terminal, TAB, TAB, TAB);
  2093. X     fprintf(fp, "%s%c%c%c# 'Umlaut'-Conversion (IBM, ISO-8859-1)\n", umlaut, TAB, TAB, TAB);
  2094. X    fclose(fp);
  2095. X  }  
  2096. X
  2097. X#endif
  2098. X
  2099. X  ansi( terminal, -1, -1 );
  2100. X
  2101. X  ansi( "cl" );
  2102. X  show_status( version );
  2103. X  prep_screen( ypos );
  2104. X  show_screen( START );
  2105. X  x = 1; y = START;
  2106. X  ansi2( "cm", x, y );
  2107. X}
  2108. X/*      Zeile loeschen ab Cursorposition        */
  2109. Xctrlt()
  2110. X{
  2111. X  unsigned char s[LONGSTRING];
  2112. X  strcpy(s, (unsigned char *) SCREEN[y]);
  2113. X  s[(x-1)] = '\0';
  2114. X  strcat(s, "            ");
  2115. X  s[MAXX] = '\0';
  2116. X  strcpy(SCREEN[y], (unsigned char *) s);
  2117. X  strcpy(s, (unsigned char *) ATTRIB[y]);
  2118. X  s[x] = '\0';
  2119. X  strcat(s, "0000000000000000000000000000000000000000000000000000000000000000000000000000000");
  2120. X  s[MAXX] = '\0';
  2121. X  strcpy(ATTRIB[y], (unsigned char *) s);
  2122. X  show_line( SCREEN[y], ATTRIB[y], 1 ); /* 1 !!! */
  2123. X  ansi2( "cm", x, y );
  2124. X}
  2125. X/*      Sichern         */
  2126. Xctrlw( f )
  2127. Xunsigned char f[];
  2128. X{
  2129. X  FILE *fp;
  2130. X  int i;
  2131. X  int rtf = 0;
  2132. X  unsigned char s[STRING];
  2133. X  unsigned char q[LONGSTRING]; 
  2134. X
  2135. X  restore_screen( ypos );
  2136. X
  2137. X  if(BLOCK.status == BLOCKMODE){
  2138. X    block_ctrlw();
  2139. X    return;
  2140. X  }
  2141. X  strcpy(q, (unsigned char *) TEXT[lastline]);
  2142. X  while((strlen((unsigned char *) right_stripped(q)) < 2) && (TEXT[lastline][0] < 33)){
  2143. X        lastline--;
  2144. X    strcpy(q, (unsigned char *) TEXT[lastline]);
  2145. X  }
  2146. X  fp = fopen( f, "w" );
  2147. X  if(REALLY == 0) NEU = 0;
  2148. X  if(NEU != 0){
  2149. X        fprintf(fp, "Content-Type: text/richtext;\n");
  2150. X        rtf++;
  2151. X  }
  2152. X  for( i = START; i <= lastline; i++){
  2153. X        if(TEXT[i][0] == '~'){
  2154. X                strcpy(TEXT[i], (unsigned char *) strcopy(TEXT[i], 1, strlen(TEXT[i])));
  2155. X        }
  2156. X    if((FLAG[i] & is_richtext) == is_richtext){
  2157. X        fprintf(fp, "Content-Type: text/richtext; charset=iso-8859-1\n");
  2158. X        rtf++;
  2159. X    }
  2160. X    if((FLAG[i] & is_plain) == is_plain){
  2161. X        fprintf(fp, "Content-Type: text/plain; charset=iso-8859-1\n");
  2162. X        rtf = 0;
  2163. X    }
  2164. X
  2165. X    if((FLAG[i] & is_centered) == is_centered){
  2166. X        fprintf(fp, "<center>%s</center>", (unsigned char *) stripped(TEXT[i]));
  2167. X    }
  2168. X    else{
  2169. X        strcpy(q, (unsigned char *) TEXT[i]);
  2170. X        strcpy(s, (unsigned char *) right_stripped(q));
  2171. X        fputs(s, fp);
  2172. X    }
  2173. X        if(TEXT[(i+1)][0] != '~'){
  2174. X                if(rtf == 0)
  2175. X                        fprintf(fp, "\n");
  2176. X                else
  2177. X                        fprintf(fp, "<nl>\n");
  2178. X        }
  2179. X  }
  2180. X  if(NEU != 0) fprintf(fp, "Content-Type: text/plain;\n");
  2181. X  fclose(fp);
  2182. X  CHANGED = 0;
  2183. X
  2184. X#ifdef 
  2185. X  sprintf(s, " WENDY: Datei <%s> mit %d Zeilen gesichert. ", f, lastline);
  2186. X#else
  2187. X  sprintf(s, " WENDY: File <%s> with %d lines saved. ", f, lastline);
  2188. X#endif
  2189. X  show_status( s );
  2190. X  activate( RTF_attrib );
  2191. X  ansi2( "cm", x, y );
  2192. X}
  2193. X/*      Abbrechen/Beenden       */
  2194. Xctrlx( f )
  2195. X{
  2196. X  int c;
  2197. X  if(CHANGED != 0){
  2198. X        printf("%c", 7);
  2199. X#ifdef _LOCAL
  2200. X        show_status( " WENDY: Datei noch nicht gesichert! Sichern? (J/N) " );
  2201. X#else
  2202. X    show_status( " WENDY: File not saved yet! Save? (Y/N) " );
  2203. X#endif
  2204. X        ansi( "mr" );
  2205. X        c = yesno();
  2206. X        ansi( "me" );
  2207. X        if((c == 'J') || (c == 'Y')) ctrlw( f );
  2208. X  }
  2209. X  show_status( " WENDY: Bye, bye ... " );
  2210. X}
  2211. X/*      Zeile loeschen          */
  2212. Xctrly()
  2213. X{
  2214. X  int i, j, ymem = y;
  2215. X
  2216. X  if(BLOCK.status == BLOCKMODE){
  2217. X    block_ctrly();
  2218. X    return;
  2219. X  }
  2220. X  restore_screen( ypos );
  2221. X  j = ypos + y - 1;
  2222. X  for(i = j; i < lastline; i++){
  2223. X        strcpy(TEXT[i], (unsigned char *) TEXT[i+1]);
  2224. X    FLAG[i] = FLAG[i+1];
  2225. X  }
  2226. X  lastline--;
  2227. X  prep_screen( ypos );
  2228. X
  2229. X  if(ansi( "dl" ) != 0){
  2230. X    show_screen( y );
  2231. X  }
  2232. X  else{
  2233. X    y = MAXY;
  2234. X    show_line( SCREEN[MAXY], ATTRIB[MAXY], 1 );
  2235. X    y = ymem;
  2236. X    ansi2( "cm", x, y );
  2237. X  }
  2238. X}
  2239. X
  2240. END_OF_FILE
  2241.   if test 20033 -ne `wc -c <'wendy/ctrl.c'`; then
  2242.     echo shar: \"'wendy/ctrl.c'\" unpacked with wrong size!
  2243.   fi
  2244.   # end of 'wendy/ctrl.c'
  2245. fi
  2246. echo shar: End of archive 8 \(of 15\).
  2247. cp /dev/null ark8isdone
  2248. MISSING=""
  2249. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do
  2250.     if test ! -f ark${I}isdone ; then
  2251.     MISSING="${MISSING} ${I}"
  2252.     fi
  2253. done
  2254. if test "${MISSING}" = "" ; then
  2255.     echo You have unpacked all 15 archives.
  2256.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  2257. else
  2258.     echo You still must unpack the following archives:
  2259.     echo "        " ${MISSING}
  2260. fi
  2261. exit 0
  2262. exit 0 # Just in case...
  2263.