home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / readme / makerd.pas < prev    next >
Pascal/Delphi Source File  |  1994-03-03  |  7KB  |  180 lines

  1. (* ====================================================== *)
  2. (*                    MAKERD.PAS v2.0                     *)
  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.  
  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^M^J);
  140.           WriteLn(t, 'UNIT ReadText;');
  141.           WriteLn(t, 'INTERFACE');
  142.           WriteLn(t, 'CONST'^M^J);
  143.           WriteLn(t, '  InfoLine : STRING[80] = ''',
  144.                         InfoLine, ''';');
  145.           WriteLn(t, '  NumOfLines  = ', SrcLines +
  146.                      ScreenLines, ';'^M^J);
  147.           WriteLn(t, '  README_TEXT : ARRAY[1..NumOfLines] '
  148.                    + 'OF pChar =(');
  149.  
  150.           FOR j := 1 TO SrcLines DO
  151.             IF Length(StrPas(pLineA[j])) > 0 THEN
  152.               WriteLn(t, '   ''', StrPas(pLineA[j]),'''^@,')
  153.             ELSE
  154.               WriteLn(t, '   ^@,');
  155.           Write(t, '   ');
  156.           FOR j := 1 TO ScreenLines - 13 DO
  157.             Write(t, '^@, ');
  158.           Write(t, ^M^J'   ^@, ^@, ^@, ^@, ^@, ^@, ^@, ');
  159.           WriteLn(t, '^@, ^@, ^@, ^@, ^@, ^@);'^M^J);
  160.           WriteLn(t, 'IMPLEMENTATION'^M^J'END.'^M^J);
  161.           WriteLn(t, '(* ================================'
  162.                    + '==============='
  163.                    + '==================== *)'^M^J);
  164.           Close(t);
  165.  
  166.           WriteLn('»READTEXT.PAS« aus der Datei »',
  167.                   FExpand(ParamStr(1)), '« erzeugt.');
  168.           WriteLn(SrcLines,
  169.                   ' Quellzeilen wurden umgewandelt.'^J^M);
  170.         END ELSE ErrOut;
  171.       END ELSE ErrOut;
  172.     END;
  173.   END;
  174.   Halt(ExitCode);
  175. END.
  176.  
  177. (* ====================================================== *)
  178. (*                    Ende von MAKERD.PAS                 *)
  179.  
  180.