CH



		  CP/M-80

		. .

                           2
                    2700560.00015-01 35 01

                       

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

                            3
                    2700560.00015-01 35 01


                      

1.        . . . . . . . . . . . . . . .   7
2.        . . . . . . . . . . . . . . .   9
2.1.     , ,    . 9
2.2.      . . . . . . . . . . . .  11
2.3.       . . . . . . . . . .  11
2.3.1.    . . . . . . . . . . . . . . . .  12
2.3.2.    . . . . . . . . . . . . . . .  12
2.3.3.    . . . . . . . . . . . . . .  13
2.3.4.    CHAR. . . . . . . . . . . . . . . . . .  14
2.3.5.    BOOLEAN . . . . . . . . . . . . . . . .  15
2.3.6.    INTEGER . . . . . . . . . . . . . . . .  15
2.3.7.    REAL. . . . . . . . . . . . . . . . . .  16
2.3.8.    BYTE. . . . . . . . . . . . . . . . . .  17
2.3.9.    WORD. . . . . . . . . . . . . . . . . .  17
2.3.10.   STRING. . . . . . . . . . . . . . . . .  17
2.3.11.    . . . . . . . . . . . . . . .  22
2.3.12.   . . . . . . . . . . . . . .  22
2.3.13.    . . . . . . . . . . . . . . .  23
2.3.14.   . . . . . . . . . . . . . . . .  24
2.3.15.    . . . . . . . . . . . . . . .  25
2.3.16.    . . . . . . . . . . . . . . .  26
2.3.17.    . . . . . . . . . . . . . .  27
2.3.18.    . . . . . . . . . . . .  27
2.4.         . . . . .  29
2.4.1.     . . . . . . . . . . . . .  30
2.4.2.     . . . . . . . . . .  30
2.4.3.    . . . . . . . . . . . .  30

                            4
                    2700560.00015-01 35 01

2.4.4.     . . . . . . . . . . . . . .  30
2.4.5.     . . . . . . . . . . . . . . .  31
2.4.6.    . . . . . . . . . . . .  31
2.5.      . . . . . . . . . . . . . . . . .  31
2.6.     . . . . . . . . . . . . . . . . . .  32
2.6.1.    . . . . . . . . . . . . .  32
2.6.2.      . . . . . . . . . .  32
2.6.3.     . . . . . . . . . . .  33
2.6.4.    . . . . . . . . . . . . .  33
2.7.       . . . . . . . . . . . . .  33
2.8.      . . . . . . . . . . . . . . . . .  33
2.8.1.     . . . . . . . . . . . . .  34
2.8.1.1.  . . . . . . . . . . .  34
2.8.1.2.  . . . . . . . . . . . . .  35
2.8.1.3.  . . . . . . . . . . . . .  35
2.8.2.     . . . . . . . . . . .  35
2.8.2.1.   . . . . . . . . . . . .  36
2.8.2.2.  . . . . . . . . . . . . .  36
2.8.2.3.   . . . . . . . . . . . . . .  37
2.8.2.4.   . . . . . . . . . . .  37
2.9.       . . . . . . . . . . . . .  38
2.10.     . . . . . . . . . . . . . .  42
3.          . . . . .  43
3.1.      . . . . . . . . . . . . . . . . .  43
3.2.       . . . . . . .  43
3.3.      . . . . . . . . . . . . . . . . .  47
4.          . . . . . . . . . .  51
4.1.       . . . . . . . . . . . . . . . .  51
4.2.      READ  READLN . . . . . . . . . .  52
4.3.      WRITE  WRITELN . . . . . . . . .  53

                            5
                    2700560.00015-01 35 01

