home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / das_buch / readme / makerd.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1994-05-16  |  6.6 KB  |  181 lines

  1. (* ====================================================== *)
  2. (*                    MAKERD.PAS v2.10                    *)
  3. (*              (C) 1994 J. Braun & toolbox               *)
  4. (* ------------------------------------------------------ *)
  5. (* Erzeugt die Datei READTEXT.PAS für README.PAS. Die     *)
  6. (* Quelldatei muß auf der Kommandozeile angegeben werden  *)
  7. (* und darf nicht größer als 63 KBytes sein, da die typi- *)
  8. (* sierten Konstanten sonst die Segmentgrenze der Unit    *)
  9. (* überschreiten!                                         *)
  10. (* Die Zeile für die Headline kann per DOS-Umleitung aus  *)
  11. (* einer Datei gelesen werden (bspw. via < HEADLINE.TXT)  *)
  12. (* ====================================================== *)
  13. {$A+,B-,D-,E-,F-,G+,I-,L-,N-,P-,Q-,R-,S+,T-,V+,X+,Y-}
  14. {$M 16384,0,655360}
  15. {$IFNDEF Ver70} ERROR: Falsche Compilerversion!     {$ENDIF}
  16. (* Änderung in Version 2.10: Die ^@ wurden entfernt ! *)
  17. PROGRAM MakeReadMeUnit;
  18.  
  19. USES
  20.   Dos, Strings;
  21.  
  22. {$I LINES.INC}
  23.  
  24. VAR
  25.   t          : Text;                   (* Textdatei       *)
  26.   pLineA     : ARRAY[1..5000] OF pChar;(* Zeilenmaximum   *)
  27.   j          : INTEGER;                (* Laufvariable    *)
  28.   SrcLines   : INTEGER;                (* Quellzeilen     *)
  29.   InfoLine   : STRING;                 (* Infozeile       *)
  30.   Tmp1, Tmp2 : STRING;                 (* Interimsstrings *)
  31.   sr         : SearchRec;              (* für FindFirst   *)
  32.  
  33. (* -------------------------------------------------------*)
  34.  
  35. PROCEDURE ErrOut;
  36. BEGIN
  37.   WriteLn('Quelldatei »', ParamStr(1),
  38.           '« konnte nicht geöffnet werden!');
  39.   ExitCode := 30;
  40. END;
  41.  
  42. (* -------------------------------------------------------*)
  43.  
  44. BEGIN
  45.   ExitCode := 0;
  46.   {$IFDEF DPMI}
  47.     WriteLn('Make ReadText.Pas v.2.0/P');
  48.   {$ELSE}
  49.     WriteLn('Make ReadText.Pas v.2.0');
  50.   {$ENDIF}
  51.   IF ParamCount < 1 THEN BEGIN
  52.     WriteLn;
  53.     WriteLn('Die Quelldatei muß  mit Pfad und Endung auf');
  54.     WriteLn('der DOS-Kommandozeile angegeben werden. Die');
  55.     WriteLn('Zieldatei   erhält  automatisch  den  Namen');
  56.     WriteLn('READTEXT.PAS.'^M^J);
  57.     ExitCode := 10;
  58.   END ELSE BEGIN
  59.     IF (Pos('?', ParamStr(1)) > 0) OR
  60.        (Pos('*', ParamStr(1)) > 0) THEN
  61.     BEGIN
  62.       WriteLn('WildCards sind nicht erlaubt! '
  63.             + 'Programm wird abgebrochen.');
  64.       ExitCode := 20;
  65.     END ELSE BEGIN
  66.       FindFirst(ParamStr(1), Archive + ReadOnly, sr);
  67.       IF DosError = 0 THEN BEGIN
  68.         Assign(t, ParamStr(1));
  69.         IF IOResult = 0 THEN BEGIN
  70.           Reset(t);
  71.           SrcLines := 0;
  72.  
  73.           WHILE NOT EoF(t) DO BEGIN
  74.             Inc(SrcLines);
  75.             ReadLn(t, Tmp1);
  76.             GetMem(pLineA[SrcLines], 255);
  77.                              (* --> maximale Stringlänge! *)
  78.             StrPCopy(pLineA[SrcLines], Tmp1);
  79.             (* ' -> '' *)
  80.             IF Pos(#39, Tmp1) > 0 THEN BEGIN
  81.               (* Bugfix jb / 23.2.94:             *)
  82.               (* Aus allen(!) »'« ein »''« machen *)
  83.               Tmp2 := '';
  84.               FOR j := 1 TO Length(Tmp1) DO BEGIN
  85.                 Tmp2 := Tmp2 + Tmp1[j];
  86.                 IF Tmp1[j] = #39 THEN Tmp2 := Tmp2 + #39;
  87.               END;
  88.               Tmp1 := Tmp2;
  89.               StrPCopy(pLineA[SrcLines], Tmp1);
  90.             END;
  91.  
  92.             (* Tab -> '        ' *)
  93.             IF Pos(^I, Tmp1) > 0 THEN BEGIN
  94.               Tmp2 := '';
  95.               FOR j := 1 TO Length(Tmp1) DO BEGIN
  96.                 IF Tmp1[j] = ^I THEN
  97.                   Tmp2 := Tmp2 + '        '
  98.                 ELSE
  99.                   Tmp2 := Tmp2 + Tmp1[j];
  100.               END;
  101.               Tmp1 := Tmp2;
  102.               StrPCopy(pLineA[SrcLines], Tmp1);
  103.             END;
  104.           END; (* WHILE NOT EoF(t) *)
  105.           Close(t);
  106.  
  107.           Assign(t, 'READTEXT.PAS');
  108.           Rewrite(t);
  109.  
  110.           WriteLn('Bitte den Namen für den Header eingeben',
  111.                 ' (nur eine Zeile!), mit [Enter]'^M^J,
  112.                 'abschließen');
  113.           Write('--> ');
  114.           ReadLn(InfoLine);
  115.           WriteLn;
  116.           IF Pos(#39, InfoLine) > 0 THEN
  117.             IF Pos(#39#39, InfoLine) = 0 THEN BEGIN
  118.               Tmp2 := '';
  119.               FOR j := 1 TO Length(InfoLine) DO BEGIN
  120.                 Tmp2 := Tmp2 + InfoLine[j];
  121.                 IF InfoLine[j] = #39 THEN
  122.                   Tmp2 := Tmp2 + #39;
  123.               END;
  124.               InfoLine := Tmp2;
  125.             END;
  126.  
  127.           WriteLn(t, '(* =================================='
  128.                    + '============='
  129.                    + '==================== *)');
  130.           WriteLn(t, '(*                READTEXT.PAS für RE'
  131.                    +'ADME.PAS                          *)');
  132.           WriteLn(t, '(*                     erzeugt von '
  133.                    + 'MAKE-RD        '
  134.                    + '                     *)');
  135.           WriteLn(t, '(* ================================='
  136.                    + '=============='
  137.                    + '==================== *)');
  138.           WriteLn(t, '{$A+,B-,D-,E-,F-,G-,I-,L-,N-,P-,Q-,'+
  139.                      'R-,S-,T-,V+,X+,Y-}'^M^J);
  140.           WriteLn(t, 'UNIT ReadText;'^M^J);
  141.           WriteLn(t, 'INTERFACE'^M^J);
  142.           WriteLn(t, 'CONST');
  143.           WriteLn(t, '  InfoLine    : pChar = ''',
  144.                         (* geändert 13.5.94 *)
  145.                         InfoLine, ''';');
  146.           WriteLn(t, '  NumOfLines  = ', SrcLines +
  147.                      ScreenLines, ';'^M^J);
  148.           WriteLn(t, '  README_TEXT : ARRAY[1..NumOfLines] '
  149.                    + 'OF pChar =(');
  150.  
  151.           FOR j := 1 TO SrcLines DO
  152.             IF Length(StrPas(pLineA[j])) > 0 THEN
  153.               WriteLn(t, '   ''', StrPas(pLineA[j]),''',')
  154.             ELSE
  155.               WriteLn(t, '   '''',');
  156.           Write(t, '   ');
  157.           FOR j := 1 TO ScreenLines - 13 DO
  158.             Write(t, ''''', ');
  159.           Write(t, ^M^J'   '''', '''', '''', '''', '''', '''', '''', ');
  160.           WriteLn(t, ''''', '''', '''', '''', '''', '''');'^M^J);
  161.           WriteLn(t, 'IMPLEMENTATION'^M^J'END.'^M^J);
  162.           WriteLn(t, '(* ================================'
  163.                    + '==============='
  164.                    + '==================== *)'^M^J);
  165.           Close(t);
  166.  
  167.           WriteLn('»READTEXT.PAS« aus der Datei »',
  168.                   FExpand(ParamStr(1)), '« erzeugt.');
  169.           WriteLn(SrcLines,
  170.                   ' Quellzeilen wurden umgewandelt.'^J^M);
  171.         END ELSE ErrOut;
  172.       END ELSE ErrOut;
  173.     END;
  174.   END;
  175.   Halt(ExitCode);
  176. END.
  177.  
  178. (* ====================================================== *)
  179. (*                    Ende von MAKERD.PAS                 *)
  180.  
  181.