spamsink: (Default)
[personal profile] spamsink posting in [community profile] besm6
Пишем простую программу, которая что-то печатает в стандарный вывод (для контроля) и пишет то же самое во временный файл, а потом посимвольно читает из временного файла и пишет в стандарный вывод:
                                                       01.05.21 M1
 PASCAL COMPILER 15.0 (15.02.82)
 00001    1  1 PROGRAM MAIN(OUTPUT); VAR F:TEXT; I:INTEGER;
 00014    2  2 BEGIN
 00015    3  2    REWRITE(F);
 00016    4  3    FOR I := 10 TO 30 DO BEGIN
 00017    5  3       WRITELN(   I, ’:’, ’ABCDEFGHIJ’ : I);
 00026    6  3       WRITELN(F, I, ’:’, ’ABCDEFGHIJ’ : I);
 00035    7  2    END;
 00037    8  2    RESET(F);
 00041    9  2    WRITELN(’--------------------’);
 00044   10  3    WHILE NOT EOF(F) DO BEGIN
 00045   11  3       WRITE(F!);
 00050   12  3       GET(F)
 00051   13  3    END
 00064   14  0 END.
           *EXECUTE
        10:ABCDEFGHIJ
        11: ABCDEFGHIJ
        12:  ABCDEFGHIJ
        13:   ABCDEFGHIJ
        14:    ABCDEFGHIJ
        15:     ABCDEFGHIJ
        16:      ABCDEFGHIJ
        17:       ABCDEFGHIJ
        18:        ABCDEFGHIJ
        19:         ABCDEFGHIJ
        20:          ABCDEFGHIJ
        21:           ABCDEFGHIJ
        22:            ABCDEFGHIJ
        23:             ABCDEFGHIJ
        24:              ABCDEFGHIJ
        25:               ABCDEFGHIJ
        26:                ABCDEFGHIJ
        27:                 ABCDEFGHIJ
        28:                  ABCDEFGHIJ
        29:                   ABCDEFGHIJ
        30:                    ABCDEFGHIJ
--------------------
        10:ABCDEFGHIJ
   15:     ABCDEFGHIJ
    ABCDEFGHIJ
             ABCDEFGHIJ
 CDEFGHIJ
 HIJ

Налицо ужас и безумие, но ларчик открывается просто: в файле всё в порядке, и читается из него всё правильно, а к фиаско приводит всего лишь запись в стандартный вывод символа line feed (012). Если написать в 11-й строке
 00045   11  3       IF F! = CHR(012B) THEN WRITELN ELSE WRITE(F!);

то всё работает идеально.

Примечание: восклицательный знак - это символ разыменования, вводимый как @ или ^

Date: 2021-05-01 10:03 pm (UTC)
vak: (Default)
From: [personal profile] vak
Привыкли мы в юниксе, что 012 это конец строки.
Для авторов Паскаля оно не очевидно было. :)

Profile

Сообщество любителей БЭСМ-6

December 2025

S M T W T F S
 123456
78910111213
14151617181920
21222324252627
282930 31   

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 13th, 2026 11:04 am
Powered by Dreamwidth Studios