5.         . . . . . . . . . . . .  54
5.1.       . . . . . . . . .  54
5.2.      EXIT. . . . . . . . . . . . . . .  57
5.3.     O      . . . .  58
5.4.      . . . . . . . . . . . . . . .  60
5.5.      HI, LO, SWAP. . . . . . . . . . . .  61
5.6.      ADDR. . . . . . . . . . . . . . . .  63
5.7.      SIZEOF. . . . . . . . . . . . . . .  64
5.8.      FILLCHAR. . . . . . . . . . . . .  65
5.9.      LENGTH. . . . . . . . . . . . . . .  66
5.10.     CONCAT. . . . . . . . . . . . . . .  67
5.11.     COPY. . . . . . . . . . . . . . . .  68
5.12.     POS . . . . . . . . . . . . . . . .  68
5.13.     DELETE. . . . . . . . . . . . . .  69
5.14.     INSERT. . . . . . . . . . . . . .  70
5.15.    A ASSIGN. . . . . . . . . . . . . .  71
5.16.     GNB  WNB . . . . . . . . . . . . .  73
5.17.     BLOKREAD . . . . . . . . . . . .  74
5.18.     BLOCKWRITE. . . . . . . . . . . .  75
5.19.     OPEN, OPENX . . . . . . . . . . .  75
5.20.     CLOSE, CLOSEDEL . . . . . . . . .  76
5.21.     PURGE . . . . . . . . . . . . . .  77
5.22.     SEEKREAD. . . . . . . . . . . . .  77
5.23.     SEEKWRITE . . . . . . . . . . . .  78
5.24.     READHEX  WRITEHEX. . . . . . . .  78
5.25.     IORESULT. . . . . . . . . . . . . .  79
5.26.     EMAVAIL, MAXAVAIL. . . . . . . . .  80
5.27.     ,   
           . . . . . . . . . . . . . . .  81
5.28.     . . . . . . . . . . . .  85

                            6
                    2700560.00015-01 35 01

5.29.     INLINE  . . .  86
5.30.       
         . . . . . . . . . . . . . . . . . .  89
  . . . . . . . . . . . .  92

                            7
                    2700560.00015-01 35 01


                   1.   

          -80  
  ,    -
      -
 '  .   
-80 :
     1)  ,    :
     -   ;
     -   ;
     -   ;
     -   ;
     -     ;
     -  .
       ,    -
;
     2)       -
 ;
     3)     : -
, ,  ,  ,  ,  ,
.      :  ,
, , .    -
.     ;
     4)   "&"(), "!", "/"()    "\",
"?"()  ;
     5)     .  -
   = 1  - 1;
     6)   ELSE    CASE;
     7)       -

                            8
                    2700560.00015-01 35 01

.     ,    -
;
     8) , ,       
,     .   
     .    
      ;
     9)   ,  -
     ;
     10)      -
;
     11)     -
(  - ).
       -80    "@"      
      
    .      , 
   ,   -
  "^"     "@",    
   "@"    -
,    ,     -
    "@"    
 .     "!"  
.

                            9
                    2700560.00015-01 35 01


     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!!B!C!D!E!F
< >::= +!-!*!/!=!<>!<!>!<=!>=!(!)![!]!..!
                         ! !:=!.!,!;!:!'!^!\!?!!!"!$!#!&
                         !<>!
<
 >              ::=<>  <>
<  >   ::=  $ < >   !
                           < >
<       ::=<  >.<-
 >              > ! <  >.
                       < >  <-
                       >!
                       <   >  <>
<  >   ::=<  > ! <
                        >
<>           ::=<  > ! <><
                        >
<>              ::=  + ! -
<>            ::=  ' <>  <>  '  !  ''

                            10
                    2700560.00015-01 35 01

<>            ::= <  >
<>       ::= (*< >*)

         "(*"  "*)"    -
   " "  " ".
             8
.        
  (  ),     .
       ,
      (..  "_"  
"").       -
 "@".       
"@".     ,    -
.  "$"    ,    
 . <>      :
"", "", "", "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, XTERNAL, MODULE, MODEND.


                            11
                    2700560.00015-01 35 01

     2.2.  

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

      -80   " ".
     .
        NULLSTR = '';

     2.3.   
          ,  -
 .      -
     .    
 .

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


                            12
                    2700560.00015-01 35 01

     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);


                            13
                    2700560.00015-01 35 01

     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


                            14
                    2700560.00015-01 35 01

     2.3.4.   CHAR
           -
        -
-80.           -
      
    (  ,  
    ).
        ORD(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) -    

                            15
                    2700560.00015-01 35 01

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

     2.3.6.  INTEGER
          
 ,    -32768 .. 32767.  -
                
MAXINT=32767.      ,
            PRED(X)  
