home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 07 / ldm / memo.pas < prev    next >
Pascal/Delphi Source File  |  1990-03-29  |  19KB  |  551 lines

  1. PROGRAM MEMO;
  2.  
  3. USES crt,dos,memoerg,printer;
  4.  
  5. CONST dateiname : pathstr = 'MEMO.DAT';
  6.       leer = '                         ';
  7.       dx   = 45;   { dx und dy sind entscheidend für die  }
  8.       dy   = 7;    { Größe der Karteikarten; dabei darf   }
  9.                    { dx höchstens 66 sein, und dy höchs-  }
  10.                    { tens 17; -> am besten ausprobieren ! }
  11.       bzahl= (17-dy) div 2 +1;
  12.  
  13.       msg1 = chr(27)+' '+chr(26)+'  Home  End  '+
  14.              'BS  DEL  ESC-Abbruch  RETURN-Ende  ';
  15.       msg2 = '      '+chr(24)+' '+chr(25)+' '+chr(26)+' '+
  16.              chr(27)+'  Home  End  BS  INS  DEL  ^Y  ^N  '+
  17.              'RET  ESC-Abbruch  F2-Speichern  ';
  18.  
  19. TYPE chararray = Array [1..dx*dy] of char;
  20.      datensatz = RECORD
  21.                    titel : s25;
  22.                    txt   : chararray;
  23.                    mark  : boolean;
  24.                  END;
  25.  
  26. VAR dfile       : file of datensatz;
  27.     ds          : datensatz;
  28.     zeile,spalte: byte;
  29.     aus,ende,neu: boolean;
  30.     ch          : char;
  31.     taste,z     : integer;
  32.     satznummer  : word;
  33.     maxdat      : word;
  34.     dummy       : pathstr;
  35.     trenner     : Set of char;
  36.  
  37. PROCEDURE BildAufbau;
  38. BEGIN
  39.   For zeile := 2 to 24 DO
  40.     For spalte := 1 to 80 DO
  41.   BEGIN
  42.     screen^[zeile,spalte].ch := chr(176);
  43.     screen^[zeile,spalte].attr := hintergrundfarbe;
  44.   END;
  45.   farbe (grundfarbe);
  46.   gotoxy (1,1); clreol; write (' Datei: '+dateiname);
  47.   wrtxy (33,1,'»»» MEMO  V 1.0 «««');
  48.   gotoxy (62,1); write ('Datensätze: ',maxdat:3);
  49. END;
  50.  
  51. { Die 4 folgenden Routinen sind für die }
  52. { Dateibearbeitung zuständig :          }
  53.  
  54. PROCEDURE LiesDatensatz (nr: word; VAR dat: datensatz);
  55. BEGIN seek (dfile,nr-1); read (dfile,dat); END;
  56.  
  57. PROCEDURE SchreibeDatenSatz (nr: word; dat: datensatz);
  58. BEGIN seek (dfile,nr-1); write (dfile,dat); END;
  59.  
  60. PROCEDURE DatensatzEinfuegen (dat: datensatz);
  61. VAR i,j: word; d : datensatz; fertig: boolean;
  62. BEGIN
  63.   i := 1;  fertig := false;
  64.   While (i <= maxdat) and not fertig DO BEGIN
  65.     LiesDatensatz (i,d);
  66.     IF d.titel < dat.titel Then inc(i) ELSE fertig := true;
  67.   END;
  68.   For j := maxdat downto i DO BEGIN
  69.     LiesDatensatz (j,d); SchreibeDatensatz (j+1,d);
  70.   END;
  71.   SchreibeDatensatz (i,dat);
  72. END;
  73.  
  74. PROCEDURE DatensatzEntfernen (pos: word);
  75. VAR d0: datensatz;
  76. BEGIN
  77.   While pos < maxdat DO BEGIN
  78.     LiesDatensatz (pos+1,d0);
  79.     SchreibeDatensatz (pos,d0); inc (pos);
  80.   END;
  81.   seek (dfile,maxdat-1); truncate(dfile); dec(maxdat);
  82. END;
  83.  
  84. { Prozedur zum Einlesen, bzw. Editieren der Memo-Texte }
  85. PROCEDURE LiesCharArray (x1,y1: byte; VAR txt: chararray;
  86.                                          VAR ok: boolean);
  87. VAR x2,y2,x,y,i,wi,sz: byte;
  88.     b                : char;
  89.     insert           : boolean;
  90.  
  91.   PROCEDURE ArraySchieben (px,py: byte; art: byte);
  92.   VAR k,pos: word;
  93.   BEGIN
  94.     k := 1;
  95.     For zeile := y1 to y2 DO
  96.       For spalte := x1 to x2-1 DO
  97.     BEGIN txt[k] := screen^[zeile,spalte].ch; inc(k); END;
  98.     pos := (px-x1+1) + (py-y1)*dx;
  99.     IF art = 1 Then
  100.     BEGIN
  101.       For k := dx*dy downto pos+1 do txt[k] := txt[k-1];
  102.       txt[pos] := ' ';
  103.     END
  104.     ELSE IF art = 2 Then
  105.     BEGIN
  106.       For k := pos to (dx*dy)-1 do txt[k] := txt[k+1];
  107.       txt[dx*dy] := ' ';
  108.     END;
  109.     k := 1;
  110.     For zeile := y1 to y2 DO
  111.       For spalte := x1 to x2-1 DO
  112.     BEGIN screen^[zeile,spalte].ch := txt[k]; inc(k); END;
  113.   END;
  114.  
  115. BEGIN
  116.   x2 := x1+dx; y2 := y1+dy-1; x := x1; y := y1;
  117.   trenner := [' ',',','.','-','!','?',';',':'];
  118.   insert := true;
  119.   gotoxy (x,y);
  120.   REPEAT
  121.     getcode (taste);
  122.     CASE taste of
  123.       13     : IF y < y2 Then BEGIN inc(y); x := x1; END
  124.                          ELSE x := x1;
  125.       14     : BEGIN          { ^N = Zeile einfügen }
  126.                  For zeile := y2 downto y+1 DO
  127.                    For spalte := x1 to x2-1 DO
  128.                     screen^[zeile,spalte].ch :=
  129.                       screen^[zeile-1,spalte].ch;
  130.                  For i:=x1 to x2-1 DO screen^[y,i].ch:=' ';
  131.                END;
  132.       25     : BEGIN           { ^Y = Zeile löschen }
  133.                  For zeile := y to y2-1 DO
  134.                   For spalte := x1 to x2-1 DO
  135.                     screen^[zeile,spalte].ch :=
  136.                       screen^[zeile+1,spalte].ch;
  137.                  For i:=x1 to x2-1 DO screen^[y2,i].ch:=' ';
  138.                END;
  139.       32     : IF x < x2 Then
  140.                BEGIN
  141.                  IF insert Then ArraySchieben (x,y,1);
  142.                  write (chr(taste)); inc(x);
  143.                END
  144.                ELSE IF (x = x2) Then IF (y < y2) Then
  145.                BEGIN x := x1; inc(y); END
  146.                ELSE BEGIN dec(x); beep; END;
  147.       33..255: BEGIN
  148.                  IF x < x2 Then
  149.                  BEGIN
  150.                    IF insert Then ArraySchieben (x,y,1);
  151.                    write (chr(taste));
  152.                  END;
  153.                  IF (x = x2) Then
  154.                  BEGIN
  155.                    IF y < y2 Then
  156.                    BEGIN
  157.                      If not (screen^[y,x-1].ch in trenner)
  158.                      Then BEGIN
  159.                        i := x;
  160.                        REPEAT
  161.                          dec(i);
  162.                        UNTIL (screen^[y,i].ch in trenner)
  163.                              or (i=x1);
  164.                        sz := 1;
  165.                        For wi := i+1 to x2-1 do
  166.                        BEGIN
  167.                           b := screen^[y,wi].ch;
  168.                           screen^[y,wi].ch := ' ';
  169.                           IF insert Then
  170.                             ArraySchieben (x1+sz,y+1,1);
  171.                           wrtxy (x1+wi-i-1,y+1,b);
  172.                           inc(sz);
  173.                        END;
  174.                        x := x1+sz-1; inc(y);
  175.                        wrtxy (x,y,chr(taste));
  176.                      END
  177.                      ELSE BEGIN
  178.                        x := x1; inc(y);
  179.                        wrtxy (x,y,chr(taste));
  180.                      END;
  181.                    END ELSE BEGIN dec(x); beep; END;
  182.                  END;
  183.                  inc(x);
  184.                END;
  185.       1072   : IF y > y1 Then dec(y) ELSE beep;
  186.       1080   : IF y < y2 Then inc(y) ELSE beep;
  187.       1071   : x := x1;
  188.       1079   : BEGIN
  189.                  x := x2;
  190.                  While screen^[y,x-1].ch = ' ' DO dec(x);
  191.                END;
  192.       1077   : IF x < x2 Then inc(x) ELSE IF y < y2 Then
  193.                BEGIN x := x1; inc(y); END ELSE beep;
  194.       1075   : IF x > x1 Then dec(x) ELSE IF y > y1 Then
  195.                BEGIN x := x2; dec(y); END ELSE beep;
  196.       1082   : IF insert = true Then Insert := false
  197.                                 Else insert := true;
  198.       1083   : ArraySchieben (x,y,2);
  199.       8      : IF x > x1 Then
  200.                BEGIN dec(x); ArraySchieben (x,y,2); END;
  201.     END;
  202.     gotoxy (x,y);
  203.    UNTIL (taste = 1060) or (taste = 27);
  204.    IF taste = 1060 Then
  205.    BEGIN
  206.      ok := true; z := 1;
  207.      For zeile := y1 to y2 DO
  208.       For spalte := x1 to x2-1 DO
  209.     BEGIN txt[z] := screen^[zeile,spalte].ch; inc(z); END;
  210.   END
  211.   ELSE IF taste = 27 Then ok := false;
  212. END;
  213.  
  214. PROCEDURE Eingabe (VAR dat: datensatz; VAR aus: boolean);
  215. VAR i: byte; z: word; ok: boolean;
  216. BEGIN
  217.   gotoxy (1,25); clreol; wrtxy (29,25,msg1);
  218.   farbe (eingabefarbe);
  219.   Rahmen (14,6,14+dx+1,6+dy+3,2,true,true);
  220.   wrtxy (16,7,'Stichwort: ');  dat.titel := '';
  221.   c_on; readstr (27,7,dat.titel,neu);
  222.   IF neu Then
  223.   BEGIN
  224.     aus := false; gotoxy (16,7); write (dat.titel);
  225.     For i := length(dat.titel) to dx-6 do write (' ');
  226.     wrtxy (1,25,msg2);
  227.     For z := 1 to dx*dy do dat.txt[z] := ' ';
  228.     Lieschararray (15,9,dat.txt,ok);
  229.     IF not ok Then aus := true;
  230.     dat.mark := false;
  231.   END
  232.   ELSE aus := true;
  233.   farbe (grundfarbe); c_off;
  234. END;
  235.  
  236. PROCEDURE Drucken;
  237. VAR sz: word; pl: byte;
  238.  
  239.   PROCEDURE Drucke (d : datensatz; VAR p: byte);
  240.   VAR i,j: byte;
  241.   BEGIN
  242.     IF p = bzahl+1 Then  { dann neue Seite }
  243.     BEGIN p := 0; write (lst,#12); END;
  244.     write (lst,chr(218));
  245.     For i := 1 to dx DO write (lst,chr(196));
  246.     writeln (lst,chr(191)); write (lst,chr(179));
  247.     write (lst,d.titel);
  248.     For i := length(d.titel)+1 to dx DO write (lst,' ');
  249.     writeln (lst,chr(179)); write (lst,chr(195));
  250.     For i := 1 to dx DO write (lst,chr(196));
  251.     writeln (lst,chr(180));
  252.     z := 1;
  253.     For j := 1 to dy DO BEGIN
  254.       write (lst,chr(179));
  255.       For i := 1 to dx DO
  256.       BEGIN write (lst,d.txt[z]); inc(z); END;
  257.       writeln (lst,chr(179));
  258.     END;
  259.     write (lst,chr(192));
  260.     For i := 1 to dx DO write (lst,chr(196));
  261.     writeln (lst,chr(217));
  262.   END;
  263.  
  264. BEGIN
  265.   pl := 0; farbe (abfragefarbe);
  266.   rahmen (20,7,60,13,2,false,true);
  267.   wrtxy (24,9,'A - Alle Datensätze drucken  ');
  268.   wrtxy (24,10,'M - Markierte Datensätze drucken  ');
  269.   wrtxy (24,11,'ESC - Abbruch');
  270.   REPEAT
  271.     ch := upcase(readkey);
  272.   UNTIL ch in ['A','M',#27];
  273.   farbe (grundfarbe);
  274.   CASE ch of
  275.     'A' : BEGIN
  276.             For sz := 1 to maxdat DO BEGIN
  277.               inc(pl); liesdatensatz (sz,ds);
  278.               drucke (ds,pl);
  279.             END;
  280.           END;
  281.     'M' : BEGIN
  282.             For sz := 1 to maxdat DO BEGIN
  283.               liesdatensatz (sz,ds);
  284.               IF ds.mark = true Then
  285.               BEGIN inc(pl); drucke (ds,pl); END;
  286.             END;
  287.           END;
  288.   END;
  289. END;
  290.  
  291. PROCEDURE NixDa;
  292. BEGIN
  293.   farbe (abfragefarbe);
  294.   Rahmen (14,7,66,13,2,false,true);
  295.   wrtxy (16,9,'Die Datei enthält bisher '+
  296.               'noch keine Datensätze!');
  297.   wrtxy (16,11,'Bitte <ESC> drücken ...');
  298.   escape; farbe (grundfarbe);
  299. END;
  300.  
  301. PROCEDURE NeueDatei;
  302. BEGIN
  303.   Rahmen (10,6,70,12,2,false,true);
  304.   wrtxy (12,8,'Neue Datei einlesen, bzw. erzeugen :');
  305.   wrtxy (12,10,'Dateiname:');
  306.   c_on; gotoxy (23,10); readln (dummy); c_off;
  307.   IF dummy <> '' Then
  308.   BEGIN
  309.     close (dfile); dateiname := dummy;
  310.     {$I-} assign (dfile,dateiname);
  311.     reset (dfile); {$I+}
  312.     IF ioresult <> 0 Then rewrite(dfile);
  313.     maxdat := filesize(dfile);
  314.     IF maxdat = 0 Then nixda;
  315.   END;
  316. END;
  317.  
  318. PROCEDURE EintragZeigen (x1,y1,x2,y2: byte;
  319.                          nr: word; art: byte);
  320. VAR z: word;
  321. BEGIN
  322.   z := 1;  LiesDatensatz (nr,ds);
  323.   farbe (aktkartenfarbe);
  324.   Rahmen (x1,y1,x2,y2,art,true,false);
  325.   wrtxy (x1+2,y1+1,ds.titel);
  326.   IF ds.mark Then wrtxy (x2-2,y1+1,chr(251));
  327.   For zeile := y1+3 to y2-1 DO
  328.     For spalte := x1+1 to x2-1 DO
  329.   BEGIN screen^[zeile,spalte].ch := ds.txt[z]; inc(z); END;
  330.   farbe (grundfarbe);
  331. END;
  332.  
  333. PROCEDURE Bearbeiten;
  334. VAR x1,y1,i        : byte;
  335.     sz,count,anzahl: word;
  336.     stichwort      : s25;
  337.     gefunden,ok    : boolean;
  338.     merktext       : chararray;
  339.  
  340.   PROCEDURE HintereKartenZeigen;
  341.   VAR i: byte;
  342.   BEGIN
  343.     IF maxdat >= sz Then BEGIN
  344.       count := 0;
  345.       For i := 1 to kleiner (anzahl-1,maxdat-sz) DO BEGIN
  346.         LiesDatensatz (sz+i,ds);
  347.         wrtxy(x1+2+(2*i),y1+1-(2*i),leer);
  348.         wrtxy(x1+2+(2*i),y1+1-(2*i),ds.titel);
  349.         IF ds.mark Then
  350.           wrtxy (x1+dx-1+(2*i),y1+1-(2*i),chr(251))
  351.         ELSE wrtxy (x1+dx-1+(2*i),y1+1-(2*i),' ');
  352.         inc(count);
  353.       END;
  354.       For i := count+1 to anzahl-1 DO BEGIN
  355.         LiesDatensatz (i-count,ds);
  356.         wrtxy(x1+2+(2*i),y1+1-(2*i),leer);
  357.         wrtxy(x1+2+(2*i),y1+1-(2*i),ds.titel);
  358.         IF ds.mark Then
  359.           wrtxy (x1+dx-1+(2*i),(y1+1)-(2*i),chr(251))
  360.         ELSE wrtxy (x1+dx-1+(2*i),(y1+1)-(2*i),' ');
  361.       END;
  362.     END;
  363.   END;
  364.  
  365. BEGIN
  366.   gotoxy (1,25); clreol;
  367.   wrtxy (2,25,'F1-Hilfe  Eingabe  Bearbeiten  Löschen  '+
  368.               'Mark.  Suchen  Datei  Print   F10-Ende');
  369.   farbexy (12,25,buchstabenfarbe);
  370.   farbexy (21,25,buchstabenfarbe);
  371.   farbexy (33,25,buchstabenfarbe);
  372.   farbexy (42,25,buchstabenfarbe);
  373.   farbexy (49,25,buchstabenfarbe);
  374.   farbexy (57,25,buchstabenfarbe);
  375.   farbexy (64,25,buchstabenfarbe);
  376.   x1 := (80-dx) div 2;  y1 := 3;  sz := bzahl;
  377.   While sz > maxdat DO
  378.   BEGIN dec(sz); dec(x1,2); inc(y1,2); END;
  379.   anzahl := sz;
  380.   farbe (kartenfarbe);
  381.   For count := anzahl downto 1 DO
  382.   BEGIN
  383.     IF count = 1 Then
  384.       eintragzeigen (x1,y1,x1+dx+1,y1+dy+3,sz,2)
  385.     ELSE
  386.     Rahmen (x1,y1,x1+dx+1,y1+dy+3,1,true,false);
  387.     dec(x1,2);  inc(y1,2);  dec(sz);
  388.   END;
  389.   farbe (grundfarbe);
  390.   x1 := ((80-dx) div 2)-(bzahl-1)*2;
  391.   y1 := 3+(bzahl-1)*2;   sz := 1;
  392.   HintereKartenZeigen;
  393.   REPEAT
  394.     getcode(taste);
  395.     CASE taste of
  396.       1059 :  Hilfe;
  397.       1072,
  398.       1073 :  IF maxdat > 0 Then
  399.               BEGIN               { Vorwärts blättern }
  400.                 IF sz < maxdat Then inc(sz) ELSE sz := 1;
  401.                 eintragzeigen (x1,y1,x1+dx+1,y1+dy+3,sz,2);
  402.                 HintereKartenZeigen;
  403.               END;
  404.       1080,
  405.       1081 :  IF maxdat > 0 Then
  406.               BEGIN              { Rückwärts blättern }
  407.                 IF sz > 1 Then dec(sz) ELSE sz := maxdat;
  408.                 eintragzeigen (x1,y1,x1+dx+1,y1+dy+3,sz,2);
  409.                 HintereKartenZeigen;
  410.               END;
  411.       1071 :  IF maxdat > 0 Then
  412.               BEGIN             { Home = An Dateianfang }
  413.                 sz := 1;
  414.                 eintragzeigen(x1,y1,x1+dx+1,y1+dy+3,sz,2);
  415.                 HintereKartenZeigen;
  416.               END;
  417.       83,115: IF maxdat > 0 Then
  418.               BEGIN                { Stichwort suchen }
  419.                 s_mem := screen^; gefunden := false;
  420.                 gotoxy (1,25); clreol;
  421.                 write (' Gesuchtes Stichwort : ');
  422.                 c_on; beep; stichwort := '';
  423.                 readstr (24,25,stichwort,neu);
  424.                 screen^ := s_mem; c_off;
  425.                 IF neu Then
  426.                 BEGIN
  427.                   sz := 1;
  428.                   REPEAT
  429.                     LiesDatensatz (sz,ds);
  430.                     IF ds.titel = stichwort Then
  431.                       gefunden := true ELSE inc(sz);
  432.                   UNTIL gefunden or (ds.titel>stichwort) or
  433.                         (sz > maxdat);
  434.                   IF (not gefunden) and (sz>1) Then dec(sz);
  435.                  eintragzeigen (x1,y1,x1+dx+1,y1+dy+3,sz,2);
  436.                   HintereKartenZeigen;
  437.                 END;
  438.               END;
  439.       77,109: IF maxdat > 0 Then
  440.               BEGIN                { Markierung an/aus }
  441.                 LiesDatensatz (sz,ds);
  442.                 ds.mark := not ds.mark;
  443.                 schreibedatensatz (sz,ds);
  444.                IF ds.mark Then wrtxy (x1+dx-1,y1+1,chr(251))
  445.                            ELSE wrtxy (x1+dx-1,y1+1,' ');
  446.               END;
  447.       76,108: IF maxdat > 0 Then
  448.             BEGIN                      { Löschen }
  449.            s_mem := screen^; farbe (abfragefarbe);
  450.            rahmen (20,7,60,13,2,false,true);
  451.            wrtxy (24,9,'A - Aktuellen Datensatz löschen');
  452.            wrtxy (24,10,'M - Markierte Datensätze löschen');
  453.            wrtxy (24,11,'ESC - Abbruch');
  454.            REPEAT
  455.                   ch := upcase(readkey);
  456.                 UNTIL ch in ['A','M',#27];
  457.                 farbe (grundfarbe);
  458.                 screen^ := s_mem;
  459.                 CASE ch of
  460.                   'A': BEGIN
  461.                          datensatzentfernen (sz);
  462.                          BildAufbau; Bearbeiten;
  463.                        END;
  464.                   'M': BEGIN
  465.                          sz := 1;
  466.                          While sz <= maxdat DO
  467.                          BEGIN
  468.                            LiesDatensatz (sz,ds);
  469.                            IF ds.mark Then
  470.                              datensatzentfernen (sz)
  471.                            ELSE inc(sz);
  472.                          END;
  473.                          BildAufbau; Bearbeiten;
  474.                       END;
  475.                 END;
  476.               END;
  477.       66,98 : IF maxdat > 0 Then
  478.               BEGIN                { Datensatz editieren }
  479.                 s_mem := screen^; gotoxy (1,25); clreol;
  480.                 beep; wrtxy (29,25,msg1);
  481.                 c_on; LiesDatensatz (sz,ds);
  482.                 merktext := ds.txt;
  483.                 farbe (aktkartenfarbe);
  484.                 readstr(x1+2,y1+1,ds.titel,neu);
  485.                 farbe (grundfarbe);
  486.                 wrtxy (1,25,msg2);
  487.                 farbe (aktkartenfarbe);
  488.                 LiesCharArray (x1+1,y1+3,ds.txt,ok);
  489.                 IF not ok Then ds.txt := merktext;
  490.                 farbe (grundfarbe); c_off;
  491.                 IF neu Then
  492.                 BEGIN
  493.                   datensatzentfernen (sz);
  494.                   datensatzeinfuegen (ds); inc(maxdat);
  495.                 END
  496.                 ELSE SchreibeDatensatz (sz,ds);
  497.                 screen^ := s_mem;
  498.                 eintragzeigen (x1,y1,x1+dx+1,y1+dy+3,sz,2);
  499.                 HintereKartenZeigen;
  500.               END;
  501.       1082 :  IF maxdat > 0 Then
  502.               BEGIN      { Alle Datensätze markieren }
  503.                 For i := 1 to maxdat DO BEGIN
  504.                   LiesDatensatz (i,ds); ds.mark := true;
  505.                   SchreibeDatensatz (i,ds);
  506.                 END;
  507.                 Bearbeiten;
  508.               END;
  509.       1083 :  IF maxdat > 0 Then
  510.               BEGIN      { Alle Markierungen löschen }
  511.                 For i := 1 to maxdat DO BEGIN
  512.                   LiesDatensatz (i,ds); ds.mark := false;
  513.                   SchreibeDatensatz (i,ds);
  514.                 END;
  515.                 Bearbeiten;
  516.               END;
  517.       69,101: BEGIN
  518.                 REPEAT    { Datensatz eingeben }
  519.                   Eingabe (ds,aus);
  520.                   IF not aus Then BEGIN
  521.                     DatensatzEinfuegen(ds); inc(maxdat);
  522.                     gotoxy (74,1); write (maxdat:3);
  523.                   END
  524.                 UNTIL aus;
  525.                 bildaufbau; bearbeiten;
  526.               END;
  527.       80,112: IF maxdat > 0 Then
  528.               BEGIN        { Karteikarten drucken }
  529.                 s_mem:=screen^; Drucken; screen^:=s_mem;
  530.               END;
  531.       68,100: BEGIN   { Neue Datei einlesen }
  532.                 NeueDatei; Bildaufbau; bearbeiten;
  533.               END;
  534.     END;
  535.   UNTIL taste = 1068;
  536. END;
  537.  
  538. { ---------------- Hauptprogramm ------------------ }
  539.  
  540. BEGIN
  541.   {$I-} assign (dfile,dateiname); reset (dfile); {$I+}
  542.   IF ioresult <> 0 Then rewrite (dfile);
  543.   ende := false;  farbe (grundfarbe); clrscr; c_off;
  544.   maxdat := filesize(dfile);
  545.   bildaufbau;
  546.   IF maxdat = 0 Then
  547.   BEGIN s_mem := screen^; NixDa; screen^ := s_mem; END;
  548.   Bearbeiten;
  549.   clrscr; close (dfile);
  550. END.
  551.