                    .  
                    =======================

                           
                           ---------

            -
 -80.        
        
     CP/M-80.   -
          (BNE).
          -
-80.

                          
                          ----------

     1.        . . . . . . . . . . . . . . .
     2.        . . . . . . . . . . . . . . .
     2.1.     , ,   
     2.2.      . . . . . . . . . . . .
     2.3.       . . . . . . . . . .
     2.3.1.    . . . . . . . . . . . . . . . .
     2.3.2.    . . . . . . . . . . . . . . .
     2.3.3.    . . . . . . . . . . . . . .
     2.3.4.    CHAR. . . . . . . . . . . . . . . . . .
     2.3.5.    BOOLEAN . . . . . . . . . . . . . . . .
     2.3.6.    INTEGER . . . . . . . . . . . . . . . .
     2.3.7.    REAL. . . . . . . . . . . . . . . . . .
     2.3.8.    BYTE. . . . . . . . . . . . . . . . . .
     2.3.9.    WORD. . . . . . . . . . . . . . . . . .
     2.3.10.   STRING. . . . . . . . . . . . . . . . .
     2.3.11.    . . . . . . . . . . . . . . .
     2.3.12.   . . . . . . . . . . . . . .
     2.3.13.   . . . . . . . . . . . . . . . . . .
     2.3.14.  . . . . . . . . . . . . . . . . . . .
     2.3.15.   . . . . . . . . . . . . . . . . .
     2.3.16.   . . . . . . . . . . . . . . . . . . .
     2.3.17.   . . . . . . . . . . . . . . . . .
     2.3.18.    . . . . . . . . . . . .
     2.4.         . . . . .
     2.4.1.     . . . . . . . . . . . . .
     2.4.2.     . . . . . . . . . .
     2.4.3.    . . . . . . . . . . . .
     2.4.4.     . . . . . . . . . . . . . .
     2.4.5.     . . . . . . . . . . . . . . .
     2.4.6.    . . . . . . . . . . . .
     2.5.      . . . . . . . . . . . . . . . . .
     2.6.     . . . . . . . . . . . . . . . . . .
     2.6.1.    . . . . . . . . . . . . .
     2.6.2.      . . . . . . . . . .
     2.6.3.     . . . . . . . . . . .
     2.6.4.    . . . . . . . . . . . . .
     2.7.       . . . . . . . . . . . . .
     2.8.      . . . . . . . . . . . . . . . . .
     2.8.1.     . . . . . . . . . . . . .
     2.8.1.1.  . . . . . . . . . . .
     2.8.1.2.  . . . . . . . . . . . . .
     2.8.1.3.  . . . . . . . . . . . . .
     2.8.2.     . . . . . . . . . . .
     2.8.2.1.   . . . . . . . . . . . .
     2.8.2.2.  . . . . . . . . . . . . .
     2.8.2.3.   . . . . . . . . . . . . . .
     2.8.2.4.   . . . . . . . . . . .
     2.9.       . . . . . . . . . . . . .
     2.10.     . . . . . . . . . . . . . .
     3.          . . . . .
     3.1.      . . . . . . . . . . . . . . . . .
     3.2.       . . . . . . .
     3.3.      . . . . . . . . . . . . . . . . .
     4.          . . . . . . . . . .
     4.1.       . . . . . . . . . . . . . . . .
     4.2.      READ  READLN . . . . . . . . . .
     4.3.      WRITE  WRITELN . . . . . . . . .
     5.         . . . . . . . . . . . .
     5.1.       . . . . . . . . .
     5.2.      EXIT. . . . . . . . . . . . . . .
     5.3.     o      . . . .
     5.4.      . . . . . . . . . . . . . . .
     5.5.      HI, LO, SWAP. . . . . . . . . . . .
     5.6.      ADDR. . . . . . . . . . . . . . . .
     5.7.      SIZEOF. . . . . . . . . . . . . . .
     5.8.      FILLCHAR. . . . . . . . . . . . .
     5.9.      LENGTH. . . . . . . . . . . . . . .
     5.10.     CONCAT. . . . . . . . . . . . . . .
     5.11.     COPY. . . . . . . . . . . . . . . .
     5.12.     POS . . . . . . . . . . . . . . . .
     5.13.     DELETE. . . . . . . . . . . . . .
     5.14.     INSERT. . . . . . . . . . . . . .
     5.15.    a ASSIGN. . . . . . . . . . . . . .
     5.16.     GNB  WNB . . . . . . . . . . . . .
     5.17.     BLOCKREAD . . . . . . . . . . . .
     5.18.     BLOCKWRITE. . . . . . . . . . . .
     5.19.     OPEN, OPENX . . . . . . . . . . .
     5.20.     CLOSE, CLOSEDEL . . . . . . . . .
     5.21.     PURGE . . . . . . . . . . . . . .
     5.22.     SEEKREAD. . . . . . . . . . . . .
     5.23.     SEEKWRITE . . . . . . . . . . . .
     5.24.     READHEX  WRITEHEX. . . . . . . .
     5.25.     IORESULT. . . . . . . . . . . . . .
     5.26.     MEMAVAIL, MAXAVAIL. . . . . . . . .
     5.27.     ,   
                . . . . . . . . . . . . . . .
     5.28.     . . . . . . . . . . . .
     5.29.     INLINE  . . .
     5.30.       
              . . . . . . . . . . . . . . . . . .


                       1.  
                       -----------------

         -80   -
  ,    -
        
 .    -80 :

     1)  ,    :
      -   ;
      -   ;
      -   ;
      -   ;
      -     ;
      -  .

       ,   ;

     2)       
;

     3)      :  ,
, , , , , . -
    : , , ,
.     .   
  ;

     4)   "&"(),  "!",  "/" ()  "\", "?"
()  ;

     5)       .    
  = 1,  - 1;

     6)   ELSE    CASE;

     7)         .
    ,   ;

     8) , ,     ,
    .        
   .     
     ;

     9)    ,    
   ;

     10)     ;

     11)    -  (-
  - ).

      -80  "@"      -
        
 .   ,   -
  ,    "^" -
  "@",      "@" -
   ,     ,   
      "@"  -
     .     
"!"  .


                       2.  
                       -----------------

       2.1. , ,   
       ------------------------------------------------

<> ::=<> <    >
<  
  > ::=<>  ! <> ! _
<>             ::= A!B!C!D!E!F!G!H!I!J!K!L!M!N!O!P!
                        Q!R!S!T!U!V!W!X!Y!Z!@
<>             ::= 0!1!2!3!4!5!6!7!8!9!A!B!C!D!E!F
< >::= +!-!*!/!=!<>!<!>!<=!>=!(!)![!]!..!
                         ! !:=!.!,!;!:!'!^!\!?!!!"!$!#!&
                         !<>!
<
 >              ::=<> <>
<  >   ::=  $ < >   !
                           < >
<       ::=<  >.<
  >             > ! <  >. <-
                         > E <> ! <-
                          > E <>
<  >   ::=<  > ! <
                         >
<>           ::=<  > ! <><
                         >
<>              ::=  + ! -
<>            ::=  ' <>  <>  '  !  ''
<>            ::= < >
<>       ::= (*< >*)

          "(*"  "*)"  -
   "{"  "}".
           8 -