SUCC(X).
             
  :
        *     
        DIV    
        MOD    MOD B = A-((A DIV B)*B)
        +     
        -     
      ,   :

                            16
                    2700560.00015-01 35 01

        ABS(X)    X - ;  
        SQR(X)    X - ;  
        TRUNC(X)  X - ;   
        ROUND(X)  X - ;  
       INTEGER   -
         .  
      ,     -
     . , -
   ,       
  0..255,      ,  
 .      -
 ,       "$".

     2.3.7.  REAL
           
,    -10-17..10+17.
            ,  
    :
        *    
        /     (    )
        +    
        -    
       REAL    
  .          
   (4 ).        
,    .     -
 .     6 .


                            17
                    2700560.00015-01 35 01

     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];

                            18
                    2700560.00015-01 35 01

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]  .


                            19
                    2700560.00015-01 35 01

     .
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 (   )    -
   .   -    -
 ,    .    -
      .


                            20
                    2700560.00015-01 35 01

     .
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

                            21
                    2700560.00015-01 35 01

    
    
ALPHA BETA = ALPHA BETA
    

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


                            22
                    2700560.00015-01 35 01

     2.3.11.  
          -
     ,  -
  .

< >      ::= <> .. <>

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

     2.3.12.  

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

       PACKED    -
    -80,       
    , ..   
   .


                            23
                    2700560.00015-01 35 01

     2.3.13.  
             
,      .

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

     :
     ARRAY [1 .. 3, 1 .. MAX] OF REAL;
     STRING [5];
     STRING  [XYZ];
 XYZ -  ,   
 (          -
 ).
         STRING   
81  ( : 80  - ).


                            24
                    2700560.00015-01 35 01

     2.3.14.  
           -
 (), ,  .      
       .
           ,  ..
          
.   .

<  >      ::= RECORD < > END
< >     ::= < > !
                       < >;< >!
                       < >
< >      ::= < > ;< >
<      ::= < >
                       ,< > : <>   !
                        <>
< > ::= CASE <  >
                       < > OF <>
                        ; <>
<>          ::= <  >: (<
                        >) !
                       <>
<  >::=< >  , < >
< >      ::= <>
< >     ::= <> :  !
                        <>
     :
        TYPE POINT   = RECORD X, Y : REAL
                       END
             NAME    = STRING [10];

                            25
                    2700560.00015-01 35 01

             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-
'.        
.           
    .         
'',...,'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


                            26
                    2700560.00015-01 35 01

     2.3.16.  

< >         ::= FILE [OF <>]
        ,    
    .  ,  
   ,  . 
         -
 .    -      
 .     -80   
 ,    .   -
      ,  
   "",     -
     .     - ""
        .    -
""    .     
   .
           -
   5.27.
      ,      .    -
           BLOCKREAD  
BLOCKWRITE.       
 ,    CP/M,    -
     ,    -
   .    -   FILE OF
CHAR,      
(CR  LF).   ,   
READ  WRITE,   READLN  WRITELN,  -
   EOLN, ,   -
 .      -
      -

                            27
                    2700560.00015-01 35 01

:  INPUT   OUTPUT.     
   RESET.

     2.3.17.  

< >     ::= ^ < >
           -
      ,    
    .   -
   , ..  
,    ,      (-
  NEW)   (  -
 DISPOSE)    .  
       WORD  -
 .

     2.3.18.  
      
      1  2         
,      4- :
     1) 1  2      ;
     2) 1   2   2   
        1,  1  2       
          ;
     3) 1  2     -
         ;
     4) 1  2        
         .
       2     -
   1,     5- :

                            28
                    2700560.00015-01 35 01

     1) 1  2      ,   
           ,   , -
              (  
          );
     2) 1   ,  2 -   -
        ;
     3) 1  2 -       
        ,    2    -
        ,   1;
     4) 1  2 -   ,   -
           2      ,
          1;
     5) 1  2    .
      ,  1    2    
  ( )   -
 ,      2  
  ,     
1.
       -80      CHR,
ORD, ODD  WRD     ,  
  ,    8    16  
             CHAR,
INTEGER, BOOLEAN  WORD .      -
      - , 
  VAR-.


                            29
                    2700560.00015-01 35 01

     2.4.    

<>        ::= <> !
                        < > !
                        < >
< >::=  EXTERNAL  <>
< >::= ABSOLUT [<>]<>
<>             ::= <  > !
                        < > !
                        < >
           ',  
    . -
   ( )  -
