DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦cda9873bb⟧ TextFile

    Length: 133504 (0x20980)
    Types: TextFile
    Names: »D155«

Derivation

└─⟦ae2411776⟧ Bits:30008864 Diskette med tekster der formodes at være 31-D-152…161
    └─⟦this⟧ »D155« 

TextFile

                    
           \f

F_       I_n_d_i_v_i_d_i_n_f_ _f_o_r_ _i_n_d_i_v_i_d_t_y_p_e_ _i_1_0_1_            
maxfelter = 17 
 
index   i _feltnr                i _feltadr   elem-    db-ref   ant.elem   typelgd  adm-     type 
                                            status                                status 
 1:        1      sa _reclength    0         0        0        0           2       3        2 
 2:        2      sa _serialno     2         0        0        0           2       8        2 
 3:        3      sa _rectype      4         0        0        0           2       4        2    word 
 4:        4      sa _adate        6         0        0        0           2       7        2 
 5:        5      sa _recstate     8         0        0        0           2       8        2 
 6:        6      sa _fstate      10         0        0        1 array     1       8        1    half 
 7:       10      sa _key         12         0        0        0           4       1        7    aggr 
 8:       11      sa _caseno      12         3 i      7        0           2       1 ident  2 
 9:       12      sa _type        14         3 aggr   7        0           2       1        2    word 
10:       13      sa _expl        16         0        0        4 array     2       8        2 
11:       90      sa _cons         0         0        0        1 liste-    0       0       10 
12:       91      sa _rel1         0         0        0        3 nr.       0       0       10    dref 
13:       92      sa _rel2         0         0        0        4           0       0       10 
14:     1001      sa _casetext    24         0        0        0          40       0        5 
15:     1002      sa _custname    52         0        0        0          40       0        5    text 
16:     1003      sa _custadr1    80         0        0        0          40       0        5 
17:     1004      sa _custadr2   108         0        0        0          40       0        5 
18:      101      caserecord      0         0        0        0           0       0        0 
19:        1      caself          0         0        0        0           0       0        0 
 
           register 
        individtype 
 
 \f

F_       I_n_d_i_v_i_d_i_n_f_ _f_o_r_ _i_n_d_i_v_i_d_t_y_p_e_ _i_4_0_2_ 
maxfelter = 24 
 
index  i _feltnr  i _feltnavn       i _feltadr      elem-     db-ref    ant.elem   typelgd   adm.    type 
                                                 status                                   status 
 1:         1    fb _reclength       0            0           0       0           2        3        2 
 2:         2    fb _rec _no _cf       2            0           0       0           2        2        2 
 3:         3    fb _rectype         4            0           0       0           2        4        2    word 
 4:         4    fb _adate           6            0           0       0           2        7        2 
 5:         5    fb _recstate        8            0           0       0           2        8        2 
 6:         6    fb _fstate         10            0           0       4 array     1        8        1    half 
 7:        90    fb _caseref       -10            0           0       1 listenr   4        1 ident 11    mref 
 8:    1   10    sa _key            12            1 i mref    7       0           4        0        7    aggr 
 9:    1   11    sa _caseno         12            3 i         8       0           2        0        2 
10:    1   12    sa _type           14            3 aggr      8       0           2        0        2    word 
11:        91    fb _ident          14            0           0       0           2        1 ident  2 
12:      2001    fb _km _amt         16            0           0       0           4        0        3 
13:      2002    fb _subst _amt      20            0           0       0           4        0        3    long 
14:      2003    fb _other _amt      24            0           0       0           4        0        3   
15:      2004    fb _machinetime    28            0           0       4 array     2        0        2 
16:      2005    fb _rc4000         28            5 equiv    15       0           2        0        2    word 
17:      2006    fb _rc8000         32            5          15       0           2        0        2 
18:      -402    voucherinf        36            0          38 rpadr 3 repant    4        0        9    rpg 
19:       201    fb _voucherno       0            4 i        18       0           2        0        2    word 
20:       202    fb _voucherdate     2            4 rpg      18       0           2        0        6    date 
21:      -401    employeeref       38            0           0       0           0        0        8    fgr 
22:       101    fb _employeeref    -4            2 i fgr    21       2 listenr   4        0       11    mref 
23:    2   10    ma _key            12            1 i mref   22       0           4        0        7    aggr 
24:    2   11    ma _employeeno     12            3 i aggr   23       0           4        0        3    long 
25:       402    travelexpenses     0            0           0       0           0        0        0 
26:         4    consumptlf         0            0           0       0           0        0        0 
 
 \f

F_       I_n_d_i_v_i_d_i_n_f_ _f_o_r_ _i_n_d_i_v_i_d_t_y_p_e_ _i_1_2_0_2_ 
maxfelter = 31 
 
index  i _feltnr   i _feltnavni _feltadr  elem-    db-ref     ant.elem      typelgd   adm.     type 
                                              status                                      status 
 1:          1    i12 _reclength      0        0         0         0             2         3         2 
 2:          2    i12 _checksum       2        0         0         0             2         8         2   word 
 3:          3    i12 _rectype        4        0         0         0             2         4         2 
 4:          4    i12 _adate          6        0         0         0             2         7         2 
 5:         10    i12 _sa _key         8        0         0         0             4         1         7   aggr 
 6:         11    i12 _caseno         8        3 i       5         0             2         1 ident   2   word 
 7:         12    i12 _casetype      10        3 aggr    5         0             2         1         2 
 8:          1    fb _reclength      24        0         0         0             2         0         2 
 9:          2    fb _rec _no _cf      26        0         0         0             2         0         2 
10:          3    fb _rectype        28        0         0         0             2         0         2   word 
11:          4    fb _adate          30        0         0         0             2         0         2 
12:          5    fb _recstate       32        0         0         0             2         0         2 
13:          6    fb _fstate         34        0         0         4 array       1         0         1   half 
14:         90    fb _caseref       -10        0         0         1 listenr     4         0        11   mref 
15:    1    10    sa _key            14        1 i mref 14         0             4         0         7   aggr 
16:    1    11    sa _caseno         14        3 i      15         0             2         0  c      2 
17:    1    12    sa _type           16        3 aggr   15         0             2         0  o      2   word 
18:         91    fb _ident          38        0         0         0             2         0  p      2 
19:       2001    fb _km _amt         40        0         0         0             4         0  y      3 
20:       2002    fb _subst _amt      44        0         0         0             4         0  r      3   long 
21:       2003    fb _other _amt      48        0         0         0             4         0  e      3 
22:       2004    fb _machinetime    52        0         0         4 array       2         0  c      2 
23:       2005    fb _rc4000         52        5 equiv  22         0             2         0  o      2   word 
24:       2006    fb _rc8000         56        5        22         0             2         0  r      2 
25:       -402    voucherinf        60        0        62 rpgadr  3 rpgant      4         0  d      9   rpg 
26:        201    fb _voucherno       0        4 i      25         0             2         0         2   word 
27:        202    fb _voucherdate     2        4 rpg    25         0             2         0         6   date 
28:       -401    employeeref       62        0         0         0             0         0         8   fgr 
29:        101    fb _employeeref    -4        2 i fgr  28         2 listenr     4         0        11   mref 
30:    2    10    ma _key            20        1 i mref 29         0             4         0         7   aggr 
31:    2    11    ma _employeeno     20        3 i aggr 30         0             4         0         3   long 
32:       1202    i12 _travelexp      0        0         0         0             0         0         0 
33:         12    i12 _trans          0        0         0         0             0         0         0 
 
 \f

                                                 i 
           
          T_A_B_L_E_ _O_F_ _C_O_N_T_E_N_T_S_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _P_A_G_E_ 
           
          1.  INDLEDNING ............................................   1 
           
          2.  DB-infprocedurerne ....................................   2 
              2.1  initdbinf ........................................   2 
              2.2  filinf ...........................................   3 
              2.3  listeinf .........................................   4 
              2.4  registerinf ......................................   5 
              2.5  feltinf ..........................................   8 
              2.6  individinf .......................................  11 
              2.7  værdiinf .........................................  22 
           
           \f

                                                 ii 
           \f

F_       1_._ _ _ _ _ _ _ _ _I_N_D_L_E_D_N_I_N_G_ 1.
           
          DB-beskrivelsens dokumentation af databasen indgår i mange værk-
          tøjsprogrammer og hjælpeprogrammer. Da disse programmer bør være
          uafhængige af eventuelle ændringer i det interne format af DB-re-
          gistret, er der udarbejdet et sæt procedurer - de såkaldte DB-
          inf-procedurer - som kan fortolke informationen i DB-registret og
          levere den på en mere brugervenlig form. 
           
           \f

F_       2_._ _ _ _ _ _ _ _ _D_B_-_i_n_f_p_r_o_c_e_d_u_r_e_r_n_e_    2.
           
                   Nedenfor   beskrives de enkelte DB-inf-procedurer. De læser alle
          fra DB-registret via en global zone, der skal erklæres som vist i
          figur 1. 
           
          zone dbz (buflengthcf (string  db-regnavn (increase(i)), 2), 
                    3, stderror); 
           
          Figur 1: Erklæring af zone for DB-inf  
           
          Zonen skal åbnes ved et kald af procedure init _db _inf (jf. afsnit
          2.1), hvorefter de øvrige procedurer kan kaldes i vilkårlig
          rækkefølge. 
           
                    
