[Back to FAQ SWAG index] [Back to Main SWAG index] [Original]

    PASCAL.FAQ             Frequently asked questions about Pascal

    The aim of this document is to give answers to frequently asked
    questions in the pascal echo. Thumb rules before asking for help are to
    look in the manuals and in the online help first. Many problems can be
    solved by just looking into either / both of them. Here are some
    topics, that come very often in the Pascal Echo.

                                     Part I
           #1: Changing the case of strings
           #2: Compiler errors
           #3: Redirection of output

    ---------------------------------------------------------------------
                                   #1 Strings

    Q1: How do I access a single char in a string ?
    Q2: How can I make a string all upper cases ?

    A1: A string is an Array[0..255] of Char, where the 0th char is the
        length of the string. To access any character in the string, you can
        write

        MyChar := String[ I ];

    A2: To map a single character to uppercase, you can use the UpCase()
        function of the run time library. To turn a whole string into upper
        cases, just use this function :

    Function UpperCase( const S : String ) : String;
    Var I : Integer;
    Begin
      { first store the length in the result }
      UpperCase[ 0 ] := S[ 0 ]
      { now translate each char in S into a upper case char in UpperCase }
      For I := 1 to Length( S ) do
        UpperCase[ I ] := UpCase( S[ I ]);
    End;

    There is a assembler implementation in the manuals ( the linking
    assembly language chaprt ), and there are many other optimized upper
    case routines out there.

    ---------------------------------------------------------------------
                               #2 Compiler Errors

    Q1: I get a "Code segment too large" error. How can I fix it ?
    Q2: I get a "Data segment too large" error. How can I fix it ?

    A1: This error means, that you have more than 64K code in one part
        of your program. To reduce the size of this code segment, you need
        to move parts of it into other units. This is possible to virtually
        unlimited units.

    A2: This error means, that you have more than 64K data in your program.
        You need to put some data on the heap ( -> GetMem / FreeMem / New
        / Dispose ) or to reduce your global data and make it local data on
        the stack.

    ---------------------------------------------------------------------
                            #3 Redirection of output

    Q1: How can I make the output of my program redirectable under DOS ?

    A1: In general, the output of TP programs _is_ redirectable, except if
        you use the CRT unit. Then you need to either reassign output to
        '' or to declare a Text variable called for example ReOutput ( for
        Redirectable Output ), and write the output to it.

    Example :

    Uses CRT;

    Begin
      WriteLn( 'This will always show up. Just a copyright.' );
      Assign( Output, '' );
      Rewrite( Output );
      WriteLn( 'This is redirectable.' );
      AssignCRT( Output );
      Rewrite( Output );
      WriteLn( 'And this will alyways show up again.' );
    End.

    There are some myths that setting DirectVideo to False would result in
    redirectable output even when using CRT, or that TP _always_ writes
    directly to the screen, and that TP output is _never_ redirectable. You
    can ignore thos myths, TP writes to the screen using DOS, _except_ if
    you use the unit CRT. Then TP writes directly to the screen. If you set
    the variable DirectVideo to False, TP uses BIOS calls to write to the
    screen.

[Back to FAQ SWAG index] [Back to Main SWAG index] [Original]