,         VAR.
     ABSOLUTE  
     ,    
    ,  
        -
   .
     .      
   <=100H.       ,  
         
          .  
   ,     0.
     :
     I:      ABSOLUTE [$8000]  INTEGER;
     SCREEN: ABSOLUTE [$C000]  ARRAY [0..15] OF ARRAY
             [0..63] OF CHAR;


                           30
                    2700560.00015-01 35 01

     2.4.1.  

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

     2.4.2.  

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

     2.4.3.  

< > ::=
          <-> [<> ,<> ]
<->      ::= <>
          STRING   -
,    PACKED ARRRAY OF CHAR.  -
      0..
,       80 (
2.3.10).

     2.4.4.  

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


                            31
                    2700560.00015-01 35 01

     2.4.5.  
          , -
    .

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

     2.4.6.  

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

     2.5. 

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

                            32
                    2700560.00015-01 35 01

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

     2.6. 

     2.6.1.  

<  >  ::= NOT ! \ ! ?
  "?"    ""    
.

     2.6.2.   

<  >  ::= *!/! DIV ! MOD ! AND ! &
      "&"   ""    
.
      DIV B -  , A MOD B -   -
 .


                            33
                    2700560.00015-01 35 01

     2.6.3.    

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

     2.6.4.   

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

     2.7.  

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

     2.8. 

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


                            34
                    2700560.00015-01 35 01

     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     

                            35
                    2700560.00015-01 35 01

 CHAR   ;
     4)      -
,    WORD;
     5)   WORD    ,
   INTEGER.

     2.8.1.2.  

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

     2.8.1.3.  

< > ::=  GOTO <>

     2.8.2.  

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


                            36
                    2700560.00015-01 35 01

     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

                            37
                    2700560.00015-01 35 01


     2.8.2.3.   

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

     2.8.2.4.   

<  >  ::=
          WITH < -> DO <>
<  >  ::= <->
                                  , <->
         FOR  -
   .     -
  ,     
      FOR  -  
5-  .
              
    16   
FOR /    WITH   -

                            38
                    2700560.00015-01 35 01

  .  ' ,    -
        (16
)          .  
      (-
 ).       
   Z.

     2.9.  

< > ::= EXTERNAL < >!
                         < > FORWARD;!
                         < > <>
<>          ::= <  >
                    <  >
                    <  >
                    <  >
                    <    >
                    < >
< > ::=
          PROCEDURE <> < >!
                          PROCEDURE <> ;  !
                    PROCEDURE INTERRUPT [ <>] ;
< >  ::= (<  >
                     ; <  >  )
<  > ::=
                                 < > !
                                 < >   !
                                VAR < >!
                                 < >
< >   ::=

                            39
                    2700560.00015-01 35 01

                     <> ,<>  :
                             <  >     !
                   < >  , <> :
                          < >
< >  ::=
                 ARRAY [ < > ; < > ]
                          F < 2>
< 2> ::= < >      !
                          < >
< >  ::= <> .. <> !
                   <  >
<  > ::= <
                                       > !
                            <  >
<  >  ::= <>
<  >     ::= <>
<  >          ::= <>  !
                                LABEL <> ,<> ;
<  >    ::= <>   !
                           CONST <O >
                              ;< > ;
<  >       ::= <>  !
                                       TYP
                                      < >
                                   ;< > ;
<  >     ::= <>   !
                               VAR < >
                               ; < > ;
<    >  ::=
                      <   > ;

                            40
                    2700560.00015-01 35 01

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

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

PROGRAM DEMOCON;
TYP
   NATURAL = 0..MAXINT;  (*    
 *)

                            41
                    2700560.00015-01 35 01

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,
                         1   -
                         1  10 *)
  DISPLAYIT(A2)    (*      DISPLAYIT,
                          2  -
                         2  20 *)
END.

       ,   ,  

                            42
                    2700560.00015-01 35 01

-80     .  
   , A  TAKE  
 .     
   ,   
,       -
            
.      ,  
      5.

     2.10.  

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

       -80        
  ,            
.     -80 (.    5).
      ,
    .  