2_._1_ _ _ _ _ _ _ _i_n_i_t_d_b_i_n_f_  2.1
           
          Initialiseringsproceduren >init _db _inf> er erklæret som vist i
          figur 2. 
           
          integer procedure init _db _inf (dbz, dbreg _navn, dbreg _version, 
                                         sprogkode); 
              zone           dbz; 
              real array     dbreg _navn;       <*(1:2)*' 
              integer        dbreg _version; 
              integer        sprogkode; 
           
          Figur 2: init _db _inf 
           
          Proceduren åbner zonen >dbz> til DB-registret identificeret ved
          >dbreg _navn>. Parametrene >dbreg _version> og >sprogkode> er p.t.
          dummy. (De er beregnet til fremtidig udvidelse af DB-registret
          med versionskontrol og alternative feltnavne). 
           
          Værdien af procedurekaldet: 
          '=  0: ok 
           = -1: ikke dbregister i >dbreg _navn> 
           = -2: forkert dbregister version 
           = -3: ukendt sprogkode 
          <= -4: inkonsistens i db-register 
           
           \f

         2_._2_ _ _ _ _ _ _ _f_i_l_i_n_f_ 2.2
           
          Proceduren >filinf> er erklæret som vist i figur 3. 
           
          integer procedure filinf (dbz, filnr, filnavn, f _inf); 
              zone             dbz;        <*åbnet ved init _db _inf*' 
              integer          filnr; 
              long array       filnavn;    <*(1:2)*' 
              integer array    f _inf;      <*(1:22 + max _antal _registre*' 
           
          Figur 3: filinf 
           
          Proceduren henter oplysning fra DB-registret om en fil bestemt
          ved værdien af kaldparametern >filnr>: 
           
          f_i_l_n_r_ _=_ _0_: Filen identificeres ved navnet lagret i >filnavn>,
          mens >filnr> som returparameter indeholder filens nummer. 
           
          f_i_l_n_r_ _'_ _0_: Filen identificeres ved nummeret i >filnr>, mens
          >filnavn> som returparameter indeholder filens navn. 
           
          Øvrige returværdier: 
           
          f_i_l_i_n_f_: Værdien af procedurekaldet: 
          < 0: inkonsistens i DB-register eller fejl ved >init _db _inf> 
          = 0: ukendt fil 
          ' 0: ok 
           
          f_i_n_f_: integer array f _inf (1:22+max _antal _registre) indeholder
          som returværdi filbeskrivelsen, som vist nedenfor: 
           
          index         indhold 
          1             filtype:   1 = text 
                                   2 = outvar 
                                   3 = cfmaster 
                                   4 = cflist 
                                   5 = special 
          2             minsegs    (antal segmenter) 
          3             normsegs   (antal segmenter) 
          4             maxsegs    (antal segmenter) \f

          index         indhold 
          5             bloklængde (antal halvord) 
          6             ubenyttet 
          7             min. individlængde (antal halvord) 
          8             norm. individlængde (antal halvord) 
          9             max. individlængde (antal halvord) 
          10            ubenyttet 
                  11            nøglekode: 1 = ingen nøgle 
                                   2 = kompakt nøgle 
                                   3 = long nøgle 
                                   4 = abs nøgle 
          12            nøglebase (dvs. basisadresse for nøglen som en
                        lige halvordsadresse) 
          13            nøglelængde (antal halvord) 
          14-17         nøglemaske (2 longs, kun relevant for nøglekode 2, 
                        beskriver en kompakt nøgle som et antal words og  
                        longs, hvor en long er angivet med en 1-bit) 
          18            antal registre i filen 
          19            ubenyttet 
          20            filparam1: indhold bestemt af filtypen:  
                                   cfmaster: bucketstørrelse i antal segm. 
                                   cf list:  bruges ikke 
                                   andet:    bruges ikke 
          21            filparam2: bruges ikke 
          22            filparam3: bruges ikke 
          23-           registernumre for alle registre, der tilhører filen
           
           
  2_._3_ _ _ _ _ _ _ _l_i_s_t_e_i_n_f_ 
              2.3
           
          Proceduren >listeinf> er erklæret som vist i figur 4. 
           
          integer procedure liste _inf (dbz, listenr, listenavn, l _inf); 
               zone           dbz;          <*åbnet ved init _db _inf*' 
               integer        listenr; 
               long array     listenavn;    <*(1:3)*' 
               integer array  l _inf;        <*(1:5)*' 
           
          Figur 4: listeinf 
           \f

          Proceduren henter oplysning fra DB-registret om en cf-kæde
          bestemt ved kaldparameteren >listenr>. 
           
                   Returværdier: 
           
          l_i_s_t_e_i_n_f_: Værdien af procedurekaldet: 
          < 0: inkonsistens i DB-registret eller fejl ved >init _db _inf> 
          = 0: ukendt listenr 
          ' 0: ok 
           
          l_i_s_t_e_n_a_v_n_: long array listenavn (1:3)  
          indeholder som returværdi listens navn  
           
          l_i_n_f_: integer array l _inf (1:5) indeholder som returværdi
          nedenstående oplysninger om listen: 
           
          index    indhold 
          1        filnummer for listens moderfil 
          2        filnummer for listens datterfil 
          3        registernummer for listens moderregister 
          4        registernummer for listens datterregister 
          5        listetype:  1 = enkel 
                               2 = forbind 
                               3 = netværk 
           
           
2_._4_ _ _ _ _ _ _ _r_e_g_i_s_t_e_r_i_n_f_ 2.4
           
          Proceduren >register _inf> er erklæret som vist i figur 5. 
           
          integer procedure register _inf (dbz, regnr, regnavn, reginf,
                                          ityper, itypenavne, ilængder); 
              zone                 dbz;          <*(1:3)*' 
              integer              regnr; 
              long array           regnavn;      <*(1:3)*'  
              integer array        reginf;       <*(1:27+max _antal _filer)*' 
              integer array        ityper;       <*(1:max _antal _ityper)*' 
              long array           itypenavne;   <*(1:3*max _antal _ityper)*' 
              integer array        ilænger;      <*(1:max _antal _ityper)*' 
           
          Figur 5: register _inf. 
           \f

                   Proceduren henter oplysning fra DB-registret om et register be-
          stemt ved værdien af kaldparameteren >regnr>: 
           
          r_e_g_n_r_ _=_ _0_: Registret identificeres ved navnet lagret i >regnavn>,
          mens >regnr> som returparameter indeholder registrets nummer. 
           
          r_e_g_n_r_ _'_ _0_: Registret identificeres ved registernummeret i
          >regnr>, mens >regnavn> som returparameter indeholder registrets
          navn. 
           
          Øvrige returværdier: 
           
          r_e_g_i_s_t_e_r_i_n_f_: værdien af procedurekaldet: 
          < 0: inkonsistens i DB-registret eller fejl ved >init _db _inf> 
          = 0: ukendt register 
          ' 0: antal individtyper i registret 
           
          i_t_y_p_e_r_: integer array ityper (1: max _antal _ityper) 
          indeholder som returværdi individtypenumrene for alle de indi-
          vidtyper, der indgår i registret. 
           
          i_t_y_p_e_n_a_v_n_e_: long array itypenavne (1:3*max _antal _ityper) 
          indeholder som returværdi individtypenavnene for alle registrets
          individtyper, lagret med 3 longs pr. navn (max. 17 tegn). 
           
          i_l_æ_n_g_d_e_r_: integer array ilængder (1: max _antal _ityper)      
          indeholder som returværdi den maximale og minimale individlængde
          (antal halvord) for hver individtype, der indgår i registret.
          Individlængderne er pakket således: 
                max _ilængde shift 12 + min _ilængde 
           
          r_e_g_i_n_f_: integer array reginf (1:27+max _antal _filer) 
          indeholder som returværdi registerbeskrivelsen som vist nedenfor:
           \f

              Index         Indhold: 
          1             registertype         2 = sekventiel 
                                             3 = indekssekventiel 
                                             4 = primærliste 
                                             1 = udefineret 
          2             antal filer hvori registret kan indgå 
          3             anvendelseskode:     1 = speciel 
                                             2 = standard 
                                             3 = gvs 
                                             4 = gvs-speciel 
          4             listenummer for primærliste 
          5             ubenyttet 
          6             mindste individlængde (antal halvord) *) 
          7             største individlængde (antal halvord) *) 
          8             nøglekode 
          9             nøglebase          som filinf, f _inf (11:17) 
          10            nøglelængde 
          11-14         nøglemaske 
          15            ubenyttet 
          16            ubenyttet 
          17            antal individtyper i registret (=registerinf) 
          18            antal feltgrupper i registret 
          19            antal registerspecifikke felter 
          20            feltnr for første registerspecifikke felt 
          21            feltnr for sidste registerspecifikke felt 
          22            samlet længde (antal halvord) af register speci- 
                            fikke felter 
          23            antal nøglefelter 
          24            antal felter med fremdaterede ændringer 
          25            antal moderkædefelter 
          26            antal datterkædefelter 
          27            længde (antal halvord) af kædedel 
          28-           filnumre for alle de filer, registret kan tilhøre 
           
          *) oplysningen er i_k_k_e_ rigtig, hvis individet indeholder en
             copyrecord. 
           
             \f

         2_._5_ _ _ _ _ _ _ _f_e_l_t_i_n_f_ 2.5
           
           
          Proceduren feltinf er erklæret som vist i figur 6: 
           
          integer procedure feltinf (dbz, regnr, feltnr, feltnavn,
                                     feltspec, feltadr, fvref); 
              zone          dbz;       <*åbnet ved init _db _inf *' 
              integer       regnr; 
              integer       feltnr; 
              long array    feltnavn;  <*(1:3)*' 
              long          feltspec; 
              integer       feltadr; 
              integer       fvref; 
           
          Figur 6: feltinf 
           
          Proceduren henter oplysning fra DB-registeret om et felt eller en
          feltgruppe bestemt ved feltnr eller feltnavn: 
           
          f_e_l_t_n_r_ _=_ _0_: feltet identificeres ved navnet lagret i >feltnavn>,
          mens >regnr> og >feltnr> som returparametre indeholder
          registernummer og feltnummer for feltet. 
           
          f_e_l_t_n_r_ _'_ _0_: feltet identificeres ved feltnummer og registernummer
          i >feltnr> og >regnr>, mens >feltnavn> som returværdi indeholder
          feltets navn. 
           
                   Returværdier: 
           
          f_e_l_t_i_n_f_: værdien af procedurekaldet: 
          < 0: inkonsistens i DB-register eller fejl ved >init _db _inf> 
          = 0: ukendt felt 
          = 1: feltet er registerspecifiket 
          = 2: feltet er feltgruppespecifikt 
          = 3: feltet er individtypespecifikt 
           \f

          f_e_l_t_n_a_v_n_: integer feltnavn 
          indeholder som returværdi feltets navn (uanset kaldmåden). Hvis
          feltet er af type mref eller dref er det dog listenavnet der re-
          turneres. 
           
          f_e_l_t_s_p_e_c_: long feltspec 
          indeholder som returværdi oplysninger om feltet pakket som vist i
          Figur 7. 
           
             3         3         16      10        8        4       4 
          dec.ant. elem-status db-ref ant.elem. typelgd adm-status type 
          47   45           42     26        16       8          4    0 
           
          figur 7: indhold af feltspec. 
           
          De enkelte bitgrupper i feltspec beskrives nedenfor: 
           
          d_e_c_._a_n_t_ 
          numerisk felt: antal decimaler specificeret i feltets repræsen-
                         tationsangivelse. 
          andre felter : 0 
           
                   e_l_e_m_-_s_t_a_t_u_s_ 
          angiver feltets sammenhæng med andre felter: 
          0 = selvstændigt felt 
          1 = element i mref 
          2 = element i feltgruppe 
          3 = element i aggregat 
          4 = element i repeterende feltgruppe 
          5 = redefinition af arrayfelt 
           
          d_b_-_r_e_f_ indeholder: 
          hvis feltet er en repeterende feltgruppe: 
               basisadressen (= lige halvordsadresse) for den første 
               repeterende feltgruppe i individet, 
          hvis elem-status <' 0: f_e_l_t_n_r_ for det overordnede felt, som det  
               givne felt er element i, 
          ellers: 0. 
           \f

          a_n_t_._e_l_e_m_ Betydningen afhænger af feltets art: 
          arrayfelt:      antal arrayelementer 
          rep.feltgruppe: max.antal repetitioner 
          mref.felt:      listenr 
          dref.felt:      listenr 
          ellers:         0 
           
          t_y_p_e_l_g_d_ angiver længden af feltet afhængig af felttypen: 
          textfelt:       antal karakterer excl. afsluttende null 
          mref.felt:      samlet længde (antal halvord) af modernøglen 
          dref.felt:      0 
          aggr. felt:     samlet længde (antal halvord) 
          feltgruppe:     -      -       -     - 
          numerisk felt:  antal halvord (1, 2 el. 4) 
           
                   Hvis feltet er et array eller en repeterende feltgruppe, er det
          længden af en enkelt forekomst. 
           
          a_d_m_-_s_t_a_t_u_s_ angiver administrativ feltstatus: 
          0 = normalt felt 
          1 = ident (nøglefelt) 
          2 = recnocf 
          3 = reclength (ilang) 
          4 = rectype (itype) 
          5 = genitype 
          6 = geniuser 
          7 = adate (ændringsdato) 
          ' 8 checksum og øvr. adm. status. 
           
          t_y_p_e_ angiver feltets type: 
          1  = half (byte) 
          2  = word 
          3  = long 
          4  = real 
          5  = text 
          6  = date 
          7  = aggr 
          8  = feltgruppe 
          9  = repeterende feltgruppe 
          10 = dref 
          11 = mref 
           \f

          f_e_l_t_a_d_r_: integer feltadr 
          indeholder som returværdi feltets basisadresse, dvs. en halvords-
          adresse der peger umiddelbart foran feltes start. Felter  af ty-
          perne mref, dref, feltgruppe og rep.feltgruppe har dog feltadr
          =0. For felter der indgår i en feltgruppe eller en rep. feltgrup-
          pe angives adressen relativt til feltgruppens start. For alle
          andre felter er adressen absolut inden for individet. 
           
                   f_v_r_e_f_: integer fvref 
          indeholder som returværdi feltets værdinummer, der kan bruges som
          kaldparameter til procedure værdi _inf (jf. afsnit 2.7). 
           
           
    2_._6_ _ _ _ _ _ _ _i_n_d_i_v_i_d_i_n_f_ 2.6
           
          Proceduren individinf er erklæret som vist i figur 8. 
           
          integer procedure individ _inf (dbz, itypenr, i _feltnr,
                                         i _feltnavn, i _feltspec, i _feltadr, i _fvref); 
              zone          dbz;        <*åbnet ved init _db _inf*' 
              integer       itypenr; 
              integer array i _feltnr;   <*(1: maxfelter +2)*' 
              long array    i _feltnavn; <*(1:3*(maxfelter +2)*' 
              long array    i _feltspec; <*(1:maxfelter +2)*' 
              integer array i _feltadr;  <*(1:maxfelter +2)*' 
              integer array i _fvref;    <*(1:maxfelter +2)*' 
           
          Figur 8: individ _inf. 
           
          Proceduren henter oplysning fra DB-registret om alle felter i en
          individtype bestemt ved værdien af kaldparameteren >itypenr>. 
           
          i_t_y_p_e_n_r_ _=_ _0_: individtypen identificeres ved individtypenavnet
          lagret i i _feltnavn som kaldparameter. >itypenr> indeholder som
          returværdi individtypenummeret. 
           
          i_t_y_p_e_n_r_ _'_ _0_: individtypen identificeres ved individtypenummeret i
          >itypenr>. 
           \f

                   Returværdier: 
           
          i_n_d_i_v_i_d_i_n_f_: Værdien af procedurekaldet: 
          = -4: copyrecord i copyrecord 
          = -3: copyrecord af ukendt individtype 
          = -2:   inkonsistens i DB-register eller 
          = -1:   fejl ved >init _db _inf>. 
          =  0: ukendt individtype 
          '  0: maxfelter (=antallet af feltbeskrivelser hørende til
                individtypen). 
           
          Alle øvrige returværdier er p_a_r_a_l_l_e_l_l_e_ _a_r_r_a_y_s_, der beskriver
          individtypens felter i den rækkefølge hvori de findes i
          individet. 
           
          I arrayelementerne umiddelbart efter et felt af typen aggregat,
          feltgruppe eller rep. feltgruppe findes beskrivelsen af de en-
          keltfelter, der indgår i aggregatet/feltgruppen. 
           
          Hvis et arrayfelt er ækvivaleret med simple felter, findes
          beskrivelsen af disse umidelbart efter arrayfeltets beskrivelse. 
           
          I arrayelementerne efter et felt af typen mref findes beskri-
          velsen af moderregistrets nøglefelter. Hvis modernøglen er  et
          aggregat findes først aggregatfeltet og derefter de felter der
          indgår i aggregatet. 
           
          De sidste to benyttede elementer af disse arrays (med index hhv.
          maxfelter+1 og maxfelter+2) beskriver ikke felter men individ-
          typen og registret. 
           
          I det følgende defineres indholdet af de enkelte arrays. Iøvrigt
          henvises til eksemplerne i slutningen af dette afsnit. 
           
           
                   i_f_e_l_t_n_r_: integer array i _feltnr (1: maxfelter +2)  
          indeholder feltnumrene for alle individtypens felter. Visse
          felter optræder her med specielle feltnumre: 
           \f

          feltgruppe/rep.feltgruppe: 
          nr:= -feltgruppenr 
           
          modernøgle i mref: 
          nr:= moder _regnr shift 16 + moder _feltnr 
           
          individtype: 
          i _feltnr (maxfelter +1):= itypenr 
           
          register: 
          i _feltnr (maxfelter +2):= registernr 
           
          i_f_e_l_t_n_a_v_n_: long array i _feltnavn (1:3*(maxfelter+2)) 
          indeholder feltnavnene for alle individtypens felter, samt indi-
          vidtypenavn og registernavn. Hvert navn optager 3 longs (max. 17
          tegn). 
           
          De sidste to navne i i _feltnavn er hhv. individtypenavn og re-
          gisternavn. 
           
          i_f_e_l_t_s_p_e_c_: long array i _feltspec (1:maxfelter+2) 
          indeholder som returværdi feltbeskrivelser for alle individtypens
          felter. Hvert element af >i _feltspec> indeholder pakket felt-
          information som defineret ved >feltspec> i afsnit 2.5 med und-
          tagelse af bitgruppen db-ref.  
           
          d_b_-_r_e_f_ indeholder: 
          hvis feltet er en repeterende feltgruppe: basisadressen (= lige
               halvordsadresse) for den første repeterende feltgruppe i
               individet, 
          hvis elemstatus <' 0: i_n_d_e_x_ i feltarrays for beskrivelsen af det
               overordnede felt som det aktuelle felt tilhører 
          ellers: 0. 
           
                   i_f_e_l_t_a_d_r_: integer array i _feltadr (1:maxfelter+2) 
          indeholder feltadressen for alle individtypens felter, som
          beskrevet ved >feltadr> i afsnit 2.5 med følgende undtagelser: 
           \f

          Felt i feltgruppe: adressen angives absolut inden for individet. 
           
          Felt i repeterende feltgruppe: adressen angives relativt til
          feltgruppens start. 
           
          Felt af typen mref: i _feltadr indeholder et tal, der angiver
          forskydningen mellem de efterfølgende moder-nøglefelters adresse
          i moderindividet og deres faktiske placering i datterindividets
          kædedel. Denne forskydning bruges ved adressering i kædedelen,
          f.eks. ved individudskrifter, som vist i eksempelt figur 9. 
           
          Felt der indgår i mref: dvs. et felt i moderregistrets nøgle.
          i _feltadr indeholder moder-nøglefeltets adresse i moderindividet,
          jf. figur 9.  
           
           
                   Udskrift af long modernøgle i liste individ: 
           
          begin      integer kædedels _lgd, kædebasis; 
                     long field lf; 
                     integer array ia(1:20); 
                     zone zlist (...); <*cf-listefil*' 
                 ... 
          kædedels _lgd := reginf(27); 
          getzone6 (zlist, ia); 
          kædebasis := ia(16); 
          ia(16)    := ia(16) + kædedels _lgd; 
          setzone6 (zlist, ia); 
           
          lf := kædebasis 
              + fadr (mrefindex) <*forskydning*' 
              + fadr (feltindex) <*modernøgle basis *' 
              + 4; 
          write (out, <<dddd', zlist.lf); 
          end; 
           
          Figur 9: Eksempel på addressering af kædedel. 
           \f

          i_f_v_r_e_f_: integer array i _fvref (1: maxfelter+2)  
          indeholder værdinumrene for hvert af individets felter. 
           
          Hvis en individtype indeholder en >c_o_p_y_r_e_c_o_r_d_> i DB-beskrivelsen,
          vil procedure individinf efter beskrivelsen af individtypens egne
          felter levere beskrivelsen af alle den kopierede individtypes
          felter. Disse vil fremtræde med feltnumre  og andre oplysninger
          som i det oprindelige individ, dog med følgende to undtagelser: 
           
          a_d_m_-_s_t_a_t_u_s_ i i _feltspec er 0 for alle felter, uanset deres adm-
          status i det oprindelige individ. 
           
                   i_f_e_l_t_a_d_r_ indeholder adressen på feltets placering i det nye indi-
          vid. Bemærk her, at en eventuel kædedel i individet kopieres
          f_o_r_a_n_ selve individet (mens kædedelen ligger sidst i det oprinde-
          lige individ). 
           
          I hvert af de efterfølgende tre eksempler vises definitionen af
          et register og en individtype i database beskrivelsen, sammen med
          indholdet af individinf-arrayene for den pågældende individtype. 
           \f

F_          Eksempel 1: M_o_d_e_r_i_n_d_i_v_i_d_ _i_ _c_f_-_m_a_s_t_e_r_f_i_l_ 
           
          10 
          20  logical _file _section: 
          30 
          40  r1    caselfindexed _sequential              gvs 
          50 ** 
          60 ** logical _file _specific fields 
          70 ** 
          80  f1    sa _reclength  word                 reclength 
          90  f2    sa _serialno   word                 serialno 
          100 f3    sa _rectype    word                 rectype 
          110 f4    sa _adate      word                 adate 
          120 f5    sa _recstate   word                 recstate 
          130 f6    sa _fstate     half (1)             fbits 
          140**  
          150 f10   sa _key        aggr                 ident (1) 
          160 f11   sa _caseno     word         v1 
          170 f12   sa _type       word         v2 
          180 aggr 
          190** 
          200 f13   sa _expl       word (4)             plosion 
          210 f90   sa _cons       dref    sa _consumpt 
          220 f91   sa _rel1       dref    sa _netw1 
          230 f92   sa _rel2       dref    sa _netw2 
                   240 ** 
          250 ** record _types 
          260 ** 
          270  i101   caserecord 
          280  f1001  sa _casetext      text    t40       gu 
          290  f1002  sa _custname      test    t40       gu 
          300  f1003  sa _custadr1      text    t40       gu 
          310  f1004  sa _custadr2      text    t40       gu 
           
           \f

F_                 (skema) 
           \f

F_                 Eksempel 2: D_a_t_t_e_r_i_n_d_i_v_i_d_ _i_ _c_f_-_l_i_s_t_e_f_i_l_e_ 
           
          10    
          20   r4    consumptlf     primary _list:      sa _consumpt gvs    
          30  ** logical _file _specific fields 
          40   f1    fb _reclength   word               reclength 
          50   f2    fb _rec _no _cf   word               recnocf 
          60   f3    fb _rectype     word               rectype 
          70   f4    fb _adate       word               adate 
          80   f5    fb _recstate    word               recstate 
          90   f6    fb _fstate      half (4)           fbits 
          100  f90   fb _caseref     mref  sa _consumpt  ident (0) 
          110  f91   fb _ident       word               ident (1) 
          120 ** 
          130  g401  employeeref 
          140  f101  fb _employeeref mref  ma _consumpt 
          150 ** 
          160  g402  voucherinf     rpg 
          170  f201  fb _voucherno   word         v5 
          180  f202  fb _voucherdate word    d1 
          190 ** 
          200 
          210 
          220 ** recordtypes and record _specific fields 
          280  i402  travelexpenses 
          290  f2001 fb _km _amt      long     n6.2  v8 
          300  f2002 fb _subst _amt   long     n6.2  v8 
          310  f2003 fb _other _amt   long     n6.2  v8 
          320  f2004 fb _machinetime word (4) 
          330  f2005 fb _rc4r000     =        fb _machinetime (1) 
          340  f2006 fb _rc8000      =        fb _machinetime (3) 
          350  voucherinf (3) 
          360  employeeref 
          370 ** 
           
           \f

F_                 (skema) 
           \f

F_                 Eksempel 3: C_o_p_y_r_e_c_o_r_d_ _a_f_ _d_a_t_t_e_r_i_n_d_i_v_i_d_ 
           
          30                      
          40   r 12     i12 _trans         sequential 
          50 
          60  ** logical _file _specific fields 
          70 
          80   f1       i12 _reclength     word            reclength 
          90   f2       i12 _checksum      word            checksum 
          100  f3       i12 _rectype       word            rectype 
          110  f4       i12 _adate         word            adate 
          120   
          130  f10      i12 _sa _key        copyaggr sa _key ident(1) 
          140  f11      i12 _caseno 
          150  f12      i12 _casetype  
          160  aggr 
          170 
          220 
          230 ** record type 2 travel expenses transaction 
          240 
          250  i1202    i12 _travelexp 
          260  copyrecord:     i402 
          270 
           
           \f

F_                 (skema)\f

F_       2_._7_ _ _ _ _ _ _ _v_æ_r_d_i_i_n_f_ 2.7
           
          Proceduren værdiinf er erklæret som vist i figur 10. 
           
          integer procedure værdi _inf (dbz, vref, værdier); 
             zone          dbz;       <*åbnet ved init _db _inf*' 
             integer       vref; 
             long array    værdier;   <*(1:2+maxværdier)*' 
           
          Figur 10: værdi _inf 
           
          Proceduren henter oplysning fra DB-registret om en værdispecifi-
          cation bestemt ved værdinummeret i kaldparameteren >v_r_e_f_&. 
           
          Returværdier: 
           
          v_æ_r_d_i_i_n_f_: Værdien af procedurekaldet: 
          < 0: inkonsistens i DB-registret eller fejl ved >init _db _inf> 
          = 0: ukendt værdinr 
          ' 0: maxværdier (= antallet af relevante værdier). 
           
          v_æ_r_d_i_e_r_: Indeholder værdierne hørende til vref på følgende måde: 
           
          v_æ_r_d_i_e_r_(_1_)_ er en værdispecifikation pakket på samme måde som
          >feltspec> i procedure feltinf (jf. afsnit 2.5), idet dog
          bitgrupperne elem-status, db-ref og adm-status altid er nul. 
           
           3           19           10         8       4      4 
          dec.ant.         0       ant.elem.  typelgd    0    type 
          47    45              26        16        8       4      0 
           
          Figur 11: indhold af værdier(1) 
           
                   v_æ_r_d_i_e_r_(_2_)_ indeholder en bitmaske, som angiver hvilke af de ef-
          terfølgende elementer af >værdier>, der er relevante. Bittene fra
          og med  
                    værdier(2) shift (-1) extract 1 
          til og med 
                    værdier(2) shift (-værdiinf) extract 1 
          er betydende; de øvrige er nulstillede. 
           \f

          Den første bit (dvs. shift(-1)) har værdien 1 hvis der findes en
          standardværdi, 0 ellers. 
           
          De efterfølgende bits svarer til par af min-max grænser, dvs.
          bitten >shift(-2)> angiver om første interval har en nedre
          grænse. 
           
          v_æ_r_d_i_e_r_(_3_:_._._._)_ indeholder de aktuelle værdier (standardværdi
          og/eller værdigrænser), idet værdispecifikationen i værdier(1)
          bestemmer formatet af disse værdier. 
           
          B_e_g_r_æ_n_s_n_i_n_g_e_r_: 
          I den nuværende udgave af værdiinf er der følgende begrænsninger
          i forhold til ovenstående generelle beskrivelse: 
           
              værdiinf   <= 3 
              værdier(1)  = 4 shift 8 + 3 
              værdier(3)  = evt. standardværdi 
              værdier(4)  = evt. minimumsværdi 
              værdier(5)  = evt. maksimumsværdi. 
           
           \f

                                                 i 
           
          T_A_B_L_E_ _O_F_ _C_O_N_T_E_N_T_S_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _P_A_G_E_ 
           
          1.  INTRODUCTION ...........................................   1 
           
          2.  SYSTEM OVERVIEW ........................................   2 
           
          3.  ACCESS TO FTU VIA RC8000 MESSAGES ......................   3 
              3.1  Messages ..........................................   3 
                   3.1.1  Sense ......................................   3 
                   3.1.2  Get Status .................................   3 
                   3.1.3  Start FTU ..................................   4 
                   3.1.4  Stop FTU ...................................   4 
                   3.1.5  Abort Transfer .............................   4 
                   3.1.6  Request Transfer (REQ) .....................   5 
              3.2  Answers ...........................................   5 
           
          4.  ACCESS TO FTU VIA SC CONNECT ...........................   6 
              4.1  Connecting ........................................   6 
              4.2  Session ...........................................   6 
              4.3  Disconnecting .....................................   6 
           
          5.  FTU ACCESS TO SC .......................................   7 
              5.1  Port Open .........................................   7 
              5.2  Connecting ........................................   7 
              5.3  Session ...........................................   8 
              5.4  Disconnecting .....................................   8 
           
          6.  IMPLEMENTATION OF FTP ..................................   9 
              6.1  Level 0 Implementation ............................   9 
              6.2  Level 1 Implementation ............................  13 
           
          7.  INSTALLATION GUIDE .....................................  14 
              7.1  Resource Requirements .............................  14 
              7.2  Prerequisites .....................................  14 
              7.3  System Tape .......................................  14 
              7.4  Installation ......................................  15 
              7.5  Validation ........................................  16 \f

                                                 ii 
           
          T_A_B_L_E_ _O_F_ _C_O_N_T_E_N_T_S_ _(_c_o_n_t_i_n_u_e_d_)_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _P_A_G_E_ 
           
          8.  OPERATING GUIDE ........................................  17 
              8.1  Process Start .....................................  17 
              8.2  Call of FTU Program (bftu) ........................  18 
              8.3  Operator Interaction During Operation .............  20 
                   8.3.1  Printouts on Current Output ................  20 
                   8.3.2  Printouts from s on Print Messages .........  20 
              8.4  Operator Termination of FTU .......................  21 
           
          9.  FTU ACCESS TO DISC FILES ...............................  23 
           
          10. MAINTENANCE INFORMATION ................................  24 
              10.1  FTU Program ......................................  24 
                    10.1.1  Block Structure and Procedures ...........  24 
                    10.1.2  Protocol Procedures ......................  26 
                    10.1.3  Event Handling ...........................  28 
                    10.1.4  Alarm Handling ...........................  30 
                    10.1.5  Net Access ...............................  30 
                    10.1.6  Level 0 Parameter Mapping ................  31 
              10.2  Genjob ...........................................  31 
              10.3  Test of FTU under BOSS2 ..........................  32 
           
           
                   A_P_P_E_N_D_I_C_E_S_: 
           
                   A.  REFERENCES .............................................  33 
           
          B.  FORMAT OF THE FILE TRANSPORT DESCRIPTION (FTD) .........  34 
           
          C.  FORMAT OF ANSWERS TO FTU MESS ..........................  38 
           
          D.  OPRES VALUES ...........................................  39 
           
          E.  LEVEL 0 STATE SETTINGS .................................  40 
           
          F.  LEVEL 1 STATE SETTINGS .................................  42 
           \f

                                                 iii 
           
          T_A_B_L_E_ _O_F_ _C_O_N_T_E_N_T_S_ _(_c_o_n_t_i_n_u_e_d_)_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _P_A_G_E_ 
           
          G.  SET-FILE RESULT VALUES .................................  44 
           
          H.  DISCONNECT CAUSE VALUES ................................  46 
           
          I.  SYSTEM PARAMETERS ......................................  47 
           
          J.  SURVEY OF LEVEL 0 COMMANDS .............................  48 
           
          K.  SURVEY OF LEVEL 1 COMMANDS .............................  49 
           
          L.  LEVEL 1 STATE/EVENT TABLES .............................  50 
           
          M.  DETAILS ON LEVEL 0 PARAMETERS ..........................  52 
           
          N.  LOG FILE EVENTS AND RECORDS ............................  56 
           
          O.  DIVISION OF DATA BLOCKS IN SUBRECORDS ..................  57 
           
          P.  FTU STATE SETTINGS .....................................  58 
           \f

                                                 iv 
           \f

         1_._ _ _ _ _ _ _ _ _I_N_T_R_O_D_U_C_T_I_O_N_ 1.
           
          This manual describes the RC8000 File Transfer Utility (FTU),
          developed at REGNECENTRALEN af 1979 for CENTERNET in 1980-81. 
           
          The FTU serves as a RC8000 host utility, and performs the task of
          trasferring files across the network.  
           
          The protocol used in the transfer is described in ref. 5.  
           
          The FTU is implemented in ALGOL and is executed in an RC8000
          process using the basic operating system - s. 
           
          The FTU is accessed either local: from another RC8000 process,
          using RC8000 messages - or remote: from another host in the
          network. 
           
          In any case, FTU performs one out of two parties involved in a
          file transfer. 
           
          This manual contains the reference information about FTU. If you
          are not familiar with file transfers, you should first read the
          user's guide (ref. 6). 
           
          The following abbreviations are used throughout this manual: 
           
          FTP - File transfer protocol (ref. 5), 
          FTU - RC8000 File Transfer Utility (covered by this manual), 
          NPM - Network Port Module (ref. 3), 
          SC  - CENTERNET Session Control (ref. 4), 
          P   - Denotes FTP level 0 initiator, 
          Q   - Denotes FTP level 0 responder, 
          FTD - Filetransport description. See appendix B, 
          REQ - Transport request message (see subsection 3.1.6). 
           \f

F_       2_._ _ _ _ _ _ _ _ _S_Y_S_T_E_M_ _O_V_E_R_V_I_E_W_ 2.
           
          The FTU and its environments are outlined in the following fig. 
           
                         REQUESTER 
           
           
                              FTU                NPM               CNET 
          ANY 
           
           
                      LOG     FILE       S 
           
          The arrows shows the message flow (not the data flow). 
           
          NPM       - Serves as interface to the net. 
          S         - Is parent process of FTU, and may receive print
                      messages from FTU (see 6.1, opmess). 
          FILE      - Denotes some disk file to be transferred. 
          LOG       - The FTU log file, recording the history of FTU. 
          ANY       - Some other process, which may receive a message (see
                      6.1, monmess). 
          REQUESTER - Some other process, requesting FTU functions (by
                      means of messages). 
           
          A file transport is initiated in two ways: 
           
          - Local request: FTU connects to the remote end, and performs the
            file transfer as initator (P). All transfer parameters are
            given in the request. 
             
          - Remote request: FTU receives a connect from a remote host and
            performs the file transfer as responder (Q). All transfer
            parameters are given in the level 0 SFT command by the
            initiator. 
             
          FTU performs one file transfer at a time. Local transfer requests
          recieved during a transfer are immediately returned (not
          accepted). 
           \f

F_       3_._ _ _ _ _ _ _ _ _A_C_C_E_S_S_ _T_O_ _F_T_U_ _V_I_A_ _R_C_8_0_0_0_ _M_E_S_S_A_G_E_S_ 3.
           
          The functions of FTU are requested local in RC8000 by sending
          messages to FTU. Any RC8000 process may send messages to FTU. The
          messages are outlined in 3.1. The answers have all the same
          format, and are described in 3.2. 
           
           
3_._1_ _ _ _ _ _ _ _M_e_s_s_a_g_e_s_ 3.1
           
          The messages consist of 8 words, and in the description the words
          are numbered 1 to 8. Irrelevant words are omitted. 
           
           
3_._1_._1_ _ _ _ _ _S_e_n_s_e_ 3.1.1
           
          Message: 1. 0<12 + mode. 
          No function is performed. The answer is delayed, as requested by
          mode, thus: 
               mode = 0: no delay 
               mode = 2: delay until a transport stop occurs 
               mode = 4: delayed until a transport start occurs 
               mode = 6: delayed until either transport stop or start
                         occurs 
               mode =10: as mode = 2, but if no transport is active, it is
                         answered immediately 
               mode =12: as mode = 4, but if a transport is active, it is
                         answered immediately 
          Transport start: When level 0 GO is sent (P) or received (Q) 
          Transport stop:  When level 0 STOP (or disconnect) is sent (P) or
                           received (Q). 
           
           
3_._1_._2_ _ _ _ _ _G_e_t_ _S_t_a_t_u_s_ 3.1.2
           
          Message: 1. 3<12 + mode (meaning input) 
                   2. first addr. 
                   3. last addr. 
           \f

                   No function is performed. The answer is delayed, as requested by    3.1.3
          mode, as described in sense message. The data block contains the
          FTD at answer time (the first part, if not room for it all). 
           
           
3_._1_._3_ _ _ _ _ _S_t_a_r_t_ _F_T_U_ 
           
          Message: 1. 202<12 + reserve 
           
          FTU is started (if not already started):  
           
          A port is opened at NPM, and answer sent.  
           
          If reserve = 1, FTU is reserved by the requester, i.e. messages
          from other processes are rejected (except sense and get status). 
           
           
3_._1_._4_ _ _ _ _ _S_t_o_p_ _F_T_U_ 3.1.4
           
          Message: 1. 204<12 + 0 
           
          The FTU is stopped: If a transport is active, it is aborted, and
          port at NPM is closed. Then the answer is sent. 
           
           
3_._1_._5_ _ _ _ _ _A_b_o_r_t_ _T_r_a_n_s_f_e_r_ 3.1.5
           
          Message: 1. 5<12 + 1 (meaning output) 
                   2. first addr. 
                   3. last addr. 
           
          If the data block has exactly same contents as the FTD when the
          message is sent, describing an active transfer (fields No 1 to 7,
          see appendix B), the transfer is aborted, and the answer is sent
          at transport stop (see sense). 
           
          Otherwise the answer is sent immediately (abort not accepted). 
           
           \f

         3_._1_._6_ _ _ _ _ _R_e_q_u_e_s_t_ _T_r_a_n_s_f_e_r_ _(_R_E_Q_)_ 3.1.6
           
          Message: 1. 5<12 + 2 (meaning output) 
                   2. first addr. 
                   3. last addr. 
           
          The data block contains a transport description in the format as
          in FTD (see appendix B). Fields 1 to 7 are demanded, 8 to 14 are
          optional. 
           
          The local file is checked, connection established and a transfer
          initiated. The request is considered processed when transport
          start occurs, or if any earlier operation does not succeed. 
           
          The answer is sent when the request is processed, or immediately
          (if transport already in progress). 
           
           
3_._2_ _ _ _ _ _ _ _A_n_s_w_e_r_s_ 3.2
           
          The answer consists of 8 words and a result. All answers from FTU
          have the same format, and the contents reflect the success of the
          operation and the state of the FTU at answer time.  
           
          The format is given in appendix C. 
           \f

F_       4_._ _ _ _ _ _ _ _ _A_C_C_E_S_S_ _T_O_ _F_T_U_ _V_I_A_ _S_C_ _C_O_N_N_E_C_T_ 4.
           
          When the FTU has been started, a file transfer may be initiated
          from another host by connecting via SC. 
           
           
4_._1_ _ _ _ _ _ _ _C_o_n_n_e_c_t_i_n_g_ 4.1
           
          The SC connect operation is used. The FTU gives no restrictions
          on the connect, and will always return connect accept. 
           
           
4_._2_ _ _ _ _ _ _ _S_e_s_s_i_o_n_ 4.2
           
          In the session, letters may be sent of a size up to 1998 bytes
          (-18 bytes header). The initiator must be able to receive letters
          of same size. The data must follow the FTP (see ref. 5 and
          chapter 6). 
           
           
4_._3_ _ _ _ _ _ _ _D_i_s_c_o_n_n_e_c_t_i_n_g_ 4.3
           
          After a successful filetransfer, FTU will (as Q) disconnect the
          session. If this is rejected, the session is aborted. 
           
          The initiator may at any time request disconnect or abort the
          session. A disconnect is accepted by FTU. FTU may abort session -
          see section 5.4. 
           
          The values of cause (in disconnect request and abort session) are
          stated in appendix H. 
           \f

F_       5_._ _ _ _ _ _ _ _ _F_T_U_ _A_C_C_E_S_S_ _T_O_ _S_C_ 5.
           
          The SC is accessed via NPM (ref. 3). 
           
          The data formats followed are stated in ref. 2. 
           
           
5_._1_ _ _ _ _ _ _ _P_o_r_t_ _O_p_e_n_ 5.1
           
          A port is opened when receiving an FTU start message (if not
          already opened). The port is opened with the following port
          parameters (system parameters are described in appendix I, port
          parameters in ref. 2 and ref. 3): 
           
          receiver mask:           rmask (system parameter) 
          bufno for receiving:     bufno +1 (bufno is system parameter) 
          buflength for receiving: 1998 
          bufno for sending:       bufno (bufno is system parameter) 
          buflength for sending:   1998 
          r-bit for sending:       0 
           
          After port open, an event-control operation is set up. 
           
           
5_._2_ _ _ _ _ _ _ _C_o_n_n_e_c_t_i_n_g_ 5.2
           
          When FTU is connecting, the parameters are set as follows: 
           
               xmit mask:  from request transfer (F7) 
               class:      0 (low prio) 
               nui:        from request transfer (F6) 
           
          F6 and F7: see appendix B. 
           
          After connect, "bufno" receive letter operations are set up. 
           
           \f

         5_._3_ _ _ _ _ _ _ _S_e_s_s_i_o_n_ 5.3
           
          FTU sends letters of a size up to 1998 bytes (-18 bytes header),
          and is prepared to receive letters of same size. Data follows FTP
          (see ref. 5 and chapter 6). 
           
           
5_._4_ _ _ _ _ _ _ _D_i_s_c_o_n_n_e_c_t_i_n_g_ 5.4
           
          After a terminated file transfer (successful or not), FTU will
          (as P) await disconnect request from Q (if it does not happen
          before timeout - see appendix I - an abort session is sent). The
          disconnect request is accepted. 
           
          In giveup situations, FTU will abort the session: 
           
          - result not ok on SC operations 
          - timeout awaiting disconnect 
          - after a parent break (see section 8.4). 
          - after recieving a stop FTU message (see subsection 3.1.4) 
           
           \f

F_       6_._ _ _ _ _ _ _ _ _I_M_P_L_E_M_E_N_T_A_T_I_O_N_ _O_F_ _F_T_P_ 6.
           
          This chapter describes the interpretation of the elements of FTP
          done by FTU in order to map the protocol into RC8000 file system.
          Data records sent by FTU are subdivided as described in appendix
          O. The parameter numbers refer to the field descriptions in
          appendix B. (e.g. F4). 
           
           
6_._1_ _ _ _ _ _ _ _L_e_v_e_l_ _0_ _I_m_p_l_e_m_e_n_t_a_t_i_o_n_ 6.1
           
          A survey of level 0 commands is given in appendix J, and details
          on parameters are given in appendix M. The following is a survey
          of the implementation. First the commands are mentioned, then the
          attributes. These are described by first stating which value is
          sent, so "sent value (RNEG, STOP)" means that the attribute will
          only be sent in RNEG and STOP commands. Second, recieved values
          are stated. Here, "Accepted (SFT)" means that, the attribute must
          only be recieved in SFT command, otherwise protocol error is
          detected. The level 0 attributes are ordered as in ref. 5. 
           
          S_F_T_ _c_o_m_m_a_n_d_ 
          The parameters F1, F4-F5, F11, F15 and F19 are converted and
          sent. The parameters F10, F12, F13 and F14 are sent, if assigned
          in request transport (one of first 6 bytes <> 0). F16 is sent and
          if level 1 role is receiver, the "monitor bit" is set. F17 and
          F18 is always sent with monitorbit. 
           
          When receiving SFT, no parameters are demanded, but if not
          assigned, the default value is used. This will not do in case of
          F1, F4-F5 and F16. 
           
          R_P_O_S_ _c_o_m_m_a_n_d_ 
          All parameters sent with monitor bit are returned. If level 1
          role is sender, F16 is returned. When receiving RPOS, F10
          assigned will cause an opmess to be sent. 
           
          R_N_E_G_ _c_o_m_m_a_n_d_ 
          All parameters sent with monitor bit are returned, together with
          F20. When receiving RNEG, F10 assigned will cause an opmess to be
          sent. 
           \f

                   G_O_ _c_o_m_m_a_n_d_ 
          No parameters sent, no received. 
           
          S_T_O_P_ _c_o_m_m_a_n_d_ 
          F20 always sent. F8-F9 sent, if assigned in transport request (F8
          <> null name). When receiving STOP, F20, F8-F9 and F10 are
          expected. F8-F9 will cause a monitor message to be sent, F10 will
          cause an opmess to be sent. 
           
          P_r_o_t_o_c_o_l_ _i_d_e_n_t_i_f_i_c_a_t_i_o_n_ _(_F_1_9_)_ 
          Sent value (SFT): 0 
          Accepted (SFT):   0 
           
          M_o_d_e_ _o_f_ _a_c_c_e_s_s_ _(_F_1_)_ 
          Sent value (SFT): as assigned in REQ. 
          Accepted (SFT):   = 2 (receiver), = 130 (sender) 
           
          C_o_d_e_s_ _(_F_1_8_)_ 
          Sent value (SFT): 2 (binary) 
          Accepted (SFT):   Anything, if just the "binary" bit is set. If
                            other bits are set, F18 is sent in RPOS/RNEG. 
           
          F_a_c_i_l_i_t_i_e_s_ _(_F_1_7_)_ 
          Sent value (SFT): 1+4+8 
          Accepted (SFT):   Anything, but it is only possible to clear one
                            or more of the bits. If so, the new value is
                              returned on RPOS/RNEG. 
           
          S_t_a_t_e_ _o_f_ _t_r_a_n_s_f_e_r_ _(_F_2_0_)_ 
          Sent (RNEG, STOP): Values in appendix E. 
          Accepted (RNEG, STOP): Any. 
           
          F_i_l_e_ _n_a_m_e_ _(_F_2_-_F_3_ _o_r_ _F_4_-_F_5_)_ 
          A proper file name consists of the following IA5 string: 
           
          <entry name><sp><lower base><sp><upper base><sp> 
           \f

                   The elements uniqely identifies an entry in the RC8000 catalog
          (see ref. 10). When processing an REQ, F2-F3 is checked (area
          process created and reserved see ref. 10). If this fails, REQ
          is answered not ok. 
           
          Sent (SFT: F4-F5): as assigned in REQ 
          Accepted (SFT: F2-F3): same check as mentioned above. 
           
          U_s_e_r_ _n_a_m_e_ _(_F_1_2_)_ 
          Sent (SFT): if as assigned in REQ 
          Accepted (SFT, RPOS, RNEG): Any 
          F12 is not used by FTU. 
           
          K_i_n_s_h_i_p_ _(_F_1_6_)_ 
          A proper kinship is an IA5 string consisting of 10 numbers
          separated by delimiters. These 10 numbers are the contents of a
          catalog entry tail (see ref. 11). The first of these integers
          is the number of segments of the file.  
           
          When FTU is level 1 receiver, it must receive kinship (in SFT or
          RPOS), whereupon the tail of the local file is attempted changed
          to the received values (by performing changeentry). Note, that
          the resources of the FTU process hereby may be changed because
          the segment size of the file may be changed. Note that the
          document name (tail2-tail5) cannot be changed. Finally, the FTU
          level 1 receiver inserts an update mark (system parameter,
          appendix I) in tail7 before entering level 1. This mark is
          removed if the level 1 transfer terminates successfully. 
          sent (SFT): Entry tail of local file 
          sent (RPOS): Entry tail of local file (if level 1 role is sender)
          Accepted (SFT/RPOS): Any 10 numbers, if changeentry succeeds. 
           
          A_c_c_o_u_n_t_ _(_F_1_3_)_ 
          Sent (SFT): If assigned in REQ 
          Accepted (SFT, RPOS, RNEG): Any 
          F13 is not used by FTU. 
           \f

                   F_i_l_e_ _S_i_z_e_ _(_F_1_5_)_ 
          Sent (SFT): (<bytes of local file> -1)//1024+1 
          Accepted (SFT, RPOS, RNEG): Any 
          F15 is not used by FTU. 
           
          O_p_e_r_a_t_o_r_ _M_e_s_s_a_g_e_ _(_F_1_0_)_ 
          The text string in this parameter is, if received, sent to the
          parent (s) in a print message (first 21 bytes) (opmess). 
          Sent (SFT): if assigned in REQ 
          Accepted (SFT, RPOS, RNEG, STOP): if received, an opmess is
          sent. 
           
          M_o_n_i_t_o_r_ _M_e_s_s_a_g_e_ _(_F_8_-_F_9_)_ 
          The text string of this parameter is supposed to contain 
M_m_m_                                    8 
          <process name><sp><mess> 
P_p_p_                                    8 
          <mess> is 8 integers which are stored in a message buffer. When
          received, the message is sent to the process called <process
          name> (monitormess). In mess1 the bits 1 shift 12 and 1 shift 0
          are removed. 
           
          The answer to the message is not reported. 
          Sent (STOP): if <process name> (=F8) is assigned in REQ 
          Accepted (STOP): if received, monitormess is sent. 
           
          S_p_e_c_i_a_l_ _o_p_t_i_o_n_s_ _(_F_1_4_)_ 
          Sent (SFT): if one of 6 first bytes is assigned (not 0) in REG. 
          Accepted (SFT): any 
          F14 is not used by SFT. 
           
          A_c_k_n_o_w_l_e_d_g_e_m_e_n_t_ _w_i_n_d_o_w_ _(_F_1_1_)_ 
          Sent (SFT): Current value. Initial setting is system parameter  
                      (appendix I), but may be assigned in REQ 
          Accepted (SFT, RPOS, RNEG): Any. 
           \f

         6_._2_ _ _ _ _ _ _ _L_e_v_e_l_ _1_ _I_m_p_l_e_m_e_n_t_a_t_i_o_n_ 6.2
           
          The implementation follows ref. 3, and only a few remarks will
          be added. 
           
          Some implementation details (state/event tables for sender and
          reciever) can be found in appendix L. 
           
          Level 1 states are listed in appendix F. 
           
          S_e_n_d_e_r_ 
          The level 1 data blocks contain (before diversion in subrecords -
          see appendix O) 
          <zero><MS><mark><768 bytes><768 bytes> 
          In the last data block of a transfer, the last 768 bytes may be
          omitted. Note, that level 1 compression is not done. 
           
          R_e_c_e_i_v_e_r_ 
          The receiver accepts any format of the data blocks. One level 1
          command may be inserted in a data block, and it must be an MS.
          The mark is then understood to be a mark after all data of the
          block.  
           
          The RR command is only issued after a TS reset. 
           
          If status error occurs on the disk file, which is written by the
          receiver, QR is sent with proper status. 
           
          QR (ok) is never sent. If the sender sends more data than
          expected, it is treated as a disk error. The sender may send less
          data than expected, and the receiver accepts this and outputs
          binary zero bytes in the rest of the file. Note that the file
          size is negotiated in level 0 (kinship, first number = segments
          of 768 bytes each). 
           \f

F_       7_._ _ _ _ _ _ _ _ _I_N_S_T_A_L_L_A_T_I_O_N_ _G_U_I_D_E_ 7.
           
7_._1_ _ _ _ _ _ _ _R_e_s_o_u_r_c_e_ _R_e_q_u_i_r_e_m_e_n_t_s_ 7.2
           
          The system is contained in 3 disc files, that are loaded on disc.
          They require: 
          3 entries, permanent on disc 
          - bftu of 143 segments 
          - ftufunc of 123 segments 
          - startftu of 2 segments. 
           
           
7_._2_ _ _ _ _ _ _ _P_r_e_r_e_q_u_i_s_i_t_e_s_ 
           
          - Basis system release 2.0 or later. 
            (i.e. monitor release 6.0 or later). 
            Including MT Station, linked with blocklength of at least 4
            segments. 
          - Algol release 11.0 or later 
            (only in case of maintenance of FTU) 
          - Network Port Module (NPM) - see ref 3. 
           
           
7_._3_ _ _ _ _ _ _ _S_y_s_t_e_m_ _T_a_p_e_ 7.3
           
          The system tape is generated with the utility program SAVE, and
          has the following format (version 1.1): 
           \f

                    
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
7_._4_ _ _ _ _ _ _ _I_n_s_t_a_l_l_a_t_i_o_n_ 7.4
           
          File 1 of the systemtape should be loaded at system scope. The
          following commands, performed at a console, will do (supposing
          the systemtape is labelled mt80001): 
           
          ESC 
          att  s 
           
          new chd size 40000 base -8388607 8388605 perm disc 1000 10 run 
           
          to chd 
           
          load mt80001.1 
           
          from s 
          pause chd mount mt80001 
           \f

          ESC 
          att s 
           
          call 10 mt80001 start 
          --- 
          --- 
           
                   Note, that no system parameters are assigned during installation.
          Cfr. chapter 8. 
           
           
7_._5_ _ _ _ _ _ _ _V_a_l_i_d_a_t_i_o_n_ 7.5
           
          After load of the system tape, the 3 entries should be visible at
          system scope, performing lookup: 
           
          lookup bftu ftufunc startftu 
           
          The entry tails (and shortclocks) are version dependant. In
          version 1.0 the shortclocks will be: 
             bftu     d.810721.2158 
             ftufunc  d.810721.2140 
             startftu d.810721.1545 
           
          Further validation can be done at start up of FTU, see chapter 8.
           
           \f

F_       8_._ _ _ _ _ _ _ _ _O_P_E_R_A_T_I_N_G_ _G_U_I_D_E_ 8.
           
          Before starting the FTU, consult chapter 9. 
           
           
8_._1_ _ _ _ _ _ _ _P_r_o_c_e_s_s_ _S_t_a_r_t_ 8.1
           
          From a console the following process is created. The process
          parameters give the resource requirements (cf. ref. 7). 
           
          ESC 
          att  s 
           
          new ftu                       the following commands  
                                        may be typed in one line 
                                        some may be skipped if set by "new".
          size 25000                    if bufno>1: + 3000*(bufno-1) 
                                         
          buf 15                        if bufno>1: +2*(bufno-1) 
                                         
          area 7  
          temp disc  0   4              for c, v and FP 
          perm disc2 100 10             for log file, current output. 
                                        cf. chapter 9 about disc resources.
                                         
          base   81 81                  cf. chapter 9 about bases 
          project 80 89                 and access rights. 
           
          run 
           
          ready 
          to ftu 
           \f

         8_._2_ _ _ _ _ _ _ _C_a_l_l_ _o_f_ _F_T_U_ _P_r_o_g_r_a_m_ _(_b_f_t_u_)_ 
           
          A program call is found in the system file Startftu. It may be
          changed by editing the file. All possible call parameters are
          stated in startftu, and a description is found in appendix I. 
           
          Current output (which is diminutive if not testoutput is wanted)
          may be directed to a discfile by the FP command: 
           
             mode 1.yes 
           
          If the FTU is intended to run for more than a day, this should
          not be done, as resource problems may happen on current output. 
           
          Now the program bftu is called by the FP command: 
           
             i startftu 
           
          (If you have edited startftu to another file, say "startx", you
          should type "i startx"). The FTU does not require the NPM module
          to be running before the program is called. 
           \f

                   The file startftu has the following content (version 1.1): 
          ; centernet rc8000 file transfer utility 
          ; start up instruction for ftu 
          ; att s 
          ; new ftu size 25000 (+3000 for bufno=2) 
          ; buf 15             (+2 for bufno=2) 
          ; perm disc2 100 10 
          ; base 81 81 project 80 89 run 
          ; 
          ; maybe:mode 1.yes = current output to udftu 
          ; i startftu 
          ; 
          mode list.yes 
          logftu = set 30 disc2 
          udftu = set 30 disc2 
          scope user logftu udftu 
          rubout user logftu udftu 
          if 1.yes 
          o udftu 
          bftu, 
            npm. npm1             , name of npm process 
            nsubscr. him          , host interface module 
            rmask. 255.255.255.255, reciever mask for ftu 
            bufno.2               , double-buffered traffic 
            log.logftu            , name of log file 
            timeout.100           , when waiting, after 100-200 seconds 
            ackw.4                , acknowledge window, level 1 
            updmark.1001          , set in tail when writing file 
            , test1               , dump at all events in level 1 
            , test2               , dump in level0, algol alarm outp.(trapmode) 
            , test3               , progr. end at stopmess, printout at dump 
            , test4               , printout at all NPM mess-answ 
          ; 
          mode all.no 
          o c 
           
           \f

         8_._3_ _ _ _ _ _ _ _O_p_e_r_a_t_o_r_ _I_n_t_e_r_a_c_t_i_o_n_ _D_u_r_i_n_g_ _O_p_e_r_a_t_i_o_n_ 8.3
           
          The operator should t_a_k_e_ _n_o_ _a_c_t_i_o_n_s_ during operation. 
           
           
8_._3_._1_ _ _ _ _ _P_r_i_n_t_o_u_t_s_ _o_n_ _C_u_r_r_e_n_t_ _O_u_t_p_u_t_ 8.3.1
           
          During normal operation, algol alarms may be printed. This will
          normally indicate a program error. On a new alarm, the following
          is printed 
           
             hh mm ss:    alarm:         <-time 
             <alarm text> <param>        <-from algol system 
           
          If the alarm is on a document (including the NPM module), the
          following is added: 
           
          devicestatus on <doc>: status=<status> = <bits> 
           
          An alarm includes parent break. 
           
           
8_._3_._2_ _ _ _ _ _P_r_i_n_t_o_u_t_s_ _f_r_o_m_ _s_ _o_n_ _P_r_i_n_t_ _M_e_s_s_a_g_e_s_ 8.3.2
           
          A print message will be printed by s on the console where the FTU
          process is started. 
           
          FTU sends a parent message (print) (cf. ref 8) in the following
          situations: 
           
          1. If the level0 parameter operator message (F10) is recieved and
             accepted, the following 2 lines are output: 
           
             message <ftu> hhmmss<nui> 
             message <ftu> <operator message> 
           \f

                      where hhmmss is the time in 6 digits (printed as one integer) 
             and <nui> is the first 18 bytes of the network user id
             recieved in connect request (or assigned in REQ). 
           
          2. When FTU is stopped, one of the following messages is sent: 
              
             message <ftu> hhmmss stopped by mess 
              
             message <ftu> hhmmss stop by npmerr 
              
             message <ftu> hhmmss stopped by error 
              
          3. When the FTU program ends, one of the following messages is
             sent: 
              
             message <ftu> hhmmss breaked by parent 
              
             message <ftu> hhmmss end on error 
              
              
8_._4_ _ _ _ _ _ _ _O_p_e_r_a_t_o_r_ _T_e_r_m_i_n_a_t_i_o_n_ _o_f_ _F_T_U_ 8.4
           
          Before the operator terminates the operation of FTU, he might
          check that no transport is active. Consult ref. 6. 
           
          Anyway, the FTU may terminate at any time. 
           
          The operator terminates the FTU by the command: 
           
             ESC 
             att  s 
           
             proc <ftu> break 
           
          It is vital to break the FTU in order to perform the "closeport"
          operation before program end. 
           \f

                   Now the operator may clean up, for example:  
           
          to ftu 
           
          lp = copy udftu 
           
          udftu segm 7 ----- 
          lp    segm 7 ----- 
           
          finis 
           
          from s 
          pause ftu finis 
           
          esc 
           
          att  s 
           
          proc ftu remove 
           
          ready 
           \f

F_       9_._ _ _ _ _ _ _ _ _F_T_U_ _A_C_C_E_S_S_ _T_O_ _D_I_S_C_ _F_I_L_E_S_ 9.
           
          A disc file involved in a transfer must be accessible for FTU.
          This is checked before the transfer is started, and if any of the
          operations does not succeed, the transfer is not started. 
           
          The operations involved in the checking are (in the order men-
          tioned): 
           
          - set catalog base (to entry base of file) 
          - lookup entry 
          - create area process 
          - reserve area process 
          - if level 1 reciever: 
            change entry (file size and tail same as sender file). 
           
          The results of the operations is listed in appendix G. 
           
          The general restriction in which files the FTU may access is
          expressed in the process parameters maxbase and standard base set
          at process start. The file protection rules are described in ref.
          9 and 10. 
           
          The disc resources of the FTU process (bs claims: segments on a
          logical disc) may be changed in the changeentry operation. The
          claims may either be augmented or decreased with a number of
          slices on the logical disc in question. 
           
          The permanent key of the file is not relevant to the FTU. But if
          the operating system BOSS2 is performing a job finish on a job
          with user base containing the base of a temporary file involved
          in a transfer, this will lead to a "bossfault".  
           
          The situation occurs if a BOSS job creates a temporary file and
          sends a transport request to FTU, and does not await the termi-
          nation of transport. 
           
           \f

F_       1_0_._ _ _ _ _ _ _ _M_A_I_N_T_E_N_A_N_C_E_ _I_N_F_O_R_M_A_T_I_O_N_ 10.
           
          File 2 on the system tape (chapter 7.3) contains the files needed
          for maintenance. The source texts and their comments should be
          studied to get the details. This chapter contains some overviews
          and the basic mechanisms used. 
           
           
1_0_._1_ _ _ _ _ _ _F_T_U_ _P_r_o_g_r_a_m_ 10.1
           
          The file "tftu" contains the source text. During algol
          compilation, the source "field2" is included. The algol compiler
          is called like this: 
           
          bftu = algol tftu list.no 
           
           
1_0_._1_._1_ _ _ _ _B_l_o_c_k_ _S_t_r_u_c_t_u_r_e_ _a_n_d_ _P_r_o_c_e_d_u_r_e_s_ 10.1.1
           
          begin outer block 
             declare system parameters 
           
             begin block for reading FP parameters 
               procedure fpkey (key) 
               procedure fpname (no, val) 
               procedure fpno (no, val) 
               procedure fperr 
               . . . .   read FP parameters 
             end 
              
             begin main block 
               declare main block variables 
M_m_m_               declare fields for FTD 
                                            algol copy.field2 
P_p_p_               procedure init fields 
               procedure dump (lab) 
               procedure dump-b (z,s,b) 
               procedure dump-data (lab, zix, hw) \f

               procedure checknpm (z, strict) 
               procedure emptyout 
               procedure checkalarm 
               procedure maybetrap 
               procedure opmess (m) 
               procedure ftuopmess (text) 
               procedure answer-it (mb, code, res) 
               procedure recieve (x, func) 
               procedure send (z, hw, x) 
                    procedure get-ready-outzone (x) 
               procedure set-file (z, area, mess, ta) 
               procedure next-event (evt, dex) 
               procedure init-ftd (pq) 
               procedure check-ftd 
               procedure answer-all (opres) 
               procedure set-skip (i1, i2, i3, i4, i5, i6, i7) 
               procedure closeport 
               procedure openport (res) 
               procedure ftu-ready 
               procedure send-sc (func, res, val) 
               procedure call-level0 (pq) 
               procedure read-level0 (z, by, err) 
               procedure write-level0 (cmd) 
               procedure pack-subrecords (zo, outhw, z1, inby) 
               procedure reset (z) 
               procedure set-read (z) 
               procedure correct (z, byno, val) 
               procedure p (result) 
                  procedure exit-p (res, st) 
               procedure q (result) 
                  procedure q-next event (got, exp) 
                  procedure exit-q (res, st) 
               procedure sender (result) 
                  procedure s-block (z, s, b) 
                  procedure sendlevel1-s (com, arg) 
                  procedure set-event-s (ev) 
                \f

               procedure reciever (result) 
                  procedure set-event-r (evt) 
                  procedure send-level1-r (com, arg) 
                  procedure r-block (z, s, b) 
                  procedure read-level1 (z, by, c) 
                
               .... initializations 
               .... body of main block (label: waiting-for-start) 
               .... end of FTU program 
            end 
           end 
                
                
1_0_._1_._2_ _ _ _ _P_r_o_t_o_c_o_l_ _P_r_o_c_e_d_u_r_e_s_ 10.1.2
           
          The protocol levels are all handled by dedicated procedures, and
          the figure below gives the overview of the levels (who is calling
          who). 
           \f

                   FTU not started         body of main block 
                                  waiting for start: 
                                  - wait for start message 
                                  - open port 
           
           
          Started,                ftu _ready 
          no transport            wait for: 
                                  - trsp req or    connect req 
                                   (check file)    (connect accept) 
                                   (connect req) 
                                        (P)           (Q) 
           
           
                                       call _level0 
                                   call p      call q 
           
                                   - disconnect 
                                     session 
           
           
                      P                                  Q 
            - Perform level0 as P                - Perform level0 as Q 
            - call level 1                       - call level 1 
            - send level0 stop                   - await level0 stop 
           
           
                      sender                     reciever 
                    - Perform level1        - Perform level1 
                      as sender               as reciever 
           \f

                   The following procedures "assist" in performing the proper
          protocols: 
           
          - Procedure send _sc 
            Used by ftu _ready and call _level0 for sending sc operations
            concerning connect/disconnect. 
           
          - procedure readlevel0 
          - procedure writelevel0 
          - procedure pack _subrecords 
            Used by p and q (and sender: pack _subrecords) for reading and
            writing level0 commands, and packing a datablock in subrecords.
           
          - procedure reset 
          - procedure set _read 
          - procedure correct 
            Used by readlevel0 and writelevel0 for zone manipulations. 
           
           
1_0_._1_._3_ _ _ _ _E_v_e_n_t_ _H_a_n_d_l_i_n_g_ 10.1.3
           
          The central event handling is done by p_r_o_c_e_d_u_r_e_ _n_e_x_t_ _e_v_e_n_t_. The
          procedure delivers the next event that happens. Next _event does
          not return in case of generated or provoked alarms (see 10.1.4). 
           
          The event delivered is controlled by the g_l_o_b_a_l_ _a_r_r_a_y_ _s_k_i_p_. By
          assigning to the skip array, next _event is told which events
          should be delivered etc. 
           
          Array skip is interpreted as follows: 
           \f

                   I_n_d_e_x_ _ _ _C_o_n_t_r_o_l_s_ _ _ _ _ _ _ _ _ _ _ _ _V_a_l_u_e_s_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           
            1     Answer on           100 Special function: only 
                  zi zones                answer sense/status mess. 
                  (input from net)     1  do not deliver event, take home
                                          answer 
                                       0  deliver event 
                                      -2  do not deliver, no check 
           _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           
            2     Answer on            1  do not deliver event, take home
                                          answer 
                  zo zones             0  deliver event 
                  (output letter      -2  do not deliver event, no check 
                  to net)             -3  do not deliver, only status check,
                                          but control operations are
                                          delivered (see send _sc) 
           _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           
            3     Start mess          >0  Answer immediately, 
                                          if val > 10 then opres:=val -10 
                                          if val < 10 then result:=val 
                                      =0  deliver event 
                                      -1  skip mess 
           _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           
            4     Stop mess               as 3, adding: 
                                      -2  provoke alarm. 
           _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           
            5     Transport               as 3. 
                  mess 
           _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           
            6     Abort mess              as 3. 
           _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           
            7     Timeout              1  skip event 
                                       0  deliver event 
           _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           \f

         1_0_._1_._4_ _ _ _ _A_l_a_r_m_ _H_a_n_d_l_i_n_g_ 10.1.4
           
          All the protocol procedures are equipped with trap labels, catch-
          ing algol alarms. Note that trapmode is assigned, omitting the
          most frequent algol alarm printouts. 
           
          In all traplabels, the p_r_o_c_e_d_u_r_e_ _c_h_e_c_k_a_l_a_r_m_ is called, which
          maybe prints an alarm printout, and assigns a value, so that the
          calling procedure can detect the cause of the alarm, even if the
          alarm had already occured at a "higher" level. 
           
          P_r_o_c_e_d_u_r_e_ _m_a_y_b_e_t_r_a_p_ takes care of provoking an alarm, hereby
          reporting the alarm to the "lower" level. 
           
          The alarms thus reported include: 
          - parent break (trap value 9); 
          - NPM status error (trap value 11); 
          - stop message (trap value 13); 
           
           
1_0_._1_._5_ _ _ _ _N_e_t_ _A_c_c_e_s_s_ 10.1.5
           
          The net is accessed via the NPM module. The following zones are
          opened to npm: 
          z_o_n_e_ _a_r_r_a_y_ _z_i_:  
            The number of zones is bufno+1. One zone is always pending,
            because an event-control operation is pending at SC. The others
            are used for recieve-letter.  
            P_r_o_c_e_d_u_r_e_ _r_e_c_i_e_v_e_ sets up an input mess.  
            P_r_o_c_e_d_u_r_e_ _c_h_e_c_k_n_p_m_ is used for checking the answer.  
            I_n_t_e_g_e_r_ _a_r_r_a_y_ _b_u_f_z_i_ contains the message buffer addresses. 
           
          z_o_n_e_ _a_r_r_a_y_ _z_o_: 
            The number of zones is bufno. All are used for sending letters.
            P_r_o_c_e_d_u_r_e_ _s_e_n_d_ sets up output mess. 
            P_r_o_c_e_d_u_r_e_ _c_h_e_c_k_N_P_M_ is used for checking the answer. 
            P_r_o_c_e_d_u_r_e_ _g_e_t_ _r_e_a_d_y_ _o_u_t_z_o_n_e_ is used for finding a free (not
            pending) zone. 
            I_n_t_e_g_e_r_ _a_r_r_a_y_ _b_u_f_z_o_ contains the message buffer addresses. 
             \f

                   z_o_n_e_ _z_c_o_n_t_r_:  
            Used for sending control operations to SC (all but letters). 
            P_r_o_c_e_d_u_r_e_ _s_e_n_d_ _s_c_ is used for sending and recieving the output
            message. 
            The recieving is done by next _event, which in turn calls
            checknpm.         
            I_n_t_e_g_e_r_ _b_u_f_c_o_n_t_r_ contains the message buffer address. 
           
          P_r_o_c_e_d_u_r_e_ _o_p_e_n_p_o_r_t_ _a_n_d_ _c_l_o_s_e_p_o_r_t_. 
            Use local zones for the messages. 
            Openport also prepares the zones zo and zi. 
             
             
1_0_._1_._6_ _ _ _ _L_e_v_e_l_0_ _P_a_r_a_m_e_t_e_r_ _M_a_p_p_i_n_g_ 10.1.6
             
          When reading/writing level0 commands, the parameters are mapped
          between FTD and the recieved/sent data blocks. The mapping is
          described in appendix M. The mapping is controlled by 6 parallel
          arrays of 17 elements: 
           
          e _qualif:           expected qualifiers when reading 
          r _qualif:           qualifiers actually read 
          w _qualif:           qualifiers to write (if <> 0) 
          attr    :           attribute numbers in FTP 
          format  :           coding for the mapping, as in appendix M. 
          faddr   :           field address in FTD, always "array field"
                              value. 
           
           
1_0_._2_ _ _ _ _ _ _G_e_n_j_o_b_ 10.2
           
          The file genjob on system tape contains a BOSS2 job for
          generating the fields, that are used for adressing FTD.  
           
          The field descriptions are coded, and an ad hoc program is used
          for writing the contents of the files 
               field1   (for program FTUFUNC) 
               field2   (for program BFTU) 
           \f

                   This mechanism ensures, that the two programs work on the same
          field addresses, and is easy maintainable. New fields can easily
          be added (note that the first fields are used extensively by FTU,
          (see 10.1.6). 
           
           
1_0_._3_ _ _ _ _ _ _T_e_s_t_ _o_f_ _F_T_U_ _u_n_d_e_r_ _B_O_S_S_2_ 10.3
           
          The files          tprog 
                             ftujob 
          on the system tape can be used for testing the functions of FTU
          under BOSS2.  
           
          tprog: 
          contains program text of a program simulating the net (i.e. npm
          process) by generating 3 child processes: 
            - an FTU as p. 
            - an FTU as q. 
            - a requester. 
           
          ftujob: 
          The BOSS2 job running the test. 
           
           \f

F_       A_._ _ _ _ _ _ _ _ _R_E_F_E_R_E_N_C_E_S_ A.
           
          1  RCSL No 43-GL10190: 
               CN  System Specifications section 9.2 
           
          2  RCSL No 43-GL11341: 
               CN  RC8000 Network Access  
               Programming Guide 
           
          3  RCSL No 43-GL11417: 
               CN  RC8000 Network Port Module - NPM 
               Reference Manual 
           
          4  CENTERNET 
               CN  Session Control  
               Programming Guide 
           
          5  RCSL No 43-GL11401: 
               CN  File Transfer Protocol - FTP 
               Report 
           
          6  RCSL No 43-GL11294: 
               CN  RC8000 File Transport Utility - FTU 
               User's Guide 
           
          7  RCSL No 31-D595: 
               RC8000 Operating System S 
               Reference Manual 
           
          8  RCSL No 31-D610: 
               Parent Messages in RC8000  
           
          9  RCSL No 31-D476: 
               RC8000 Monitor, Part 1 
           
          10 RCSL No 31-D477: 
               RC8000 Monitor, Part 2 
           
          11 RCSL No 31-D106: 
               RC8000 System 3 Utility Programs, Part 1 
           \f

F_       B_._ _ _ _ _ _ _ _ _F_O_R_M_A_T_ _O_F_ _T_H_E_ _F_I_L_E_ _T_R_A_N_S_P_O_R_T_ _D_E_S_C_R_I_P_T_I_O_N_ _(_F_T_D_)_ B.
           
          The following pages show the layout of the FTD. The same layout
          is used in 3 situations: 
           
          1. as data blocks in REQ, abort and get status messages. 
          2. when creating and interpreting level 0 commands (see section
             6.1 and appendix M) 
          3. The dump records on the log file. 
           
          Legend: 
          NO:          Field number, referred to in chapter 6. 
          TYPE:        Type of field, controlling the ALGOL variable used
                       to reference the field, and used when printing the
                       logfile (see ref. 6). 
          FIELD VALUE: The value assigned to the ALGOL field variable. 
          BASE ADR:    Halfword index of the halfword just before the
                       field. 
          HW:          Number of halfwords occupied by the field. 
          CHARS:       Number of characters or 8 bit bytes occupied by the
                       field. 
           
          Fields F1-F20 are described in chapter 6 and section 5.2. 
           
          Among the rest, the most interesting fields are delivered in
          answers to FTU messages (see appendix C). 
           
          Remaining fields of external interest are: 
           
          F61 R _FILESTATUS: The logical statusword received on an output to
                            disk file 
          F62 PROGLAB:      A text telling the state at the last update of
                            the FTD (and log file). 
          F65 T _DATE:       Date of last update. 
          F66 T _TIME:       Time of last update. 
          F67 T _CPUTOT:     CPU time used by FTU since process start. 
          F68 T _CPU _TRSP:   CPU time used in current/last transport. 
          F69 T _REAL _TOT:   Real time spent since FTU process start. 
          F70 T _REAL _TRSP:  Real time spent in current/last transport. 
F71 BLOCKSTOT:    ALGOL program segments read since FTU program
                            start. \f

          F72 BLOCKSTRSP:  ALGOL program segments read in current/last
                            transport. \f

F_                  
           \f

F_                  
           \f

F_       C_._ _ _ _ _ _ _ _ _F_O_R_M_A_T_ _O_F_ _A_N_S_W_E_R_S_ _T_O_ _F_T_U_ _M_E_S_S_ C.
           
          R_E_S_U_L_T_: 1 = OK 
                  2 = Reject: FTU reserved by another process 
                  3 = Unintelligible: Unknown operation 
                  4 = (not used) 
                  5 = FTU process does not exist (set by the monitor) 
                   
          A_N_S_W_E_R_ _F_O_R_M_A_T_: 
          (1) + 0  OPRES (0 = OK)                             (appendix D) 
          (2) + 2  hw transferred      = 0 in answers to 
          (3) + 4  bytes transferred     start/stop mess 
          (4) + 6  bytes moved in transport 
          (5) + 8  FTU state                                  (appendix P) 
          (6) +10  <level 1 state> shift 16 + <level 0 state> (appendices E+F)
          (7) +12  set file result                            (appendix G) 
                   or(- in case 0PRES = 0 and no transport is active): 
                   1 shift 23 
                   add  (<cpu secs used in last transp.> shift 12) 
                   add  (<realtime secs used in last transp.>) 
          (8) +14  NPM status 
           
          - Bytes moved in transport: If no transport is active, the
            resulting bytes of last transport. 
             
          - NPM status: logical statusword of a not-ok answer to a message
            to NPM, calculated thus: 
            if <monitor-result> <>1 then (1 shift <monitor-result>) 
            else 2 + answ(1). 
             \f

F_       D_._ _ _ _ _ _ _ _ _O_P_R_E_S_ _V_A_L_U_E_S_ D.
           
          V_A_L_U_E_S_ _O_F_ _O_P_R_E_S_ _P_A_R_A_M_E_T_E_R_ _I_N_ _A_N_S_W_E_R_S_ _T_O_ _F_T_U_ _M_E_S_S_ 
           
                                                      Relevant in FTU mess:
          OPRES   Meaning                             trp. Abort Start Stop
           _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _m_e_s_s_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
            0     OK                                   +     +     +     + 
            1     Connect not OK                       + 
            2     NPM status error                     +     +     +     + 
            3     FTU in state stopped                 +     +       
            4     FTU busy in transport                + 
            5     Local file not OK                    + 
            6     RNEG received                        + 
            7     Not current transport                      + 
            8     No transport                               + 
            9     Terminated (in level 0)              + 
           10     Aborted (in level 0)                 + 
           11     FTU process breaked by parent        +     +     +     + 
           12     Block length (block too small)       +     + 
           13     Sending process stopped              +     + 
           14     SC error                             +             
           15     FTU program error                    + 
           16     Result not OK  
           17     FTU stopped by mess                  +     +       
           _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           \f

F_       E_._ _ _ _ _ _ _ _ _L_E_V_E_L_ _0_ _S_T_A_T_E_ _S_E_T_T_I_N_G_S_E.
           
          L_E_V_E_L_ _0_ _S_T_A_T_E_ _O_F_ _T_R_A_N_S_F_E_R_ _-_ _A_R_G_U_M_E_N_T_ _T_O_ _R_N_E_G_ _A_N_D_ _S_T_O_P_ _C_O_M_M_A_N_D_S_ 
           
          G_R_O_U_P_:_ _ _ _ _ _ _ _ _H_E_X_:_ _ _ _ _ _ _D_E_C_:_ _ _ _ _ _ _E_X_P_L_:_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
           
          V_I_A_B_L_E_        0000    0         OK 
           
          R_E_J_E_C_T_E_D_      1000    4096      Unexpected qualifier 
                        1001    4097      See textmessage 
                        1002    4098      Code binary not set 
                        1003    4099      Mode of access not ok 
                        1004    4100      Protocol ident not ok 
           
                        1011    4113      File not found (maybe not exist) 
                        1012    4114      No access to file quoted (reserved) 
                        101A    4122      Size too big (no resources for extend)  
                        101C    4124      Kinship missing (file tail) 
           
          T_E_R_M_I_N_A_T_E_D_    2000    8192      OK 
                        2001    8193      Problem - see text message 
                        2002    8194      RNEG without state received (P only) 
           
          A_B_O_R_T_E_D_       3000    12288     Satisfactory and incomplete -  
          only level 1                      no retry required 
                        3002    12300     Receiver problems 
                        3004    12302     Sender problems 
                        3005    12303     Time out (level 1) 
           
          A_B_O_R_T_E_D_ 
                                  STATE: 
                        3xxx    12288     in level 1 
                        4xxx    16384     sending SFT 
                        5xxx    20480     awaiting RPOS/RNEG 
                        6xxx    24576     Sending STOP 
                        7xxx    28672     awaiting SFT (and processing it) 
                        8xxx    32768     awaiting GO 
                        9xxx    36864     awaiting STOP 
           \f

          G_R_O_U_P_:_ _ _ _ _ _ _ _ _H_E_X_:_ _ _ _ _ _ _D_E_C_:_ _ _ _ _ _ _E_X_P_L_:_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
           
          ABORTED       (cont.) 
                                  CAUSE: 
                        xxx7    +7        Abort mess 
                        xxx8    +8        Stop mess 
                        xxx9    +9        Parent break of FTU process 
                        xxxA    +10       Protocol error (level 0 command) 
                        xxxB    +11       Program error (level 0) 
                        xxxC    +12       Timeout (level 0) 
                       xxxD    +13       Disconnect 
                        xxxE    +14       NPM Status error (not sent) 
                        xxxF    +15       SC result not ok (not sent) 
           
           \f

F_       F_._ _ _ _ _ _ _ _ _L_E_V_E_L_ _1_ _S_T_A_T_E_ _S_E_T_T_I_N_G_S_                                                F. 
           
          L_E_V_E_L_ _1_ _S_T_A_T_U_S_ _-_ _A_R_G_U_M_E_N_T_ _T_O_ _C_O_M_M_A_N_D_S_ _E_S_-_Q_R_-_E_R_-_ 
           
          GROUP:        HEX:      DEC:      EXPL:                 USED BY: 
          O_K_            00      0         OK                    ESok -> ERok 
                                                                  QRok -> ESok -> ERok 
           
          E_R_R_O_R_         -Detected by receiver:                    QRe ->ESe -> ERe 
                        20      32        Receiver error -  
                                            retry possible (progr error) 
                        21      33        Receiver error -  
                                            no retry possible (parent break)
                        22      34        Protocol error detected by receiver 
                        23      35        STOP mess to receiver 
                        24      36        ABORT MESS to receiver 
                        25      37        Hard error on disk 
                        26      38        End of file - too much data sent 
           
                        - Detected by sender:                     ESe -> ERe 
                        28      40        Sender error -  
                                            retry possible (progr error) 
                        29      41        Sender error -  
                                            no retry possible (parent break)
                        2A      42        Protocol error detected by sender 
                        2B      43        STOP mess to sender 
                        2C      44        ABORT MESS to sender 
                        2D      45        Hard error on disk 
           
          A_B_O_R_T_         - Done by receiver: TIMEOUT               QRa -> - 
                        30      48        -awaiting data 
                        31      49        -after sending RR, awaiting SS 
                        32      50        -after sending QRok, awaiting ESok 
                        33      51        -not used 
                        34      52        -after sending QRe, awaiting ESe 
                        35      53        -after GO, awaiting first SS 
                        36      54        -NPM status error occured (not sent) 
           \f

          GROUP:        HEX:      DEC:      EXPL:                 USED BY: 
                        - Done by sender: TIMEOUT                 ESa -> - 
                        40      64        -awaiting MR 
                        41      65        -after TS reset, awaiting RR 
                        42      66        -after sending ESok, awaiting ERok 
                        43      67        -after sending ESe, awaiting ERe 
           k)
                        46      70        NPM status error occurred (not sent) \f

F_       G_._ _ _ _ _ _ _ _ _S_E_T_-_F_I_L_E_ _R_E_S_U_L_T_ _V_A_L_U_E_S_ G.
           
          Set-file result reflects the success of the initial attemps to
          access a file involved in a transfer. 
           
          Result = 0 is OK. 
          Not ok is: 
                       1*SETCATBASE 
                    + 10*LOOKUPENTRY 
                   + 100*CREATEAREA 
                  + 1000*RESERVEPROCESS 
                 + 10000*(RESULT _OF _WAITANSWER -1) 
                + 100000*CHANGEENTRY 
           
          Setcatbase:        0     Catalog base set 
                             2 (-) State of child process does not permit
                                   modification 
                             3 (-) Process does not exist, not internal,
                                   not child 
                             4     New base illegal 
                             5 (-) Name format illegal 
                                    
          lookupentry:       0     Entry look up 
                             2     Catalog input/output error 
                             3     Entry does not exist 
                             6     Name format illegal 
                             7 (-) Maincat not present 
                                    
          createarea:        0     Area process created 
                             1     Area claims exceeded 
                             2     Catalog i/o error, state of document
                                   does not permit this call 
                             3     Entry not found 
                             4     Entry does not describe an area 
                             6 (-) Name format illegal 
                              \f

          reserveprocess:    0     Process reserved 
                             1     Reserved by another process 
                             2     Process cannot be reserved 
                             3     Process does not exist, calling process
                                   not user 
                              
          result _of _ 
          waitanswer:        1     Normal 
          (on sense mess)    2     Rejected 
                             3     Unintelligible 
                             4     Disconnected 
                             5     Receiver does not exist 
                              
          changeentry:       0     Entry changed 
                             2     Catalog i/o error, document not ready 
                             3     Entry not found 
                             4     Entry protected: entry base not con-
                                   tained in max base of calling process 
                             5     Area process reserved by another process
                             6     Name format or new size illegal, claims
                                   exeeded 
                             7     Maincat not present 
                              \f

F_       H_._ _ _ _ _ _ _ _ _D_I_S_C_O_N_N_E_C_T_ _C_A_U_S_E_ _V_A_L_U_E_S_ H.
           
          The CAUSE is one byte delivered in SC operations disconnect
          request, disconnect accept, disconnect reject and abort session.
          The following values are assigned to CAUSE by FTU: 
           
          - in disconnect request: cause = 0 
          - in disconnect accept: cause = 0 
          - (disconnect reject never sent by FTU) 
          - in abort session: 
                 cause = 9: program error 
                        (10) not used) 
                       = 11: timeout awaiting disconnect 
                       = 12: letter recieved was not ok from SC (SC result
                             <> 0) 
                       = 13: disconnect request was not processed ok by SC
                             (SC result <> 0). 
           
           \f