.         
(  ),    .  -
    ,    -
 (.. "A_B"  "AB").   -
      "@".    
    "@".     -
,   .  "$"    -
,     . <>   
: "A", "B", "C", "D", "E", "F".
         ,   .

     e  -80:
     MOD, DIV, NIL, IN, OR, AND, NOT, IF, THEN, ELSE, CASE, OF,
REPEAT,  UNTIL,  WHILE,  DO, FOR, TO, DOWNTO, BEGIN, END, WITH,
GOTO,  CONST,  VAR,  TYPE,  ARRAY, RECORD, SET, FILE, FUNCTION,
PROCEDURE,  LABEL, PACKED, PROGRAM, ABSOLUTE, EXTERNAL, MODULE,
MODEND.

                   2.2.  
                   -------------------------

< >  ::= <>
<>                ::= <  > !
                               <><  > !
                               < 
                               ! <> <
                               > ! <>
< >    ::= <> = <-
                               >

      -80   " ".

     .

     NULLSTR = '';


                 2.3.   
                 -----------------------------

          ,  -
 .        -
   .     .

<>               ::= <  >    !
                        < > !
                        < >
< >  ::= <> = <>


                      2.3.1.  
                      -------------------

< >       ::= < > !
                        < > !
                        < >  !
                        < >
< >::= <>


                     2.3.2.  
                     ---------------------

         ,   -
  .

< >     ::= < > !< >!
                        < >

            
  ,   .

< >  ::= (<>  , <>  )

               
:
     SUCC (x) -   x ;
     PRED (x) -  x ;
     ORD  (x) -   x.

:

     TYPE
       OPER    = (PLUS, MINUS, MULT, DIVID);
       DAY     = (MON, TUES, WED, THUR, FRI, SAT, SUN);
       BOOLEAN = (FALSE, TRUE);


                    2.3.3.  
                    -----------------------

      ()  -80  -
   :

INTEGER     
REAL        
BOOLEAN      ()
CHAR         ()

      ,      -
 :

BYTE        
WORD        
STRING      

       1    ,   -
     .   ,
      (SET).

                                                1
----------------------------------------------------------
!  !   !   !
----------------------------------------------------------
! CHAR      !   1 8-      ! 0..255            !
! BOOLEAN   !   1 8-      ! FALSE..TRUE       !
! INTEGER   !   1 8-      ! 0..255            !
! INTEGER   !   2 8-     ! -32768..32767     !
! BYTE      !   1 8-      ! 0..255            !
! WORD      !   2 8-     ! 0..65535          !
! REAL      !   4 8-     !-10E-17..10E+17    !
! STRING    !   1..256         !    !
! SET       !  32 8-     ! 0..255            !
----------------------------------------------------------


                       2.3.4.   CHAR
                       ----------------

         CHAR   -
      -80.
        -
        
( ,      ).

        ORD(C) -     "C"   -
                   
        CHR(I) -      I

        CHAR

        PRED(C) = CHR (ORD(C) - 1)
        SUCC(C) = CHR (ORD(C) + 1)

        CHAR   -80  -
     8- . -
    CHAR     
 PACKED.  e  CHAR     -
 CHR (0).. CHR (255).      -
 char  16 ,  ,      00.
   ,     ORD,
ODD, CHR  WRD  .


                      2.3.5.  BOOLEAN
                      ------------------

             ""
(TRUE)  "" (FALSE).    (=, < >, <=, <, >,
>=, IN)   .   
 :

     ODD (X)  -   
     EOLN (F) -    
     EOF (F)  -  

           5.27.

       BOOLEAN    
       8- .  
        
      8  .  -
  PACKED ,     -
-    ,     
 (     PACKED,      
). ORD(TRUE) = 0001  ORD(FALSE) = 0000.  
AND,  OR  NOT     .   16-
      "&",
"!"  "?".


                      2.3.6.  INTEGER
                      ------------------

            -
 ,    -32768 .. 32767.  -
     maxint=32767. 
   ,      -
  PRED(X)  SUCC(X).
              
 :

        *     
        DIV    
        MOD   A MOD B = A-((A DIV B)*B)
        +     
        -     

      ,   :

        ABS(X)    X - ;  
        SQR(X)    X - ;  
        TRUNC(X)  X - ;   
        ROUND(X)  X - ;  

       INTEGER    
     .   -
     ,    -     
 . ,    ,
      0..255, -
    ,   .   -
   ,      -
  "$".


                        2.3.7.  REAL
                        ---------------

          ,
   -10E-17..10E+17.
           ,   
   :

        *    
        /     (    )
        +    
        -    

       REAL        
  .        
  (4 ).       ,  
  .      . -
    6 .


                        2.3.8.  BYTE
                        ---------------

        BYTE    .   BYTE 
   INTEGER,      CHAR.      
      , -
    ..       
   BYTE.


                        2.3.9.  WORD
                        ---------------

       WORD      
.  ,     WORD, -
 .   ,      
.   WORD   ,  -
        ,    -
.
        WRD(X),  
    WORD.


                      2.3.10.  STRING
                      ------------------

       STRING -     -
 (PACKED ARRAY OF CHAR),    0  -
  ,     1  n    ee  .
       255 .    
  80 .     
    STRING.

     .

PROCEDURE ASSIGN;
VAR
  LONG : STRING;
  SHORT : STRING[12];
BEGIN
  LONG := '     80 ';
  WRITELN(LONG);
  WRITE('   10   :');
  READLN(SHORT);
  WRITELN(SHORT);
  SHORT := COPY(LONG,5,12);
  WRITELN('COPY(LONG.)=',SHORT);
END;

          :

     80 
   10   : 123456 /  -
                                                 /
123456
COPY(LONG.)= 

         -    
,          .  -
,       , -
      
      .    
        
  ,        
  ,     ,  
  .      
  20 ,        30 -
,  STRING[25]  .


     .

PROCEDURE ACCESS;
VAR
  I: INTEGER;
  LONG:STRING;
BEGIN
  I:=15;
  LONG:='123456789ABCDEF';
  WRITELN(LONG);
  WRITELN(LONG[6], LONG[I-5]);
  LONG[16]:= '*';
  WRITELN(LONG[16]);
  WRITELN(LONG); (*    15  *)
END;

       :

123456789ABCDEF
6A
*
123456789ABCDEF

            STRING
(   )       -
 .   -   ,
  .        
   .

     .

PROCEDURE COMPARE;
VAR
  S1,S2  : STRING[10];
  CH1    : CHAR;
BEGIN
  S1:= '012345678';
  S2:= '222345678';
  IF S1 < S2 THEN
    WRITELN(S1,' ,  ',S2);
  S1:= 'ALPHA BETA';
  IF S1 = 'ALPHA BETA ' THEN
     WRITELN('    ')
  ELSE
     WRITELN('  ')
  IF S1 = '  ALPHA BETA' THEN
     WRITELN('      ')
  ELSE
     WRITELN('    ')
  IF S1 = 'ALPHA BETA' THEN
     WRITELN(S1,' = ',S1);
  S1 :='Z';
  CH1:='Z';
  IF s1 = ch1 THEN
     WRITELN('    ');