,  ,    -
 .

                            43
                    2700560.00015-01 35 01


         3.    

     3.1. 

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

     3.2.   
       -80      
    ,      
       
        .
            
   ,      
  (  ).      
    .   
       
          

                            44
                    2700560.00015-01 35 01

.       
 (),      -
 "" (..      
)     .
         .  
    MODULE,    
      (,  MODULE
TESTI;),      MODEND,
      (MODEND.).      
   ,    ,   -
    , , ,  -
,   . ,      -
,            
 BEGIN..END,    MODEND,   -
 .
      .
     MODULE MODI;
     < , , , >
     <      >
     MODEND.

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

                            45
                    2700560.00015-01 35 01

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

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

                            46
                    2700560.00015-01 35 01

             
        .

           

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; (*  

                            47
                    2700560.00015-01 35 01

                                  *)
     , L : INTEGER;      (*   
                              *)
   XTERNAL PROCEDURE PROC1;   (*  
                                    *)
   PROCEDURE SORT (...);   (* SORT   *)
      ...
   FUNCTION IOTEST:INTEGER;(*IOTEST  *)
      ...
   (      )
   MODEND.

     3.3. 

             
 ,            
    .    
     -80     "-
",      -
  ,       
  .
            
 (FILE)    ,  
 ASSIGN  RESET.   ASSISN   
    ,     -
 .        -
    CHAIN,        -
       -
.        
      -

                            48
                    2700560.00015-01 35 01

  .     .  -
,        -
 , ,      
.     
   ,    
        :    -
       
(ABSOLUTE).
             -
   ,     
        -
     .  
    .  -
       . -
 ,        -
   /D,     -
, KO   ,    
       .
                
     ,  
           
 .       /D -
.      
  .
        ,  
  ,      -
.        -
,  ,     -
  .


                            49
                    2700560.00015-01 35 01

     .
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

                            50
                    2700560.00015-01 35 01

  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.          (*        
               *)


                            51
                    2700560.00015-01 35 01

              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);

                            52
                    2700560.00015-01 35 01

             ,
  .     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.


                            53
                    2700560.00015-01 35 01

     4.3.  WRITE  WRITELN

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

< >     ::= <>  :  < >
                            : <   >
< >          ::= <>
<   >  ::= <>
           <->  ,
     OUTPUT.

                            54
                    2700560.00015-01 35 01


                5.   

              
        -80.
        
,      ,  -
     .

     5.1.   

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

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

                            55
                    2700560.00015-01 35 01

  ,  .
          :
     1)        
,       "", 
 ""   ,   -
   ,   ,   -
,   "";
     2)  " "=0,    -
;
     3)     .
      MOVELEFT  MOVERIGHT   -
            
      .  -
    ,     -
  .  MOVERIGHT   
    ,   "-
"  "" ,  ""  -
  (. .    )  "-
".        -
  FOR,        
      .  , -
 MOVERIGHT   .
      MOVELEFT        
   ,       
       .

     .
PROCEDURE MOVD;
CONST
  STRINGSZ= 80;

                            56
                    2700560.00015-01 35 01

VAR
  BUFFER : STRING [STRINGSZ];
  LINE : STRING;

PROCEDURE INSRT(VAR DEST : STRING ; INDEX : INTEGR;
                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
   

                            57
                    2700560.00015-01 35 01

     .

     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;

                            58
                    2700560.00015-01 35 01

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. O     

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

     " "    8-   16--

                            59
                    2700560.00015-01 35 01

 : , ,  ,    
  .  "  "      
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

                            60
                    2700560.00015-01 35 01

      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;

                            61
                    2700560.00015-01 35 01


   :
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      .


                            62
                    2700560.00015-01 35 01

     .
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


                            63
                    2700560.00015-01 35 01

     5.6.  ADDR

ADDR (  ) : INTEGER

      ADDR   ,   
 . "  "   -
   ,      
 .        ,
       ',
KO         
.
             -
 ',    ,  
 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(ADDR DEMO));

                            64
                    2700560.00015-01 35 01

  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(ADDRES)=639
  ADDR(R)=641
  ADDR(S)=645

     5.7.  SIZEOF

SIZEOF (   ) : INTEGER;

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


                            65
                    2700560.00015-01 35 01

     .
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 -   
     .

                            66
                    2700560.00015-01 35 01


     .