F_       I_._ _ _ _ _ _ _ _ _S_Y_S_T_E_M_ _P_A_R_A_M_E_T_E_R_S_ I.
           
          The system parameters are set at program call time as parameters
          to the program call: 
           
          npm.<npm>      name of NPM. Default: npm 
          log.<logfile>  name of logfile. Default: ftulog 
                       
          timeout.<secs> seconds in timeout. Used when awaiting
                         data/command from the remote end. If nothing
                         arrives, timeout will occur in the time interval
                         between <timeout> and 2*<timeout> seconds.  
                         Default value: 3. 
           
          updmark.<val>  value for updatemark (integer). Used when writing
                         (receiving) a file. During writing, <updmark> is
                         placed in the catalog entry, in tail (7) instead
                         of the proper value, which is placed if the
                         transport terminates successfully.  
                         Default value: 1001. 
                          
          ackw.<val>     acknowledgement window used in level 1, if not set
                         in transport mess or changed by the remote end. 
                         Default value: 3. 
                          
          nsubscr.<him>  name of HPM subscriber, used at open port.  
                         Default: him. 
                          
          rmask.<r1>.<r2>.<r3>.<r4> 
                         receivermask used at open port. 4 numbers, stored
                         in 4 bytes. 
                         Default: 0.1.0.1. 
                          
          bufno.<val>    the number of buffers of 1998 bytes each used for
                         recieve-letter and send-letter operations,
                         respectively. During a transport (session), all
                         recieve-buffers are attempted waiting for input,
                         and if FTU is in the role of sender, all
                         send-buffers are attempted sent. The FTU allocates
                         <val>+1 buffers for input, the extra is used for
                         event-control. 
                          \f