END;

   :

012345678 ,   222345678
    
    
ALPHA BETA = ALPHA BETA
    

           ,    -
   ,    ,     ,
  .

     .
VAR
  LONG_STR:      STRING;     (*      -
                                    80  *)
  SHORT_STR:     STRING[10]; (*      -
                                    10  *)
  VERY_LONG_STR: STRING[255] (*      -
                                     255  ,
                                ..   ,  
                                *)

          STRING  
  ,        -
-       READ  READLN   -
        -
.

                     2.3.11.  
                     ---------------------

           
    ,  -
 .

< > ::= <> .. <>

     :

        -2..30
        (TUES..SAT)
        'N'..'Q'


                   2.3.12.  
                   ------------------------

< >  ::= <  > !
                  PACKED <  >
<
  >   ::= <>    !
                        <>    !
                        <> !
                        <>      !

       PACKED   -
  -80,       -
   ,  ..     
 .


                        2.3.13. 
                        ---------------

             ,
     .

< >       ::= < >  !
                        < >
< >   ::= STRING < >
< >::= [ < > ] ! <>
< >   ::= <  >      !
                        <  >
<
  >   ::= <>
< > ::= ARRAY [< > ,< > ]
                        OF < >
< >       ::= < >
< >     ::= <>

     :

     ARRAY [1 .. 3, 1 .. MAX] OF REAL;
     STRING [5];
     STRING [XYZ];

 XYZ -  ,    -
 (         
 ).

           STRING    81
 ( : 80  - ).


                        2.3.14. 
                        --------------

              (),
,   .      
    .

               ,
..  -        
.   .

<  >      ::= RECORD < > END
< >     ::= < > !
                       < >;< >!
                       < >
< >      ::= < > ;< >
<  >   ::= < >
                       ,< > : <>   !
                        <>
< > ::= CASE <  >
                       < > OF <>
                        ; <>
<>          ::= <  >: (<
                        >) !
                       <>
<  >::=< >  , < >
< >      ::= <>
< >     ::= <> :  !
                        <>

     :

        TYPE POINT   = RECORD
                         X,Y: REAL;
                       END;
             NAME    = STRING [10];
             ADDRESS = STRING;
             MAN     = RECORD
                         NN: NAME;
                         ADDR : ADDRESS;
                       END;



                       2.3.15. 
                       -----------------

              
  .

< >     ::= SET OF < >
< >       ::= < >

              0..255.
,  SET OF 0..1000  ,   SET OF
CHAR  SET OF 0..255  ,   SET OF 0..256
  .
        SET      32- .
       .  
          -
.     'A',...,'Z' ( 65..122).

  00 01 02 03 04 05 06 07 08 09 0A 0B 0C ...1F

  00 00 00 00 00 00 00 00 FE FF FF 07 00 ...00


                         2.3.16. 
                         -------------

< >  ::= FILE [OF <>]

        ,   -
    . ,  -
   ,   .    -
          .
  -     .   -
 -80    ,  
 .         
 ,      "", 
       .  -
  - ""        .  -
 - ""    .     -
    .
              
 5.27.
      ,    .  
         BLOCKREAD  BLOCKWRITE.  
      ,    
CP/M,        -
 ,         TEXT.
 TEXT -  FILE OF CHAR,   
  (CR  LF).    ,    -
    READ   WRITE,    READLN 
WRITELN,     EOLN, , -
     .      
      -
:   INPUT   OUTPUT.     -
   RESET.


                       2.3.17. 
                       -----------------

< >   ::= ^< >

               
      ,    
   .   -
  , ..   , -
  ,    (   NEW)  
  (  DISPOSE)   -
 .      
  WORD  .


                  2.3.18.  
                  ---------------------------

      T1  T2        ,
     4- :

     1) T1  T2      ;
     2) T1      T2  T2   T1,
         T1  T2       -
         ;
     3) T1  T2        
        ;
     4) T1  T2       
        .

       T2       
 T1,      5- :

     1) T1  T2      ,   -
           ,    ,  
            (    -
         );
     2) T1   ,  T2 -  ;
     3) T1  T2 -      ,
           T2    , -
          T1;
     4) T1  T2 -    ,      
          T2    , -
          T1;
     5) T1  T2    .

      ,   T1  T2   -
  ( )    ,
       T2     -
,     T1.
      -80      CHR,  ORD,
ODD  WRD     ,    -
 ,    8  16   
    CHAR,  INTEGER,  BOOLEAN  WORD
.        -
 - ,    VAR-.


            2.4.    
            --------------------------------------

<>           ::= <> !
                           < > !
                           < >
< >   ::= EXTERNAL  <>
< >::= ABSOLUTE [<>]<>
<>                ::= <  > !
                           < > !
                           < >

         ,  -
     .   -
  ( )  ,  -
    VAR.    -
  ABSOLUTE      -
,       ,
       
   .

     .
              -
 <=100H.     ,    -
         -
   .        ,  
   0.

     :
     I:      ABSOLUTE [$8000]  INTEGER;
     SCREEN: ABSOLUTE [$C000]  ARRAY [0..15] OF ARRAY
             [0..63] OF CHAR;


                   2.4.1.  
                   ------------------------

< > ::= <  >
<
 >        ::= <>


                2.4.2.  
                ------------------------------

< > ::= <  > !
                              < >         !
                              < >


                  2.4.3.  
                  ---------------------------

< > ::=
          <-> [<> ,<> ]
<->      ::= <>

          STRING  -
,     PACKED arrray OF CHAR.  
   0.. ,   -
     80 ( 2.3.10).


                    2.4.4.  
                    ----------------------

< > ::= <->.< >
<-> ::= <>
< >::= <>


                     2.4.5.  
                     --------------------

            ,  
   .

< >       ::= <->^
<->   ::= <>


                  2.4.6.  
                  ---------------------------

< > ::= <->^
<-> ::= <>


                        2.5. 
                        --------------

<  >  ::= <  >    !
                           <>             !
                            NIL                 !
                           < >
<>            ::= <>         !
                           <  >!
                           < >  !
                              (<>)     !
                            NOT <>
<>            ::= [< >]
< >     ::= <> , <> !
                           <>
<>              ::= <> !
                           <> .. <>
<>                 ::= <> !
                           <> < 
                            > <>
< >    ::= <>                      !
                           < >
                           <  > <> !
                           <  > <>
<>            ::= < >         !
                           < > <
                            > < >


                         2.6. 
                         -------------

                   2.6.1.  
                   -------------------------

<  >  ::= NOT ! \ ! ?

      "?"   ""    -
.


                2.6.2.   
                ------------------------------

<  >  ::= * ! / ! DIV ! MOD ! AND ! &

      "&"     ""   -
.
     A DIV  B  -  ,  A MOD B -   
.


                2.6.3.    
                ------------------------------

<  >   ::= + ! - ! OR ! ^ !  !

      "!"   ""   -
.     "!"      
"".


                  2.6.4.   
                  --------------------------

< > ::= = ! <> ! < ! < = ! > ! > = ! IN


                    2.7.  
                    ----------------------

< >     ::= < >     !
                            < >
                            ( <>  , <> )
< > ::= <>


                        2.8. 
                        --------------