PROCEDURE FILLTST;
VAR
    BUFFER : PACKED ARRAAY[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

                            67
                    2700560.00015-01 35 01


     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  KOKATEA  


                            68
                    2700560.00015-01 35 01

     5.11.  COPY

COPY (, ,  ) : STRING;

      ""     .  
""  "  "      .
 COPY  ,   -
  " "    "-
",     "".

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

        :
            

     5.12.  POS

POS (, ) : INTEGER;

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

                            69
                    2700560.00015-01 35 01

 ""  ,     ""
  ,   .

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

     5.13.  DELETE

DELETE (,,);

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


                            70
                    2700560.00015-01 35 01

     .
     PRCEDURE 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);

                            71
                    2700560.00015-01 35 01

        WRITELN(S);
     END;
        :
            PROCEDURE INSERT

     5.15. A ASSIGN

ASSIGN(, );

      ASSIGN     
   -        -
  RESET  REWRITE.  ""  -
   ,   ""  MO
    -,    -
         ,  
  .  ,    -
     ,  
""     TEXT.
        -80      
             
PASTMPXX.$$$,     ,
      .   -
      REWRITE   -
  ASSIGN,     -
     .
        ""   
  :
CON:  -         
             , , 
             CR ( )   

                            72
                    2700560.00015-01 35 01

           CR/LF  (  /  K),  
                  (CHR(8))  -
             , ,  .
                -
              CR   CR/LF 
                  
            8    -
            1  2 BB[1];

KBD:   -      CP/M-80; 
                    
                -
            6 BB [1];

TRM:   -      CP/M-80; 
            .  ;

LST:   -          
           CP/M-80;   .  
           ,         
              5  BB [1];

RDR:   -         CP/M-80, -
             3  [1];

PUN:   -      , 
            4  [1].
          
  CON:   KBD:,  ..    -  
 CON:   "^S", "^P" -

                            73
                    2700560.00015-01 35 01

          
 (     KBD:).

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

     5.16.  GNB  WNB

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

      GNB  WNB    -
        
.   -   , KOTO     
     (PACKED  ARRAY  OF
CHARACTER).     
   128..4095.
      GNB         -
.        CHAR.  -
  EOF    TRUE    
  ,     -  
   (, , "^Z"     -
  CP/M-80).
      WNB        -
.      ,    
.    ,  

                            74
                    2700560.00015-01 35 01

TRUE,             
.     .
      GNB  WNB   , 
 -   - "".
          -80  -
     128-    -
   ()          -
-"".          -
-"",   F     
   -"".       
 ,  GNB   0FFH   -
   1    TEXT.
          WNB    ,
 -""       
,      "". 
  "  "  -"",  
  "^Z" ( 1)     
 0FFH   .

     5.17.  BLOKREAD

BLOCKREAD (, ,  , ,  );

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

                            75
                    2700560.00015-01 35 01

  ,   -
 128-  .
      ""     ,  
  .       128    
  "".

     5.18.  BLOCKWRITE

BLOCKWRITE(, ,  , ,  );

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

     5.19.  OPEN, OPENX

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

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

                            76
                    2700560.00015-01 35 01

         ,
      
 .

     :
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         -
  .    
      .  
      ,  
      .


                            77
                    2700560.00015-01 35 01

     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         
-""    .
           -
 ASSIGN  RESET  REWRITE.     -
    ,   IORESULT -
  .
      SEEKREAD   33 [1].
            SEEKREAD   
RANDOMIO.ERL    PASLIB.ERL.

                            78
                    2700560.00015-01 35 01


     5.23.  SEEKWRITE

     SEEKWRITE(,  );

      SEEKWRITE      -
"A",   ,      .
 ,     ,    -
      -
  CLOSE    RESET.    SEEKWRITE   
 34 [1].
           SEEKWRITE  
RANDOMIO.ERL     PASLIB.ERL.

     5.24.  READHEX  WRITEHEX
          WORD    -
    READ   WRITE.
    :

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

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


                            79
                    2700560.00015-01 35 01

     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  , 
                          -  ;

                            80
                    2700560.00015-01 35 01


READ/READLN/GET          O  0  -
                           , 0 
                          ;

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

     5.26.  EMAVAIL, MAXAVAIL