F_       J_._ _ _ _ _ _ _ _ _S_U_R_V_E_Y_ _O_F_ _L_E_V_E_L_ _0_ _C_O_M_M_A_N_D_S_ J.
           
          NAME      CODE     FORMAT                                 USED BY
                    (HEX)    (before dividing in subrecords) 
                             CMD     PAR 
                             (DEC)   CNT 
          SFT       04        4    <n>    PARAMETERS                P 
           
          RNEG      03        3    <n>    PARAMETERS                Q 
           
          RPOS      02        2    <n>    PARAMETERS                Q 
           
          GO        01        1     0                               P 
           
          STOP      00        0    <n>    PARAMETERS                P 
           
           \f

F_       K_._ _ _ _ _ _ _ _ _S_U_R_V_E_Y_ _O_F_ _L_E_V_E_L_ _1_ _C_O_M_M_A_N_D_S_ K.
           
          The FORMAT shown is before divinding in subrecords. 
           
          NAME  CODE  FORMAT                         USED 
           _ _ _ _ _ _(_H_E_X_)_ _(_D_E_C_)_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _B_Y_ _ _ _ _ 
           
                      HEAD  CMD  ARG                  S 
          SS    40    0    64    0   
          Start of data 
           
          MS    41    0    65  MARK                 S 
          Mark sender   (placed in first 
                         par of data blocks) 
           
          ES    43    0    67  State1               S 
          End sender 
           
          RR    44    0    68  MARK                 R 
          Restart request 
           
          MR    45    0    69  MARK                 R 
          Mark Ackn 
           
          QR    46    0    70  State1               R 
          Quit 
           
          ER    47    0    71  State1               R 
          End ackn 
           \f