<>    ::= <> : <  >  !
                  <  >
< >  ::= < >        !
                             < >
<>       ::= <   >


                   2.8.1.  
                   ------------------------

< >  ::= < >  !
                        < >     !
                        < >      !
                        < >

< >   ::= <>


               2.8.1.1.   
               --------------------------------

< > ::= <>:=<> !
                  < > := <>

         :

     1)      
.

     .

             TYPE X = RECORD
                       (*   *)
                      END;
             VAR P : ^X;
                 I : INTEGER;
             ................
             P := I + 1 ;

     2)   STRING    
CHAR;
     3)     BYTE    
CHAR   ;
     4)      ,
   WORD;
     5)   WORD   ,  -
   INTEGER.


                  2.8.1.2.  
                  ---------------------------

< >   ::= < >
                           ( <>  , <> )!
                           < >
< > ::= <>
<>             ::= < >   !
                           < >     !
                           <>                 !
                           <>


                  2.8.1.3.  
                  ---------------------------

< > ::=  GOTO <>


                 2.8.2.  
                 ----------------------------

< > ::= < >      !
                           < >   !
                           < >  !
                           <  >


                 2.8.2.1.  
                 ----------------------------

< >::= BEGIN <> ;<>; END


                  2.8.2.2.  
                  ---------------------------

< >   ::= < >     !
                          < IF>
< IF>         ::= IF <> THEN <>
                          ELSE <>!
                          IF <> THEN <>
< >     ::= CASE <> OF
                          <>  ; <>;
                          ELSE <>
                          END
<>        ::= <  >:<>!
                          <>
<  > ::= < >,< >

      -80        
ELSE.    ,       
      ,   "-
"   .

     .

           CASE CH OF
                'A': WRITELN ('A');
                'Q': WRITELN ('Q');
                ELSE
                   WRITELN ('NOT A OR Q ');
           END;



                   2.8.2.3.   
                   -------------------------

< >    ::= <  WHILE> !
                        <  REPEAT>   !
                        <  FOR>
<  WHILE> ::=
                         WHILE <> DO <>
<  REPEAT>  ::=
         REPEAT <> ;<> UNTIL <>
<  FOR> ::=
   FOR < > := <  > DO <>
< >       ::= <> DOWNTO <>!
                         <>  TO  <>
< >     ::= < >


                2.8.2.4.   
                -------------------------------

<  >  ::=
          WITH < -> DO <>
< ->  ::= <->
                                  , <->

           FOR  
  .     -
 ,       -
   FOR -  5-  .
            -
    16    FOR  /
     WITH     -
.    ,     -
     (16 )   
   .      -
   ( ).   -
      Z.


                    2.9.  
                    ----------------------

< > ::= EXTERNAL < >!
                         < > FORWARD;!
                         < > <>
<>          ::= <  >
                    <  >
                    <  >
                    <  >
                    <    >
                    < >
< > ::=
          PROCEDURE <> < >!
                          PROCEDURE <> ;  !
                    PROCEDURE INTERRUPT [ <>] ;
< >  ::= (<  >
                     ; <  >  )
<  > ::=
                                 < > !
                                 < >   !
                                VAR < >!
                                 < >
< >   ::=
                     <> ,<>  :
                             <  >     !
                   < >  , <> :
                          < >
< >  ::=
                 ARRAY [ < > ; < > ]
                          OF < 2>
< 2> ::= < >      !
                          < >
< >  ::= <> .. <> !
                   <  >
<  > ::= <
                                       > !
                            <  >
<  >  ::= <>
<  >     ::= <>
<  >          ::= <>  !
                                LABEL <> ,<> ;
<  >    ::= <>   !
                           CONST < >
                              ;< > ;
<  >       ::= <>  !
                                       TYPE
                                      < >
                                   ;< > ;
<  >     ::= <>   !
                               VAR < >
                               ; < > ;
<    >  ::=
                      <   > ;
<   > ::=
                                  < > !
                                      < >
< >   ::= < >

      -80       -
,     (FORWARD). , -
  -80  3-,   -
  .
      -80        
    (..  
 ,       -
),            .
  ,  ,      
        1..10,
      2..50.   -
   VAR-,   ,  
     .    -
           .
  ,      
          -
 .
          ,  -
       OUTPUT:

PROGRAM DEMOCON;
TYPE
   NATURAL = 0..MAXINT;  (*    
                              *)
VAR
   A1: ARRAY [1..10] OF INTEGER;
   A2: ARRAY [2..20] OF INTEGER;

PROCEDURE DISPLAYIT (VAR AR1 : ARRAY [LOWBOUND..HIBOUND:NATURAL]
                                                    OF INTEGER);
(*     :
   AR1      :  
   LOWBOUND :     AR1 (   
              )
   HIBOUND  :    AR1 (   
              ) *)
VAR
  I : NATURAL;
(*       *)

BEGIN
  FOR I := LOWBOUND to HIBOUND DO
    WRITELN('INPUT ARRAY [',I,']=',AR1[I]);
END;

BEGIN    (*  *)
  DISPLAYIT(A1);   (*      DISPLAYIT,
                         A1   -
                         1  10 *)
  DISPLAYIT(A2);   (*      DISPLAYIT,
                          A2  -
                         2  20 *)
END.

       ,   ,   -
-80   .     
  , a ae  
.       
,     ,   
            
       .   
 ,       -
 5.

                    2.10.  
                    ----------------------

     < > ::=EXTERNAL < >!
                            < >  <>
     < > ::=
          FUNCTION <> < > :
                            < >; !
                            FUNCTION <> :
                            < > ;
     < >    ::=< >

      -80       
,        .  
  -80    5. 
       ,  
   .  , 
,     .



             3.    
             -------------------------------------

                        3.1. 
                        --------------

<>     ::= < > <> . !
                    < >
                    <  >
                    <  >
                    <  >
                    <  >
                    <    >
                     MODEND
< >  ::= PROGRAM <>
                           (<   >)   ;
< >     ::= MODULE <>    ;
< >  ::=
                     <>  , <>


              3.2.   
              -----------------------------------

      -80     -
  ,     -
           
   .   -
        ,  
      (    ).  
           .
       
         
 .      -
  (E),    -
 "" (..      )
    .
         .  -
      MODULE,    
     (,  MODULE  TESTI;),  
   MODEND,    -
  (MODEND.).        ,
   ,      
, , , ,   . ,
      ,       
   BEGIN..END,    MODEND,  -
  .

      .

     MODULE MODI;
     < , , , >
     <      >
     MODEND.

         ,   -
   (  )   -
   EXTERNAL.     
 :
     1)   EXTERNAL        
     ,   -
,         
  ,     .   
        -
.
     .

     I,J,K:  EXTERNAL INTEGER;  (*   *)
     R:      EXTERNAL RECORD    (*     *)
                           ...  (*   *)
                      END ;

            -80   
     ,    
     ;
     2)  EXTERNAL       
,        .   
        
      .
      ,     ,  
        -
,  ,   ,   
.
       ,      -
    ,    .  -
        
 ,       
,  .
            -
     ,    
      . 
        ,    
          
             
   .

           