MEMAVAIL : INTEGER;
MAXAVAIL : INTEGER;

         -80   MEMAVAIL    MAXAVAIL
         NEW  
DISPOSE   .  -    -
 ,       .
          SYSMEM.  
MEMAVAIL         -
  ,        .   
MAXAVAIL    ,   -
    .  MAXAVAIL  
  ,      
     .
     -80      
NEW  DISPOSE.       
    ,    (
)       .  -
  ,         

                            81
                    2700560.00015-01 35 01

  $Z,      
  0006.     
 512  ,    SP.
         MAXAVAIL    
  ,    
 FULLHEAP.ERL   PASLIB.ERL.

     5.27.    ,     
            

          :

     F - -;
      -     -
         ;
      - -;
      -   ;
      - -;
     Z - - ;
     I -     ;
      -     ;
      -     ;
    SC -   .

            -
      -80   -
:
              :

RESET(F)         .  -

                            82
                    2700560.00015-01 35 01

             -""    -
             .    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,     
                    

                            83
                    2700560.00015-01 35 01

             ,    - FALSE;
READ(F,P)         ;
READLN(F,P)        ;
WRITE(F,P)        "";
WRITELN(F,P)         "P" 
               "CR"," LF".

                 :
NEW(P)          "V"   -
               ""   "V";
NEW(P,T1,T2,...TN)     
               ,    
             1,2,...N;
DISPOSE(P)    ,   -
             ,    "";
DISPOSE(P,T1,T2,...TN)     

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

             :
   
ABS(X)  ABS(I) -       
                    

 
SQR(X)  SQR(I) -   ,    -
                     

  TRUNC(X)

                            84
                    2700560.00015-01 35 01

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

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

             :


ODD(SC):BOOLEAN
               TRUE,   
               FALSE,   

     ..Z
ORD(SC):INTEGER

      ..Z    
 
CHR(SC):CHAR

 
WRD(SC):WORD


                            85
                    2700560.00015-01 35 01

                      :


SUCC (<  >)


PRED (<  >)

     5.28.  
         -80      
 -   .    
  .   
  :

 PROCEDURE INTUERRUPT [<>] <>;

             -
,       
  .       
      ,  -
  .      
 0..7.
            
          -
       
  .    -
       
ENABLE  DISABLE.
         ,     -
  .   -

                            86
                    2700560.00015-01 35 01

    ,   
        
.       -
        .
             
-80    ,    
,      -
 INTERRUPT,   .    ,  
  , ,     ,
 -,        
 ,      .  
' ,     
           
,           
       -
 .

     5.29.  INLINE  
       -80     -
 ,      INLINE.  
        -
      .    
,      ,  -
  -    -
    .
       INLINE     -
         .       INLINE
    "(",      -
         "/"
.     

                            87
                    2700560.00015-01 35 01

")".        -
,    .  -
        :  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);

                            88
                    2700560.00015-01 35 01

     ,    *, -    -
  .
       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;


                            89
                    2700560.00015-01 35 01

      2    
INLINE     .

      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 MOVEIEFT (,    ,  
);

                            90
                    2700560.00015-01 35 01

PROCEDURE MOVERIGHT (,    , 
);

       :

PROCEDURE CLRBIT ( ,  );
FUNCTION HI      ( )        : INTEGER;
FUNCTION LO      ( )        : INTEGER;
PROCEDURE SETBIT ( ,  );
FUNCTION SHL     ( , ) : INTEGER;
FUNCTION SH      ( , ) : 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);

                            91
                    2700560.00015-01 35 01

PROCEDURE CLOSE (, );
PROCEDURE CLOSEDEL (, );
FUNCTION GNB () : CHAR;
PROCEDURE IORESULT : INTEGER;
PROCEDURE OPEN (, , );
PROCEDURE OPENX(, , , );
PROCEDURE PURGE (); FUNCTION WNB (, ) :
                                                BOOLEAN;
        :

FUUNCTION ADDR      (  )    : INTEGER;
PROCEDURE EXIT;
FUNCTION MAXAVAIL : INTEGER;
FUNCTION MEMAVAIL : INTEGER;
AUNCTION SIZEOF (   )     : INTEGER;
PROCEDURE WAIT  ( , , );

                            92
                    2700560.00015-01 35 01


               

     1.   CP/M-80   
-         