F_       L_._ _ _ _ _ _ _ _ _L_E_V_E_L_ _1_ _S_T_A_T_E_/_E_V_E_N_T_ _T_A_B_L_E_S_ L.
           \f

F_           \f

F_       M_._ _ _ _ _ _ _ _ _D_E_T_A_I_L_S_ _O_N_ _L_E_V_E_L_ _0_ _P_A_R_A_M_E_T_E_R_S_    M.
           
          The table below shows all transport paramteters, as stored in
          FTD, and shows the mapping into FTP parameters. 
           
          Field                   Field     Used   Form   Format  Qualifier    Base 
          No                      Var       Attr   in FTD         used in      addr 
           _ _ _ _ _ _C_o_n_t_e_n_t_s_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _S_F_T_ _ _ _ _o_t_h_e_r_ _ _ _ _ _ _
          F1    Mode of access    moa       1      W      -1      42     42    0 
                2=Replace P->Q 
                130=Read only Q->P 
          F2    Local file name   lname     -1/64  t11    8<12+2  0      50    2 
          F3    Local file scope  
                (low-up)          lscope           2w                          10 
          F4    Remote file name  rname     64/-1  t11    8<12+2  50     50    14 
          F5    Remote file scope 
                (low-up)          rscope           2w                          22 
          F6    Remote HOST IDENT rhost     -1     t23    16<12   0      0     26 
          F7    Remote XMIT MASK  rxmask    -1     t4     4<12    0      0     42 
          F8    Monitor  message: 
                         name     mname     113    t11    8<12+8  0      58    46 
          F9             contents mmess            8w                          54 
         F10    Operator message  opm       112    t23    16<12   58/0   58    70 
         F11    Ackn. window      ackw      10     w      -1      42     42    86 
         F12    User name         uname     66     t41    24<12   50/0   50    88  
         F13    Account           acc       74     t23    16<12   50/0   50    112 
         F_1_4_ _ _ _ _S_p_e_c_i_a_l_ _o_p_t_i_o_n_s_ _ _ _s_p_e_c_i_a_l_ _ _ _1_2_8_ _ _ _ _t_4_1_ _ _ _ _2_4_<_1_2_ _ _ _5_8_/_0_ _ _ _5_0_ _ _ _ _1_2_8_ 
         F15    File size         fsize     96     w      -1      42     42    152 
         F16    Kinship (filetail)tail      70     10w    0<12+10 178/50 50    154 
         F17    Facilities        facil     14     w      -1      171    42    174 
         F18    Codes             codes     2      w      -1      171    42    176 
         F19    Protocol ident    protocol  0      w      -1      42     42    178 
         F_2_0_ _ _ _ _S_t_a_t_e_ _o_f_ _t_r_a_s_f_e_r_ _ _s_t_a_t_e_s_ _ _ _ _1_5_ _ _ _ _ _w_ _ _ _ _ _ _-_1_ _ _ _ _ _ _0_ _ _ _ _ _ _4_2_ _ _ _ _1_8_0_ 
         F21    Level 0  
                role (P or Q)     role0            w                           182 
         F22    Level 1 
                role (R or S)     role1            w                           184 
           \f

                   L_e_g_e_n_d_: 
          Field No:      as in appendix B. 
          Contents:      FTP name 
          Field var:     FTD name 
          Used attr:     Level 0 attribute number or -1 (no attribute) 
          Base adr:      field address of the field in FTD. Always array
                         field, i.e. an integer parameter is referenced
                         ftd.<faddr-val>(1) 
          format:        describes the format of the attribute: 
                     ->  -1: one integer (16 bits number in FTP) 
                     ->  thw <12: 
                         an IA5 text string. thw halfwords, i.e. max
                         thw*3//2 characters. 
                     ->  thw <12 + nws: 
                         1) an IA5 text string of max thw halfwords. When
                            read in FTP it is interpreted as a name, i.e.
                            the first sequence of number and letters,
                            terminated by a delimiter. When written in FTP,
                            all chars (until NULL) are output. 
                         2) nws numbers follow, in FTP both read and
                            written as IA5 text separated by delimiters
                            (minus sign may occur). In FTD, the numbers are
                            stored in integers just after the thw halfwords
                            of text.  
                         3) the total field is in FTP taken as one
                            parameter (attribute), i.e. one IA5 string. 
          qualifier used:qualifier value used (decimal) 
          form in FTD:   type of field content. 
                          \f

                   Q_U_A_L_I_F_I_E_R_ _D_E_C_O_D_I_N_G_ 
           
          The following is mostly a repetition of FTP. 
           
                                                bit: 7  6  5  4  3  2  1  0
                                    decimal values   -> 128 64 32 16 8  4  2
          HEX     DEC 
                           M_O_N_I_T_O_R_ (P only) 
          00    +  0 - not in reply 
          80    +128 - Include in reply 
           
                           F_O_R_M_A_T_ _O_F_ _V_A_L_U_E_ 
  80 or 00    +  0 - Attribute unknown 
  90 or 10    + 16 - Attr. value absent 
  A0 or 20    + 32 - Number (2 bytes) 
  B0 or 30    + 48 - Alpha (IA5 string) 
   
                       T_Y_P_E_ _O_F_ _P_A_R_A_M_E_T_E_R_ 
              08    +  8 - Modify: change current 
                             value - constraints below      not checked 
              00    +  0 - Select: value controls         in reading 
                             selection of an entry 
   
                           O_P_E_R_A_T_O_R_ 
                           Make (take) a new attr. value. It is successful if
                           (new attr. value) <operator> (parameter val) is
                           true.  
                                                      For strings: 
  0A or 02    +  2 - EQ  Equal                     + 
  0B or 03    +  3 - LE  Less than or equal         
  05 or 05    +  5 - NE  Not equal                 + 
  0E or 06    +  6 - GE  Greather than or equal 
  0F or 07    +  7 - ANY Any value acceptable      + 
   \f

                   W_r_i_t_i_n_g_ _a_t_t_r_i_b_u_t_e_s_ _i_n_ _l_e_v_e_l_ _0_ 
          text (both pure text and names): 
                  all bytes of the field in FTD are output (all 8 bit)
                  regardless of their contents. 
          numbers: output by write (layout << d>) i.e. a space followed by
                   (maybe) minus sign and digits. 
           
          R_e_a_d_i_n_g_ _a_t_t_r_i_b_u_t_e_s_ _i_n_ _l_e_v_e_l_ _0_ 
          Unknown attributes (i.e. the attribute value not mentioned in the
          table introducing this app.) are skipped (even if monitor bit is
          set). 
           
          Qualifier checked:  
           - no value:       no value taken. If monitor bit set,the value
                             is returned. 
           - number:         check to expected qualifier 
           - text:           check to expected qualifier 
           - type:           irr 
           - operator:       checked to expected qualifier 
           - if not ok:      State 1002 is returned (in RNEG) 
          Interpret text:    (follows contents of format) 
           - pure text:      all bytes moved as (byte extract 7) unused
                             bytes in FTD are zero set (NULL) 
           - name:           read with procedure readstring, skipping
                             delimiters in front, reading until delimiter.
                             valid bytes: small letters and numbers. NULL
                             and DEL are blind. 
           - numbers:        read with procedure read. Alphabeth allows
                             plus or minus in front, and digits. Delimiters
                             in front are skipped. 
                              \f