PROGRAM EXD;
(*   *)
VAR
   I,J: INTEGER;  (*     
                      *)
   K,l: EXTERNAL INTEGER; (*   
                             -    *)
EXTERNAL PROCEDURE SORT (VAR O: LIST; LEN:INTEGER);
EXTERNAL FUNCTION IOTEST:INTEGER;

PROCEDURE PROC1;
BEGIN
  IF IOTEST = 1 THEN
     (*      *)
     ...
END;

BEGIN
  SORT (...) (*     *)
END.

      : (    
                     )
   MODULE MOD;
   ...(* ,   *)
   VAR
     I,J: EXTERNAL INTEGER; (*  
                                  *)
     K,L: INTEGER;      (*   
                            *)
   EXTERNAL PROCEDURE PROC1;   (*  
                                    *)
   PROCEDURE SORT (...);   (* SORT   *)
      ...
   FUNCTION IOTEST: INTEGER; (*IOTEST  *)
      ...
   (      )
   MODEND.

                        3.3. 
                        --------------

           
,          -
   .       -
-80    "",    
      ,  -
       .
            -
 (FILE)    ,  
ASSIGN   RESET.    ASSIGN    
  ,        .
        -
 CHAIN,         
  .     -
      
   .      . 
,          -
 , ,      -
.       
  ,      -
    :    
    (ABSOLUTE).
             
   ,      
        -
   .    
  .      -
    .   ,    -
         /D,
   , o  , -
         .
            -
     ,    
         .  
     /D  .    
      .
        ,   -
   ,     .  
      , 
,      .

     .

PROGRAM PROG1;
TYPE
  COMMAREA = RECORD
               I,J,K: INTEGER;
             END;
VAR
  GLOBALS : ABSOLUTE [$8000] COMMAREA;
  CHAINFIL: FILE;

BEGIN (*   *)
  WITH GLOBALS DO
    BEGIN
      I := 3;
      J := 3;
      K := I*J;
     END;
  ASSIGN (CHAINFILE,'A:PROG2.COM');
  RESET (CHAINFIL);
  IF IORESULT = $FF THEN
     BEGIN
       WRITELN ('   PROG2.COM');
       EXIT;
     END;
  CHAIN (CHAINFIL)
END.                (*   *)

(*  #2      *)

PROGRAM PROG2;
TYPE
  COMMAREA = RECORD
               I,J,K: INTEGER;
             END;
VAR
  GLOBALS : ABSOLUTE [$8000] COMMAREA;

BEGIN (*  #2 *)
  WITH GLOBALS DO
    WRITELN ('RESULT OF ',I,' TIMES ',J,' IS =',K);
END.  (*       
            *)


                  4.    
                  ---------------------------

                       4.1.   
                       -----------------

     -   -80      
.       INPUT  
OUTPUT          
 .      (
   )  .
            PUT
 GET (-  ),    -
 READ,  WRITE,  READLN  WRITELN (-  -
    ).   -
        -
,      .     
  .
      -80     -
-.   -   
         READ,  WRITE 
WRITELN        
 .

     .
                    READ([ADDR(GETCH)],...);
                    WRITELN([ADDR(PUTCH)],...);

      GETCH ( )   PUTCH ( -
)           .
     :

                    FUNCTION GETCH :  CHAR;
                    PROCEDURE  PUTCH(OUTPUTCH : CHAR);

             ,  
 .     GETCH  PUTCH,  
(    GETCH        PUTCH)  
   ,    ,  ..   
 .     
   ADDR (.  5.6)   -
            (,  READ
([P],...)).    EOLN  EOF    -
 ,  READLN   EOLN  EOF   
   -.


                 4.2.  READ  READLN
                 ----------------------------

<   >   ::= <READ  READLN>
                                    ( <->,
                                    < > )
<READ  READLN>       ::=  READ  !  READLN
<->       ::= <>
< >     ::= <> , <>

           <->  ,  
     INPUT.


                4.3.  WRITE  WRITELN
                ------------------------------

<    >   ::=<WRITE  WRITELN>
                                    (  <->,
                                      < >  )
<WRITE  WRITELN>               ::= WRITE ! WRITELN
< >
              ::=< >  , < >

< >     ::= <>  :  < >
                            : <   >
< >          ::= <>
<   >  ::= <>

         <-> , -
     OUTPUT.


                    5.  
                    ----------------------

                -
     -80.   -
          ,
     ,    -
    .


                5.1.   
                -------------------------------

   PROCEDURE MOVE     (, ,  )
   PROCEDURE MOVELEFT (, ,  )
   PROCEDURE MOVERIGHT(, ,  )

           ,   
 " ",    ,    
"",  ,   "". -
 MOVELEFT        
""    "".  MOVE 
 MOVELEFT.   MOVERIGHT  
     ""    ""
(,   MOVERIGHT,  -
  ""  "").
     ""  ""      -
,  ,       .    
     ,      -
 .       -
 .   " "   -
,  .

          :

     1)         ,
         "",    
""      ,    
 ,   ,  , -
  "";
     2)  " "=0,    ;
     3)     .

      MOVELEFT  MOVERIGHT    
             
     .  -
   ,      -
.  MOVERIGHT      -
 ,   ""  "" ,
 ""   (.  .   -
  ) "".       -
   FOR,       
       .  , -
 MOVERIGHT   .
      MOVELEFT       
  ,          
      .

     .

PROCEDURE MOVD;
CONST
  STRINGSZ= 80;
VAR
  BUFFER : STRING [STRINGSZ];
  LINE : STRING;

PROCEDURE INSRT(VAR DEST : STRING ; INDEX : INTEGER;
                VAR SOURCE : STRING);
BEGIN
  IF (LENGTH(SOURCE) <= STRINGSZ-LENGTH(DEST)) THEN
     BEGIN
       MOVERIGHT(DEST[ INDEX ], DEST (INDEX+LENGTH(SOURCE)),
                                      LENGTH(DEST)-INDEX+1);
       MOVELEFT(SOURCE[1], DEST[INDEX], LENGTH(SOURCE));
       DEST[0] :=CHR(ORD(DEST[0]) + LENGTH(SOURCE));
     END;
END;

BEGIN
  WRITELN('MOVE');
  BUFFER:='   ';
  WRITELN(BUFFER);
  LINE:=' '
  INSRT(BUFFER, POS(' ',BUFFER)+2,LINE);
  WRITELN(BUFFER);
END;

        :

MOVE
   
     .


                      5.2.  EXIT
                      -------------------

     PROCEDURE EXIT;

      EXIT       
       .  
EXIT,   ,   .  -
 EXIT     (INTERRUPT),  
      .  
EXIT   RETURN    .  -
     EXIT    
 .

     .

PROCEDURE EXITTEST;