F_       N_._ _ _ _ _ _ _ _ _L_O_G_ _F_I_L_E_ _E_V_E_N_T_S_ _A_N_D_ _R_E_C_O_R_D_S_ N.
           
          The log file is used to log events of history from FTU. A log
          record is one segment. The file is written segment by segment
          cyclically. 
           
          A log record is written (contents of field p_r_o_g_l_a_b_ in paranthesis):
          - at start of FTU program (start-ftu) 
          - when FTU is stopped (ftu-stopped) 
          - when transport stop occurs, as described in 3.1.1 (trsp-stop) 
          - when an alarm occurs (alarm). 
            This includes: - parent break 
                           - status error recieved from NPM 
                           - result <> 0 from SC on letters sent, 
                           - stop message recieved 
                           - program errors 
          - when a disc error occurs in level 1 reciever (filestatus) 
           
          The format of the log record is exactly all fields of FTD. 
           
           \f

F_       O_._ _ _ _ _ _ _ _ _D_I_V_I_S_I_O_N_ _O_F_ _D_A_T_A_ _B_L_O_C_K_S_ _I_N_ _S_U_B_R_E_C_O_R_D_S_ O.
           
          Before sending a block (letter), it is divided in sub-records,
          thus b denotes data bytes, h header bytes 
           
           h    = 2 (or =0 in level 1 commands) 
           b1
           b2 
           h    = 1 
           b3 
           h    = 2 
           b4 
           b5 
           h    = 60 
           b6 
           b7 
           . 
           . 
           . 
           b65 
           h    = 1 
           b66 
           h    = 2 
           b67 
           b68 
           h    = 60 
           b69 
           b79 
           . 
           . 
           . 
           etc. until no more data bytes. 
                 
                The last header has the EOR bit set. After the last
                subrecord, one or two dummy bytes may be transmitted in
                order to stick to the word boundaries of RC8000. 
                 \f

F_       P_._ _ _ _ _ _ _ _ _F_T_U_ _S_T_A_T_E_ _S_E_T_T_I_N_G_S_ P.
           
          FTU STATE has the following format: 
           
          STATEPORT<8 + STATECON 
           
          S_T_A_T_E_P_O_R_T_ _v_a_l_u_e_s_ _(_d_e_c_i_m_a_l_)_:_ _ _ _ _ _ _ _ _ _ _ _ 
           
          1: FTU not started 
          2: FTU stopped by stopmess 
          3: FTU stopped by parent break 
          4: stopped by npm error 
          5: stopped by program error 
          6: ready (port opened) 
           
          S_T_A_T_E_C_O_N_ _v_a_l_u_e_s_ _(_d_e_c_i_m_a_l_)_:_ _ _ _ _ _ _ _ _ _ _ _ 
           
          1: not ready (no port) 
          2: waiting (port open, no connection) 
          3: called for connect 
          4: connected as q 
          5: calling for connect 
          6: connected as p 
          7: disconnecting 
          8: awaiting disconnect 
          9: aborting on program error 
         10: (not used) 
         11: aborting on timeout awaiting disconnect 
         12: aborting on letter recieved with SC result <> 0 (not ok) 
         13: aborting on disconnect request was not processed ok by SC 
             (SC result <> 0) 
           
           \f

«eof»