PROCEDURE EXITPROC(BOOL : BOOLEAN);
BEGIN
  IF BOOL THEN
     BEGIN
       WRITELN('   EXITPROC   
                EXIT');
       EXIT;
     END;
  WRITELN('    EXITPROC,  
             ');
END;

BEGIN
  WRITELN('   EXIT');
  EXITPROC(TRUE);
  WRITELN('  EXITTEST  1-  
            EXITPROC');
  EXITPROC(FALSE);
  WRITELN('  EXITTEST  2-  
            EXITPROC');
  EXIT;
  WRITELN('     ');
END;

         EXITtest:

   EXIT
   EXITPROC    EXIT
    EXITTEST  1-    
EXITPROC
    EXITPROC,     
  
   EXITTEST  2-     
EXITPROC


           5.3.      
           ----------------------------------------

FUNCTION   TSTBIT ( ,  ): BOOLEAN;
PROCEDURE  SETBIT (VAR  ,  );
PROCEDURE  CLRBIT (VAR  ,  );

     " "    8-    16-
: , , ,    -
. " "    0..15, , 0 -
   .    -
    10  8-       
,        .
      TSTBIT   TRUE,   
       (
 ),    FALSE,    
(  ).   SETBIT  
    .  CLRBIT o -
  .
               
   ,   .

     .

PROCEDURE TSTBITS;
VAR
  I: INTEGER;

BEGIN
  WRITELN('TST SET CLR BITS.......');
  I:= 0;
  SETBIT(I,5);
  IF I = 32 THEN
     IF TSTBIT(1,5) THEN
        WRITELN('I=',I);
  CLRBIT(I,5);
  IF I = 0  THEN
     IF not (TSTBIT(I,5)) THEN
        WRITELN('I=',I);
END;

     :
TST SET CLR BITS.......
I=32
I=0

                      5.4.  
                      -------------------

FUNCTION SHR ( , ) : INTEGER;
FUNCTION SHL ( , ) : INTEGER;

      ""     .   SHR
 " "    
""  ,    
  0.   SHR  " "  
   ""  ,  
     0.

     .

PROCEDURE SHIFT;
VAR
  I: INTEGER;
BEGIN
  WRITELN('SHIFT .......');
  I := 4;
  WRITELN('I=',I);
  WRITELN('SHR(I,2)=',SHR(I,2));
  WRITELN('SHL(I,4)=',SHL(I,4));
END;


   :
SHIFT ........
I=4
SHR(I,2)=1
SHR(I,4)=64

                   5.5.  HI, LO, SWAP
                   -------------------------

HI  ( ) : INTEGER;
LO  ( ) : INTEGER;
SWAP( ) : INTEGER;

     " " -  8-   16-  -
.
      HI   8      "
"   8  .
      LO   8      8
 ,   8    0.
      SWAP   8    
    8     8   -
   8  .    HI  -
    8-     -
,    8-   LO  -
    .


     .

PROCEDURE HILOSWAP;
VAR
  HL: INTEGER;
BEGIN
  WRITELN('HILOSWAP.......')
  HL := $104;
  WRITELN('HL=',HL);
  IF HI(HL) = 1 THEN
     WRITELN('HI(HL)=',HI(HL));
  IF LO(HL) = 4 THEN
     WRITELN('LO(HL)=',LO(HL));
  IF SWAP(HL) = $0401 THEN
     WRITELN('SWAP(HL)=',SWAP(HL));
END;

        :

HILOSWAP.......
HL=260
HI(HL)=1
LO(HL)=4
SWAP(HL)=1025


                       5.6.  ADDR
                       -----------------

ADDR (  ) : INTEGER

      ADDR   ,    -
 .  "  "    -
  ,      .
    ,   -
     ,  o    
      .
             
,     ,   
INLINE,    ,    -
     ..

     .

PROCEDURE ADDRTST (PARAM : INTEGER);

VAR
  REC: RECORD
         J:    INTEGER;
         BOOL: BOOLEAN;
       END;
  ADDRESS: INTEGER;
  R: REAL;
  S1: ARRAY[1..10] OF CHAR;

BEGIN
  WRITELN('ADDR TST......');
  WRITELN('ADDR(ADDRTST)=',ADDR(ADDRTST));
  WRITELN('ADDR(PARAM)=',ADDR(PARAM));
  WRITELN('ADDR(REC)=',ADDR(REC));
  WRITELN('ADDR(REC.J) ',ADDR(REC.J));
  WRITELN('ADDR(ADDRESS)=',ADDR(ADDRESS));
  WRITELN('ADDR(R)=',ADDR(R));
  WRITELN('ADDR(S1)=',ADDR(S1));
END;

     :

  ADDR(ADDRTST)=278
  ADDR(PARAM)=633
  ADDR(REC)=635
  ADDR(REC,J)=635
  ADDR(ADDRESS)=639
  ADDR(R)=641
  ADDR(S1)=645

                      5.7.  SIZEOF
                      -------------------

SIZEOF (   ): INTEGER;

         :  , ,
    ..        .
 SIZEOF       .  
SIZEOF       
  .   SIZEOF  -
    ,   
.


     .

PROCEDURE SIZETST;
VAR
  B : ARRAY[1..10] OF CHAR;
  A : ARRAY[1..15] OF CHAR;
BEGIN
  WRITELN('SIZETST.........');
  A:= '***************';
  B:= '0123456789';
  WRITELN('SIZEOF(A)=',SIZEOF(A),' SIZEOF(B)=',SIZEOF(B));
  MOVE(B,A,SIZEOF(B));
  WRITELN('A= ',A);
END;

   :

SIZEOF(A)=15 SIZEOF(B)=10
0123456789*****


                    5.8.  FILLCHAR
                    -----------------------

FILLCHAR (, , );

      ""      -
.    .  ""  -
    CHAR.    "-
"  ,    "".
       FILLCHAR -    -
     .


     .

PROCEDURE FILLTST;
VAR
  BUFFER : PACKED ARRAY[1..256] OF CHAR;
BEGIN
  FILLCHAR(BUFFER,256,' '); (*    *)
END;

                      5.9.  LENGTH
                      -------------------

LENGTH () : INTEGER;

      LENGTH     ,    
    .

     .

PROCEDURE LENGTHTST;
VAR
  S1 : STRING[40];
BEGIN
  S1 := '"   LENGTH"';
   WRITELN('  ',S1,'=',LENGTH(S1));
   WRITELN('   = ',LENGTH(''));
END;

       :

  "   LENGTH"=34
   = 0


                     5.10.  CONCAT
                     --------------------

CONCAT (1, 2,..., n) : STRING;

      CONCAT  ,    -
  "",     .
  ""     - ,  
  .

     .

PROCEDURE CONCATTST;
VAR
  S1,S2,S3: STRING;
BEGIN
  S1:= ' CONCAT  ';
  S2:= 'e ';
  S3:= '  ';
  WRITELN (CONCAT(S1,S2,S3));
END;

   :

 CONCAT  oaea  


                      5.11.  COPY
                      ------------------

COPY (, ,  ) : STRING;

      ""     .   "-
"  " "   .  CO-
PY  ,     
" "    "",    
  "".

     .

     PROCEDURE COPYTST;
     VAR
       S1,S2:STRING;
     BEGIN
       S1:='  ';
       S2:=COPY(S1,13,5);
       WRITELN(S2);
     END;

   :



                       5.12.  POS
                       -----------------

POS (, ) : INTEGER;

      POS   ,   -
   ""  "".  "" 
,     .   ""
 ,   ""   , -
  .

     .

     PROCEDURE POSTST;
     VAR
       SI: STRING;
     BEGIN
       SI:=' POS';
       WRITELN('  POS = ',POS('POS',S1));
     END;

       :
  POS = 9


                    5.13.  DELETE
                    ----------------------

DELETE (,,);

      ""   ,    ""  
""  -    .    DELETE  
 ""   ""   -
,   ,    "".


     .

     PROCEDURE DELETST;
     VAR
       S: STRING;
     BEGIN
       S:='FUNCTION DELETE';
       DELETE(S,4,4);
       WRITELN(S);
     END;

     :
FUNC DELETE


                    5.14.  INSERT
                    ----------------------

INSERT (, , );

      ""  .   ""
    (  ).  -
  ""      .    INSERT
 ""  "",      "-
" .

     .

     PROCEDURE INSERTST;
     VAR
       S: STRING;
     BEGIN
       S:='PROC INSERT';
       INSERT('EDURE',S,5);
       WRITELN(S);
     END;

   :
PROCEDURE INSERT


                    5.15.  ASSIGN
                    ----------------------

ASSIGN(, );

      ASSIGN      -
  -     -
 RESET  REWRITE.  ""   -
 ,   "" mo    -
-,        
 ,    .  -
,           -
,  ""     TEXT.
       -80     
       PASTMPXX.$$$,  
 XX  ,     -
  .         
  REWRITE    ASSIGN,  
           
.
        ""    -
   :
CON:   -          "-
           "  ,  ,   
           CR ( )   CR/LF  (
           /  ),      
            (CHR(8)) -   , , -
            .      -
               CR    CR/LF
                  
           8     1  2 ;

KBD:   -        CP/M-80;   
                 ;  -
             6 ;

TRM:   -      CP/M-80;  -
            ;

LST:   -        CP/M-80;
              ;       5
           ;

RDR:   -       CP/M-80, 
            3 ;

PUN:   -      ,   -
            4 .

          
 CON:  KBD:, ..  -   CON:
  "^S", "^P"    -
       (   
  KBD:).

        ASSIGN:

ASSIGN(F,'A:TEST.OVL');
ASSIGN(CONIN,'CON:');
ASSIGN(KEYBOARD,'KBD:');
ASSIGN(CRT,'TRM:');
ASSIGN(PRINTFILE,'LST:');

                    5.16.  GNB  WNB
                    -----------------------

GNB(FILEVAR: FILE OF PAOC):CHAR;
WNB(FILEVAR: FILE OF CHAR; CH:CHAR) : BOOLEAN;

      GNB  WNB     
           .
 PAOC -   ,  o     -
    (PACKED ARRAY OF CHARACTER).  -
        -
 128..4095.
      GNB         .
     CHAR.   
EOF   TRUE      -
,      -     (, -
, "^Z"      CP/M-80).
      WNB          .
     ,     .
   ,   TRUE,  
         .  
   .
      GNB  WNB   ,   -
 -   - "".
        -80     
      128-     
()      -"".  
      -"",   EOF 
         -"".
      ,   GNB 
 0FFH     1AH    TEXT.
           WNB  ,  
-""        ,  
      "".    
" " -"",   
"^Z"  ( 1AH)      0FFh  -
 .

                   5.17.  BLOCKREAD
                   -------------------------

BLOCKREAD (, ,  , ,  );

     :         
""   "",      -
.   BLOCKREAD      20  (
  ).
      " "     - 1..64.
     ,   "-
  "  127.   " "=-1,  
 ,       128-
 .
      ""   ,   
 .      128    -
 "".

                  5.18.  BLOCKWRITE
                  --------------------------

BLOCKWRITE(, ,  , ,  );

     :           
,      .  -
     "".   
 21.     BLOCKREAD,     "  "=-1,
   .


                  5.19.  OPEN, OPENX
                  ---------------------------

OPEN (, , );
OPENX(, , , );

      OPEN  OPENX   ,   -
   -80.   "" -  -
  FILE,   ""  ,  "-
"  VAR-  INTEGER    "-
"   .
      OPEN      -
 : ASSIGN (, ), RESET (),
 :=IORESULT.
      OPENX       -
      ,  -
       -
.

     :

OPEN (INFILE,'A:FNAME.DAT',RESULT);
OPENX(INFILE,'C:TESTNAME.FIL',RESULT, RECNUM DIV 128);


                5.20.  CLOSE, CLOSEDEL
                -------------------------------

CLOSE (, );
CLOSEDEL (, );

      CLOSE  CLOSEDEL   
      .  CLOSE -
       -  
     .   CLOSEDEL  -
          -
.    ""  ""  ,     
OPEN ( 5.19.).
           -
 RESET        -
 .       -
  .      -
   ,     -
   .


                     5.21.  PURGE
                     ---------------------

PURGE ();

      PURGE    . -
      ASSIGN,   -
  ,     PURGE.
     .
       CP/M-80      -
  ,     PURGE
 IORESULT   .

     .

ASSIGN(F,'B:BADFILE.BAD');
PURGE(F);              (*   B:BADFILE.BAD*)


                   5.22.  SEEKREAD
                   ------------------------

     SEEKREAD (,  );

      SEEKREAD         -
-""    .
            AS-
SIGN  RESET  REWRITE.      
  ,   IORESULT   .
      SEEKREAD    33.
          SEEKREAD    RANDO-
MIO.ERL    PASLIB.ERL.


                   5.23.  SEEKWRITE
                   -------------------------

     SEEKWRITE(,  );

      SEEKWRITE     "a",
  ,     .  , -
    ,   -
     CLOSE  RESET.  -
 SEEKWRITE    34.
        SEEKWRITE    RANDO-
MIO.ERL     PASLIB.ERL.


              5.24.  READHEX  WRITEHEX
              ----------------------------------

          WORD     -
      READ  WRITE.  
   :

     READHEX ( , , );
     WRITEHEX( , ,  );

    - -
      ,  ,  
, , ,    .  "-
"  ""    ,   "-
"     1  2.


                    5.25.  IORESULT
                    ----------------------

IORESULT : INTEGER;

         -  IORESULT -
 ,    
 .    IORESULT  -
-    ,    
.   :   FFH  - , 
      -
.      CLOSE  WRITE/PUT/WNB   .
      IORESULT -
 .

     .

ASSIGN(F,'C:IOR.TXT');
RESET(F);
IF IORESULT = $FF THEN
   WRITELN('C:IOR.TXT IS NOT FOUND');  (* C:IOR.TXT  -
                                         *)

       IORESULT   :

CLOSE                    0FFH  , 
                          -  ;

RESET                    0FFH  , 
                          -  ;

REWRITE                  0FFH  , 
                          -  ;

READ/READLN/GET          o  0  -
                           , 0 
                          ;

PURGE/WRITE/WRITELN/PUT    0  -
                          ,0  -
                          .


               5.26.  MEMAVAIL, MAXAVAIL
               --------------------------------

MEMAVAIL : INTEGER;
MAXAVAIL : INTEGER;

       -80  MEMAVAIL  MAXAVAIL -
       NEW  DISPOSE  -
 .  -    , -
   .    -
   SYSTEM.   MEMAVAIL    
     ,     -
.  MAXAVAIL    ,  -
        .   MAXAVAIL
   ,     
     .
     -80     NEW  
DISPOSE.          -
   ,      (  )
       .   
,         $Z, -
          0006.
      512   ,  
  SP.
        MAXAVAIL   
 ,      FULL-
HEAP.ERL   PASLIB.ERL.


   5.27.  ,     
   ---------------------------------------------------------

          :

     F - -;
      -     -
         ;
      - -;
     X -   ;
     A - -;
     Z - - ;
     I -     ;
     C -     ;
     B -     ;
    SC -   .

             
    -80  :

                  :

RESET(F)             .  -
             -""    .  -
              1-      "F^".  
              EOF(F)=FALSE,    .  
             , EOF(F)=TRUE, a "F^" ;
REWRITE(F)            "F".
              "F"    EOF(F)=TRUE,    
               ;
GET(F)        -""   
             .  ..      
             -"".      -
             ,    EOF(F)=TRUE,  a    -
             -"" .   GET(F)  
             ,                
             EOF(F)=FALSE;
PUT(F)        -""   ,  
             EOF(F)=TRUE.   PUT(F)   ,  
                EOF(F)= TRUE.   -
              PUT(F)  "F^"    -
             ;
PAGE(F)               -
                    -
              ;
EOF(F)       , ,     -
                .              ,
             EOF(F)=TRUE,    EOF(F)=FALSE;
EOLN(F)        TRUE,    -
                  ,  -
               - FALSE;
READ(F,P)         ;
READLN(F,P)        ;
WRITE(F,P)        "P";
WRITELN(F,P)      "P"   -
               "CR"," LF".

               :

NEW(P)          "V"    -
              "P"   "V";
NEW(P,T1,T2,...Tn)      -
              ,   T1,T2,...Tn;
DISPOSE(P)    ,    , 
               "P";
DISPOSE(P,T1,T2,...Tn)     ;

               :

     PACK(A,I,Z) UNPACK(Z,A,I)

              :

   
ABS(X)  ABS(I) -      

 
SQR(X)  SQR(I) -   ,      
                    

  TRUNC(x)
  ROUND(x)
SIN(X) COS(X) ARCTAN(X) EXP(X) LN(X) SQRT(X) -  
                         

      1.
          SQRT(X)  
  ,      .

      2.
         EXP(X)  ,
 X>0,    K  
  1/EXP(X).

             :


ODD(SC):BOOLEAN
               TRUE,   
               FALSE,   

     A..Z
ORD(SC):INTEGER

    A..Z   

CHR(SC):CHAR

 
WRD(SC):WORD


                    :


SUCC (<  >)


PRED (<  >)


                  5.28.  
                  --------------------------

       -80     -
 .     -
 .    
:

 PROCEDURE INTERRUPT [<>] <>;

           ,  
       
.        -
    ,   -
.      0..7.
             
           
        -
 .      -
    ENABLE  DISABLE.
         ,    -
  .     -
     ,     
        .  
          -
    .
              -
-80  ,     ,
        INTERRUPT,
 .   ,      -
,  ,   ,  -, -
      ,   -
  .   ,  
        
   ,      -
        -
 .

         5.29.  INLINE  
         --------------------------------------------

      -80         
,      INLINE.   
      
  .    ,   -
  ,   - -
      .
       INLINE     
    .    INLINE   
 "(",      -
    "/" .   -
    ")".    -
    ,     -
.            :
CHAR,  STRING,  BOOLEAN,  INTEGER  REAL.  
  ,            
 ,       .
         .
      ,    INTEGER  -
      0..255,      .
          -
,      .
        ,  ,  
-80    . -
       -
 ,         
    .
          INLINE,  
     INLINE 
  *+n  *-n (, *+3  *-9):

     :

INLINE ( "LHLD /   (*   LHLD *)
          VAR1 /   (*    *)
         "SHLD /   (*   SHLD *)
          VAR2 );  (*    *)
INLINE( "IN/$03/
        "ANI/$02/
        "JNZ/*-4);

     ,    *,  -    
 .
      INLINE     
       .
       1 ,     -
 INLINE   ,      
  .     
    @BDOS.

      1.

FUNCTION @BDOS(FUNC:INTEGER; PARM:WORD):INTEGER;
CONST
  ENTRYPOINT = 5; (*     
                       *)
VAR
  RESULT : INTEGER;     (*  *)
BEGIN
  INLINE ( $2A / FUNC /      (* LHLD FUNC  *)
           $4D /             (* MOV  C,L   *)
           $2A / PARM/       (* LHLD PARM  *)
           $EB /             (* XCHG       *)
           $CD /ENTRYPOINT/  (* CALL 5     *)
           $6F /             (* MOV L,A    *)
           $26 / $00 /       (* MVI H,0    *)
           $22 / RESULT );   (* SHLD RESULT*)
  @BDOS := RESULT;    (*    *)
END;


      2    INLI-
NE     .

      2.

PROGRAM DEMINLIN;
TYPE
  IDFIELD = ARRAY [1..4] OF ARRAY [1..10] OF CHAR;
VAR
  TPTR :^IDFIELD;

PROCEDURE TABLE;
BEGIN
  INLINE(   '     '/
            ' '/
            '   '/
            '');
END;

BEGIN (*   *)
  TPTR := ADDR(TABLE);
  WRITELN(TPTR [3]);  (*    '' *)
END.


      5.30.     
      ---------------------------------------------------

            
.

         :

PROCEDURE FILLCHAR ( , , );
PROCEDURE MOVELEFT (,    ,  
);
PROCEDURE MOVERIGHT (,    , 
);

       :

PROCEDURE CLRBIT ( ,  );
FUNCTION HI      ( )        : INTEGER;
FUNCTION LO      ( )        : INTEGER;
PROCEDURE SETBIT ( ,  );
FUNCTION SHL     ( , ) : INTEGER;
FUNCTION SHR     ( , ) : INTEGER;
FUNCTION SWAP    ( )        : INTEGER;
FUNCTION TSTBIT  ( ,  ):
                                                BOOLEAN;

           :

FUNCTION CONCAT (1, 2, ... , n) :
                                                 STRING;
FUNCTION COPY   (, ,  ) :STRING;
PROCEDURE DELETE(, , );
PROCEDURE INSERT(, , );
FUNCTION LENGTH () : INTEGER;
FUNCTION POS (, ) :INTEGER;

               :

PROCEDURE ASSIGN    (, );
PROCEDURE BLOCKREAD(FILE, BUF, IOR, NUMBYTES, RELBLN);
PROCEDURE BLOCKWRITE(FILE, BUF, IOR, NUMBYTES, RELBLN);
PROCEDURE CLOSE (, );
PROCEDURE CLOSEDEL (, );
FUNCTION GNB () : CHAR;
PROCEDURE IORESULT : INTEGER;
PROCEDURE OPEN (, , );
PROCEDURE OPENX(, , , );
PROCEDURE PURGE ();
FUNCTION WNB (, ) : BOOLEAN;

                     :

FUNTION ADDR  (  )    : INTEGER;
PROCEDURE EXIT;
FUNCTION MAXAVAIL : INTEGER;
FUNCTION MEMAVAIL : INTEGER;
FUNCTION SIZEOF (   ) : INTEGER;
PROCEDURE WAIT  ( , , );
  CLOSE  RESET.  -
 SEEKWRIT