|
|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 167296 (0x28d80)
Types: TextFile
Names: »D97«
└─⟦5dbd6b396⟧ Bits:30005867/disk12.imd Dokumenter (RCSL m.m.)
└─⟦this⟧ »D97«
\f
i
C_O_N_T_E_N_T_S_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _P_A_G_E_
0. REFERENCES .............................................1
1. INTRODUCTION ...........................................2
1.1 Requirements ......................................2
1.2 Use of the System .................................2
2. BASIC PRINCIPLES .......................................4
2.1 Phase of Analysis .................................4
2.2 Phase of Reorganization ...........................4
2.3 Reinsertion of CF-Listfiles .......................5
2.4 Adaption ..........................................7
3. SPECIFICATION ..........................................9
4. LIMITATIONS ............................................14
5. FILE FOR FUTURE AMENDMENTS .............................16
6. OPERATING GUIDE ........................................17
6.1 Call of Reanalyse .................................18
6.2 Call of Reextract .................................23
6.3 Call of Reform ....................................24
6.4 Call of Reinsert ..................................26
6.5 Use of Resources ..................................27
6.6 Examples of Program Calls .........................30
7. RUN JOURNAL ............................................35
7.1 Reanalyse Run Journal .............................35
7.1.1 Survey of Affected Files ...................36
7.1.2 Results of Analysis ........................37
7.1.3 Errors .....................................42
7.1.4 Hard Errors ................................44
7.2 Reextract Run Journal .............................45
7.3 Reform Run Journal ................................46
7.4 Reinsert Run Journal ..............................46 \f
ii
C_O_N_T_E_N_T_S_ _(_c_o_n_t_i_n_u_e_d_)_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _P_A_G_E_
8. HARD ERROR .............................................50
8.1 Errors in the Call Parameters .....................50
8.2 Errors due to Lack of Resources ...................51
8.3 Errors from the CF-System .........................52
8.4 Errors from the SQ-System .........................52
8.5 Run Time Errors ...................................53
9. DANISH APPENDIX ........................................55
9.1 Keywords in Program Calls .........................55
9.2 Run Journal .......................................61
9.2.1 Reanalyse Run Journal ......................61
9.2.2 Reextract Run Journal ......................68
9.2.3 Reform Run Journal .........................68
9.2.4 Reinsert Run Journal .......................69
10. INDEX ..................................................71
\f
0_._ _ _ _ _ _ _ _ _ _ _ _ _ _R_e_f_e_r_e_n_c_e_s_
(1) Introduction-TOOLS
RCSL 21-V001 (Danish edition)
(2) Connected Files System
RCSL 28-D5
(3) RC8000 SQ-System
RCSL 31-D561
(4) DATABASE80
RCSL 21-V045\f
1_._ _ _ _ _ _ _ _ _ _ _ _ _ _I_n_t_r_o_d_u_c_t_i_o_n_
REORG80 is a System80 basic module intended for database
reorganization.
purpose The purpose of REORG80 is: to let the initial creation of a
new database, or the reforming of an existing database, be
made automatically, governed by the contents of the old and
new database descriptions.
In this version of REORG80 files of the type cf-master,
cf-list and outvar can be reorganized and fileheads can be
created.
Danish The program can optionally run with Danish Keywords and
texts Danish output. For Danish users this facility and the texts
will be described in chapter 9: Danish Appendix.
1_._1_ _ _ _ _ _ _ _ _ _ _ _ _R_e_q_u_i_r_e_m_e_n_t_s_
requirements A basic requirement for the use af the system is that a
descripfile set up by DATABASE80 exists. (ref (1) and (4)).
1_._2_ _ _ _ _ _ _ _ _ _ _ _ _U_s_e_ _o_f_ _t_h_e_ _S_y_s_t_e_m_
use of the REORG80 should be used when:
system
1. A descripfile, but no database exists. Fileheads for the
initialization described files may then be created by the system.
2. Two versions of the same descripfile and a database,
reorganization corresponding to the oldest version of the descripfile,
exist.
\f
3. A database and one descripfile exist, and the database
tidying up needs some tidying up. E.g. the dead records in a listfi-
le must be removed. The system finds out if the changes
which have been introduced into the new version of the
descripfile are legal; and whether they should result in
a reorganization of the database. If both conditions are
fulfilled the real reorganization can be carried out. \f
2_._ _ _ _ _ _ _ _ _ _ _ _ _ _B_a_s_i_c_ _P_r_i_n_c_i_p_l_e_s_
REORG80 REORG80 consists of four programs reanalyse, reextract, re-
programs form, and reinsert.
A reorganization is carried out in two phases, the phase of
analysis and the phase of reorganization. The phase of ana-
lysis should a_l_w_a_y_s_ be started when changes have been made
in a descripfile, in order to check the need for a reorgani-
zation.
2_._1_ _ _ _ _ _ _ _ _ _ _ _ _P_h_a_s_e_ _o_f_ _A_n_a_l_y_s_i_s_
phase of In this phase the old and the new version of the descripfile
analysis are compared. This is done with the program reanalyse which
after final comparison prints a list of any differences and
reanalyse errors found and forms a table (reotab). The table makes up
the entire adaption for the programs which are to be activa-
ted in the following phase, the phase of reorganization. The
phase of analysis is concluded when it is correctly carried
through, i.e. when no illegal amendments are found.
2_._2_ _ _ _ _ _ _ _ _ _ _ _ _T_h_e_ _P_h_a_s_e_ _o_f_ _R_e_o_r_g_a_n_i_z_a_t_i_o_n_
phase of This phase is to be started by the user if the reanalyse
reorganiza- program finds it necessary. Three programs belong to this
tionphase:
reextract reextract: Extracts all records from the files which are to
be reorganized.
reform reform: Reforms the extracted records in accordance with
the new version of the descripfile.
\f
reinsert reinsert: Creates fileheads for new files and for files
which are to be reorganized, and inserts the
reformed records in the respective files.
These programs must run in the given sequence either
immediately after each other or separately.
In case of an initialization of a new database, there will
be no records to extract from old files. Therefore the user
need only call the two programs: reanalyse and reinsert, but
of course, call of the other programs will do no harm.
2_._3_ _ _ _ _ _ _ _ _ _ _ _ _R_e_i_n_s_e_r_t_i_o_n_ _o_f_ _c_f_-_l_i_s_t_f_i_l_e_s_
reinsertion As it is not obvious how records can be reinserted into
of cf-list- cf-listfiles this phase will be described in more detail
files here.
Reinsertion must satisfy the two main goals:
1. all records are reinserted
2. all records are connected to all the chains they have
been connected to, unless the chain has been removed.
In order to fulfill this we had to make clear two points:
a. as there may be records which are not members of the
primary list, which list shall be chosen as insert list,
and in which order shall we connect the other lists,
b. in which order shall we insert or connect the records in
the chains.
The strategy we have chosen works as follows:
insertlist a) the order of the lists is defined as the order in which\f
the lists are described in the list section of the new
descripfile. The first list is the primary list. The
first list a record is connected to will be its insert
list.
E.g.
the structure:
(tegning)
is described in the list section as:
l24 .....
l34 .....
l14 .....
All the records which are connected to list 24 are inser-
ted into list 24, next all the records which are n_o_t_ con-
nected to list 24 but are connected to list 34 are inser-
ted into list 34 and the rest is inserted into list 14.
b) normally, before the records are inserted, they will be
record order sorted according to the ident-fields.
If it is necessary to keep the records in the same order
as they were in before reorganization, then this will be
achieved if the following requirements are fulfilled.
- the primary chain is the same before and after reorga-
nization
- all the records are connected to the primary chain
(otherwise they won>t be reinserted!) \f
- reanalyse has been called with a special fp-parameter
denoting which chain should be kept in order.
order.<list' reanalyse ... order.<primary chain no'
- reextract must have access to the mother-file.
Normally, reextract needs only to have access to the
listfile, unless the motherfile itself must be
reorganized.
The other chains will always be connected in
recnocf-order.
The strategy fulfills the two goals we set in 1 and 2.
The user is able to determine the insertion order just by
choosing the order of the lists and the ident-fields, or
by specifying the same order as before.
2_._4_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _A_d_a_p_t_i_o_n_
adaption The only kind of adaption which REORG80 demands of the
user is, besides any fp adaption, the new descripfile and
the descripfile which corresponds to the existing
database.
fp adaption In the phase of analysis it is standard that only files
of the type cfmaster and cflist are treated. However, it
is possible by fp-adaption to demand an analysis of all
files or of outvar files only. By means of fp-adaption it
is furthermore possible to demand reorganization of
certain files, though the description is not changed, for
tidy up a instance you can tidy up a file if it has grown too big.
file This adaption only controls the phase of reorganization,
not the analysis.
exclusion By means of fp-adaption certain files may also be
of files excluded from the reorganization. This adaption only
controls the phase of reorganization not the analysis. \f
This possibility may be used if, for some reason it is
desired to split up the reorganization into more jobs.
Furthermore it is necessary to exclude both mother- and
listfile-to- daughterfile, if the database contains a cf-listfile
listfile which is mother to a cf-listfile, as the current version
of REORG80 cannot reorganize this structure.
Note:
The user is advised to decide carefully which files he
wants to exclude from reorganization.
Often a reorganization of a motherfile results in a
reorganization of the daughterfile and vica versa,
because the chainparts are updated. Therefore the user
should use a rule of thumb:
1. reorganize every motherfile if a cf-listfile is
reorganized,
2. reorganize every daughterfile if the keyfields of a
cf-masterfile are changed.
Our strategy requires that motherfiles are reorganized
before daughterfiles. This is done automatically if all
files are reorganized at a time, but if the
reorganization is split up, you have to see to it
yourself. \f
3_._ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _S_p_e_c_i_f_i_c_a_t_i_o_n_
specification The Reorgsystem is in this version able to do the
following:
tidy up a 1. Reorganization on demand of the user (for instance for
file the purpose of tidying up).
filehead 2. Insertion of a new file. Causing a new filehead for
creation the file concerned to be created.
insertion of a 3. Insertion of a new logical file in an existing file.
logical file Only causing reorganization if identfields or certain
file parameters are changed.
insertion of a 4. Addition of a new list attached to a cfmaster file.
list Causing all records in the logical file, which is part
of the cfmaster file, to have a new chain field, while
existing chain connections are preserved.
If there exist records in the cf-listfile which is
daughter of the new list, these records will have a
new chainfield too.
insertion of a 5. Insertion of a new record type in the existing logical
record type file. Only causing reorganization if the identfields
of the logical file or certain file parameters are
changed.
insertion of a 6. Insertion of a new group in an existing record type.
group Causing the fields of the group to be inserted in the
record. By a repeating group only one control word,
but no fields, is inserted as the number of
repetitions is = 0.
\f
removal of a 7. Removal of a logical file or a file.
logical file Note that the reextract program extracts all records,
or file including those which shall be removed. The reinsert
program inserts only the records which shall remain in
the database.
removal of a 8. Removal of a record type. Functions as described under
record type point 7 for records of the current record type.
removal of 9. Removal of a group. Functions as removal of fields.
a group (See later).
insertion of 10. Insertion of new fields. Standard value is inserted if
a field it exists, otherwise all the bits of the fields are
set to zero.
removal of 11. Removal of a field. Causes the field to be removed
a field physically, where it exists.
moving of 12. Moving of a field. Occurs probably mostly in connecti-
a field on with insertion of new fields, but can also occur
for instance by moving of a field from one group to
another, or from the record-type-specific part of the
record to the logical-file-specific part or the other
way round. Moving of the field may furthermore take
place in connection with any of the under point 14-18
described changes.
By moving of a field f_r_o_m_ the record-type-specific
part of one record or f_r_o_m_ an ordinary group t_o_ a
repeating group the following happens:
If the field is simple (described without dimension)
the field contents is transferred to the first incar-
nation of the field in the repeating group. In any
other incarnations of the fields, 0 or standard value
is inserted.\f
If the field, which is to be moved, is an array (in-
dicated by dimension) a number of elements are trans-
ferred: e.g. the number of elements which correspond
to the number of incarnations of the field in the
group. If the number of incarnations ' dimension, 0 or
standard value is inserted in the extra elements.
moving of 13. Moving of f-bits. Is only relevant for logical files
f-bits with application code gvs. By change in a record type
description the serial numbers, which are assigned to
the fields by DATABASE80 and, which are used as bit
index in f-bits by GVS, can be changed. REORG80, how-
ever, moves the bits so they will correspond to the
new field serial numbers.
change of 14. Field type change. Not all combinations are allowed
field type here; generally you can say that the field types half,
word, long real and text can be mutually transformed.
A decimal point described under representation is in-
cluded in the transformation.
By change of field type from text to another field ty-
pe standard value is inserted, and by change of field
type to text a null text is inserted.
An aggregate field can>t be changed to another type
(and vice versa).
Mref - or dref field can>t be changed to another type
(and vice versa).
change of 15. Change of array length. By extension of an array field
array length a standard value, if any, is inserted or the number of
elements which the extension includes are set to zero.
By diminishing of an array a number of elements in the
upper part of the array are cut off.\f
change of a 16. A simple field can be changed to an array of the same,
simple field or of another field type. (As seen under point 14).
to array
field
change of a 17. Change of text field length. By extension of a simple
text field field of the type text null characters are inserted.
length By diminishing of a text field a null character is in-
serted as the last character of the text field. When
the subject is a text array the length of the indivi-
dual elements are changed as for simple fields of the
type text; at the same time the elements are pushed.
change of the 18. Change of layout concerning decimals. This can be done
number of for fields of the type half, word, long and real.
decimals
removal of 19. Removal of a list removes a chainfield from all re-
a list cords of the mother file and daughter file.
Note: if there exist some cf-listrecords which are on-
ly attached to the removed list these records cannot
be inserted into the listfile again, so they will be
removed too.
change of the 20. The keyfields of a cf-masterfile may be changed even
keyfields of a if one or more lists are attached to the file. This
cf-masterfile will result in a reorganization of all the cf-listfi-
les which are daughterfiles.
change of 21. If two files are connected by more than 1 list, the
list sequence sequence of the lists may be changed. Especially the
change of primary list may be changed, resulting in another or-
primary list dering of the daughter-file records.
\f
change of 22. Change of ident-status and reordering of ident-fields
ident-fields is allowed as far as the limitations of DATABASE80 are
met. Especially for list files, reordering of ident-
fields results in reordering of the list records (see
2.3, record order). \f
4_._ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _L_i_m_i_t_a_t_i_o_n_s_
limitations The limitations below concerning changes in the db-
description apply to version 7:
changes con- 1. Cf-listfiles may only be reorganized if they are
cerning file daughters of masterfiles.
of the type
cf-list
removal of a 2. A logical file which is stored in several files must
logical file be removed from all of these at the same time.
repeating 3. As to repeating groups the following is prohibited:
groups
Change of group type from ordinary to repeating and
vice versa.
Moving of a field f_r_o_m_ a repeating group to another
part of the record.
change of 4. Change of the numbers of files, lists, logical files,
file-, logi- record types and groups is not allowed, as they are i-
cal file-, dentifiers of the individual elements in the descrip-
record type-, tion.
and group no.
change of 5. Change of both field no and field name is not allowed.
field no and If it is necessary to change both, the user can in the
field name first turn change the field no, then run reorganizati-
on and then change the field name, for example.
negative 6. There must not be any records containing negative key-
keyfields fields (other than the dummy-record with keyfield -1
and without any daughter records attached to it). The
reason is, that keyfields in the phase of sorting and
comparison are described as a sequence of abs-half-\f
words, with the result that negative fields are consi-
dered bigger than non-negative fields.
Note: It is absolutely necessary for the user to pay
attention to (and obey) the above mentioned restricti-
ons as a thorough control not in all cases (can be or)
is made by REORG80. \f
5_._ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _F_i_l_e_ _f_o_r_ _F_u_t_u_r_e_ _A_m_e_n_d_m_e_n_t_s_
file for If the user needs a file for future amendments (from now
future on called fut.amend.) this file must be described in the
amendments db-description. Furthermore the corresponding logical fi-
le and list/lists must be described (see about this in
corresponding ref (4), section 5.3). The file can only be attached to
logical files files of the type cf-master.
future file As lists attached to the fut.amend. file do not contain a
mother reference there is no problem of reorganization in
connection with change of ident fields in a mother logi-
cal file. Thus it should be possible to reorganize the
mother logical file. The problem is however, that the
records of the file for future amendments contain field
no, -address and -type for the field, which should be
changed, and it might very well happen that this
information after the reorganization of the mother
logical file does not fit the actual circumstances
anymore.
We have thus chosen to cut off the old connection with
the list file by reorganization of its mother file. Which
means that all records in the list attached to the cur-
rent mother file are lost. That is, the records are still
there but are not available. This may gradually result in
a space problem for which reason it is recommended that
the user as far as possible sees to it that all fut.a-
mend. have become effective b_e_f_o_r_e_ the reorganization.
The record contents in the fut.amend. file may be printed
by means of GVS before the reorganization. Only lists be-
longing to master files which are reorganized will be cut
off. \f
6_._ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _O_p_e_r_a_t_i_n_g_ _G_u_i_d_e_
operating The REORG80 programs must run in a fixed sequence (see
guide section 2). In case that only cf-file heads are to be
created run with the programs reextract and reform may be
omitted.
fp-adaption It is strongly recommended to read section 6.1 about call
of reanalyse as the fp-adaption of this program controls
the remaining part of the reorganization.
The programs reextract, reform and reinsert do not nor-
mally need fp-adaption besides name of descripfile. Fur-
thermore reading of section 6.6 is recommended.
newformat The two files for extracted records, newformat and old-
oldformat format, must be specified as sq-files, e.g.:
newformat = set <segm' <disc' 0 0 0 21.4
Here the blocklength is specified as 4 segments. In lar-
ger reorganizations the blocklength may be specified as
8. (see ref. (3)).
Note:
If the files are set as normal files, you may end with an
empty database.\f
6_._1_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _C_a_l_l_ _o_f_ _r_e_a_n_a_l_y_s_e_
<reanalyse-call'
reanalyse
call*
newdescrip
olddescrip
init
analyse
file*
reanalyse record .<parameters'
reotab1
field
order
size
test
testout
0
No parameter group is mandatory. In the following the
parameters are discussed individually in the above
mentioned sequence.
newdescrip newdescrip.<new descripfile name'
The name of the file which contains the new descripfile.
Standard: newdescrip.descripfile. \f
olddescrip olddescrip.<old descripfile name'
The name of the file which contains the old descripfile.
Standard: olddescrip.olddescrip.
M_ 1
yes
init init.
no
P_ 1
By yes it may be indicated that it is a first time run,
which means that only fileheads shall be created in the
new database.
Standard: init.no
M_ 1
cf
analyse analyse. outvar
all
P_ 1
At this point is indicated which file types that should
be treated in the phase of analysis:
cf all files of the type cf _master and cf _list.
outvar only files of the type outvar.
all all files of the type cf _master, cf _list
or outvar.
Standard: analyse.cf\f
M_ *2
file file .<reorgmark' .<file no'
P_ 11
Indicates that certain files must or may not be reorga-
nized, no matter whether the files are changed or not.
<reorgmark'
noreorg
reorg
M_ *
reorg reorg .<file no'
P_ 1
The files mentioned m_u_s_t_ be reorganized, whether changes
in the db description have been made or not.
May for instance be used, when a file needs some tidying
up.
M_ *
noreorg noreorg .<file no'
P_ 1
The files mentioned m_a_y_ _n_o_t_ be reorganized, whether
changes have been made or not.
May for instance be used for partition of a big reorga-
nization into several smaller parts. Should be used with
care.
N_o_t_e_:
If the database contains a cf-listfile which is mother
to a cf-listfile, it is necessary to exclude both files\f
by means of
noreorg. <mother file no'.<daughter file no'
File numbers indicated by >reorg> and >noreorg> should
be a subset of the files indicated by >analyse>.
Standard: Change in the db-description concerning
the contents of a file results in a
reorganization of the file.
M_ *
record record .<rec-type no'
P_ 1
Indicates those record-types which m_a_y_ _n_o_t_ be
reorganized.
Concernes only record-types in files which are to be
reorganized.
Standard: If a file is reorganized, then all record-
types included will be so.
reotab reotab.<reotab - name'
The name of the discfile in which the table created by
the program is to be stored.
Standard: reotab.reotab.
M_ 1
M_ number
field field.
P_ name
P_ 1
Information about whether field number or -name should
be used by comparison of field descriptions.
Standard: field.number \f
M_ *
order order .<chain no'
P_ 1
(See also 2.3, reinsertion of cf-listfiles)
The cf-listfile records which are daughters of the chains
mentioned, will be inserted into the chains in the same
order as before reorganization.
<chain no' must be a primary chain both before and
after reorganization.
Standard: listfile records will be inserted, sorted
according to the identfields.
size size.<percentage'
This parameter can be used to increase the size of some
internal tables, whose size cannot be calculated on
before hand.
The need for this is indicated by a >field> or >index>
alarm in a run of reanalyse.
The meaning of size.100 is for instance a hundred percent
increase of these tables. This could be necessary if much
reforming of many records types is to be made.
Standard: size.0
M_ 1
M_ yes
test test.
P_ no
P_ 1
At this point it is indicated whether test prints from
the run are wanted.
This parameter should not be used unless the user is
advised so by the systems maintenance group.
Standard: test.no\f
M_ 1
testout testout.<testout name'.extend
P_ 0
At this point the name of the file in which the test
prints should be printed is stated. The file is created
if it does not already exist. Must be printed with the
convert command.
If the file is created it has the length 21 segments, and
test prints will be written cyclically.
This means that the user only can see the last 21
segments of the prints. If it is necessary to see all of
it the user must use the parameter
extend testout.<testout name'.extend
which automatically extends the file as long as the
resources allow it.
Standard: testout.testout.
6_._2_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _C_a_l_l_ _o_f_ _r_e_e_x_t_r_a_c_t_
reextract <reextract-call'
call
<olddescrip' = reextract,
M_m_m_ *
reotab
.<parameter'
oldformat
P_p_p_ 0
No parameter groups are mandatory, but <olddescrip' is
so.\f
<olddescrip' <olddescrip'
Name of the descripfile, which corresponds to the
existing database.
reotab reotab.<reorgtable-name'
As the name of the discfile, in which the table created
by the reanalyse program is stored.
Standard: reotab.reotab.
oldformat oldformat.<outfile-name'
The name of the outvar file, in which all the extracted
records are to be written. The file must be created in
advance. (See example 4 in section 6.6).
Note that the file must be a sq-file.
The file is inputfile to the reform-program.
Standard: oldformat.oldformat.
6_._3_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _C_a_l_l_ _o_f_ _r_e_f_o_r_m_
reform call <reform-call'
<left side' = reform,
reotab UUU*DDD
oldformat .<parameter'
newformat DDD0UUU
No parameter groups are mandatory, but the <left side' is
so.\f
<left side' <left side'
The name of the old or new descripfile.
reotab reotab.<reorgtable-name'
The name of the disc-file, in which the table, created by
the reanalyse program is stored.
Standard: reotab.reotab.
oldformat oldformat.<infile name'
The name of the outvar file, in which the extracted
records created by the reextract program are stored.
Standard: oldformat.oldformat.
newformat newformat.<outfile-name'
Name of the outvar file, in which the reformed records,
created by the program are stored.
The file must be created in advance, and must be a
sq-file.
The file is inputfile to the reinsert-program.
Standard: newformat.newformat.
\f
6_._4_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _C_a_l_l_ _o_f_ _r_e_i_n_s_e_r_t_
reinsert <reinsert-call'
call
M_m_m_ *
reotab
<newdescrip' = reinsert .<parameter'
newformat
P_p_p_ 0
No parameter groups are mandatory, but <newdescrip' is
so.
<newdescrip' <newdescrip'
The name of the new descripfile
reotab reotab.<reorgtable-name'
The name of the discfile, in which the table, created by
the reanalyse program is stored.
Standard: reotab.reotab.
M_ 1
newformat newformat.<infile-name' .clear
0
The name of the outvar file in which the records reformed
by the reform program are stored.
.clear The extension .clear has the effect, that the file is
cleared as soon as all the records are read. This serves
to save space, when reorganizing very large cf-listfiles.
Standard: newformat.newformat. \f
work work
workkit workkit .<discname'
Indicates the name of the disckit on which the workfiles
shall be created.
This parameter is useful when you want to reorganize a
very large cf-listfile, and you don>t have enough space
for the workareas on the usual disckits, but you have got
an extra kit. (See chapter 6.5 use of resources in rein-
sert)
If there is not enough space on the kit specified, a war-
ning is printed and the program attempts to create the
file on another disc.
Standard: work.disc.
6_._5_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _U_s_e_ _o_f_ _R_e_s_o_u_r_c_e_s_
use of The use of resources depends on the size of the database
resources and the extent of the reorganization. Besides, it depends
on how the reorganization is executed. The reanalyse pro-
gram should always run in an independent run so that the
user is able to check that the amendments in the db de-
scription have the desired effect. The reorganization it-
self on the other hand can be split up into three jobs
and s_h_o_u_l_d_ definitely be split up by big reorganizations
both for space and security reasons. By less extensive
reorganizations and by creations of fileheads the reorga-
nization itself can very well be executed in one job.
Make sure that there are enough permanent segments to put
the new database onto. The minimum size for new cf-files
has been increased, so it is possible that very small fi-
les will grow in reorganization, although they will just
grow with empty space for future extensions. \f
In the following, it is implied that all programs run in
their respective jobs. Only resources exceeding standard
are stated.
reanalyse:
size 50000
temp disc 3000 20 Is in most cases sufficient
perm <disc' 100 1 For storage of reotab
time 7 0 Should be sufficient
reextract:
size 35000
perm <disc' <segs' 1 The maximum total size
of the files which are to be
reorganized and one entry,
used for oldformat.
time Depends on the dimension of
the reorganization.
reform:
size 35000
perm As reextract, used for newformat
time Depends on the dimension of
the reorganization.
reinsert:
size 80000 Space necessary for sorting
of list file records
area 13 Will be enough if no
daughterfile has more than 4
motherfiles.
perm <disc' Enough segments and entries
to put the new database into.\f
temp disc <segs' 20 There must be enough seg-
ments to hold newformat + 2*
space for all the records in
the biggest cf-listfile.
time Depends on the dimension of
the reorganization.
workareas The temporary segments and entries are used to hold some
workareas during reinsertion of one listfile at a time:
(See 2.3 reinsertion of cf-listfiles)
a) the records are split into work-files accor-
ding to insert-list
b) the records in every work-file are sorted
(normally all the records will belong to the
primary chain and be sorted at the same time).
The sorting area is taken from the area which
later on will be used for the cf-listfile it-
self.
workkit When a workkit is specified, these workareas will be cre-
ated on the workkit.
It may be useful to know that the areas described in a)
and b) will n_o_t_ be necessary if the records are inserted
in the same order as before reorganization, because the
records then will be moved directly from newformat to the
listfile.
If reextract, reform and reinsert are run in the same job
the resources are as follows:
size 80000
perm <disc' The size and number of the
entries are the total size
of the created database files
plus the number of these.
\f
temp disc The maximum total size of
the files which are to be
organized multiplied with 2
+ 2 * space for all records
in the biggest cf-listfile +
1000
25 entries.
time Depends on the dimension of
the reorganization.
6_._6_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _E_x_a_m_p_l_e_s_ _o_f_ _p_r_o_g_r_a_m_ _c_a_l_l_s_
examples of In the examples 1-3 are shown calls of the reanalyse
program calls program. The other examples call reextract, reform and
reinsert.
example of Ex. 1
reanalyse Reanalyse can be called in a job as this:
job ue 29xxxx size 50000 perm dkxxxxxx 100 1,
time 7 0
reotab = set 1 dkxxxxxx
reanalyse field.name
scope user reotab
finis
Explanation:
In this case an old descripfile with the standard name
olddescrip and a database corresponding to this exist.
The new descripfile has the standard name descripfile. By
comparison of the old with the new descripfile field
names are to be used. The reotab must be permanent as it
will be read by the following programs.
\f
reanalyse Ex 2
example The call of reanalyse could also look as follows:
reanalyse olddescrip.descripfile reorg.4
Explanation:
tidy up of The descripfile is unchanged thus old and new descripfile
file in the call are the same. A >tidying up> of file no 4 is
wanted.
reanalyse Ex 3
example This is first call of reanalyse:
reanalyse init.yes
Explanation:
filehead There exists no database and only one descripfile. It is
called descripfile and it is desired that fileheads for
all files of type cfmaster and cflist described in this
file are created.
reextract Ex 4
example The reextract program is called in a job as
follows:
job ue 29xxxx size 35000,
perm dkxxxx 3500 1,
time 6 0
oldformat = set 100 dkxxxx 0 0 0 21.4
olddescrip = reextract
scope user oldformat
finis
\f
Explanation:
Reotab, olddescrip (the old descripfile) and the files
which are affected by the reorganization, must be
available as permanent files. Oldformat must be set as a
sq-file and must be permanent as it later will be read by
the reform program. The 3500 permanent segments
correspond to the total size of the files which in this
case will be reorganized.
reform Ex 5
example The reform program can be called in a job as
follows:
job ue 29xxxx size 35000,
perm dkxxxx 3500 1,
time 6 0
newformat = set 1 dkxxxx 0 0 0 21.4
descripfile = reform
scope user newformat
finis
Explanation:
Reotab, descripfile and oldformat must be available as
permanent files. Newformat must be set as a sq-file and
must be permanent as it later will be read by the
reinsert program.
\f
reinsert Ex 6
example The reinsert program can be called in a job as
follows:
job ue 29xxxx size 80000,
perm dkxxxx 3500 5,
area 13,
temp disc 6000 20,
time 10 0
; here new and reorganized files can be set.
descripfile = reinsert
; scope user of created files
finis
Explanation:
Reotab, descripfile and newformat must be available as
permanent files. Reorganized files and fileheads for new
files are created (preferably on drum or disc), if they
are not already set or found in a non-reorganized
edition. In the latter case the original files will be
reused and cut down to the minimum length.
reinsert Ex 7
example If you lack resources on the usual disc, you
supply with your private workdisc and call
reinsert in this way:
job ue 29xxxx size 80000,
perm dkxxxx 3500 5,
area 13,
temp disc 500 5,
temp dkwork 6000 20,
time 10 0
; set new and reorganized files here \f
work. descripfile = reinsert work.dkwork
.clear newformat.newformat.clear
; scope user of created files
Explanation:
Everything works as in example 6 except the following:
the temporary workareas will be created on the
disc dkwork and the file newformat will be cleared
as soon as all the records are read from it.
reextract, Ex 8
reform re- In this example reextract, reform and reinsert are run in
insert the same job:
example
job ue 29xxxx size 20000,
perm dkxxxx 2000 3,
temp disc 7000 20 time 12 0,
area 13
oldformat = set 1 disc 0 0 0 21.4
olddescrip = reextract
newformat = set 1 disc 0 0 0 21.4
descripfile = reform
clear temp oldformat
; here new and reorganized files can be set
descripfile = reinsert newformat.newformat.clear
scope user - - -
finis
Explanation:
Reotab, olddescrip and descripfile are implied available.
Besides, other commentaries should be superfluous. See
the examples 4, 5, 6 and 7. \f
7_._ _ _ _ _ _ _ _ _ _ _ _ _ _R_U_N_ _J_O_U_R_N_A_L_
run This chapter describes the run journals which are produced
journal by all programs and printed on current output.
The chapter is split up into 4 parts, describing the run
journal for one program each, and each part starts with some
overall description before the messages are listed in number
order and described.
The run journal is an account of the run progress, given in
the form of error messages and information about the number
of read and written records plus which database files that
are affected.
All messages are identified by a unique message number.
-error- In case of an error message (the line starts with the word
-error-) you can>t go on but must try to find the reason for
the error and correct it before a rerun.
*system error* In case of a line starting with the phrase *system error* RC
myst be contacted.
7_._1_ _ _ _ _ _ _ _ _ _ _ _ _R_e_a_n_a_l_y_s_e_ _R_u_n_ _J_o_u_r_n_a_l_
reanalyse The run journal from reanalyse consists of up to four main
messages parts under the following head lines:
survey of affected files
results of analysis
errors
hard error
Within each part, the individual messages are sorted accord-
ing to some criteria, described later. The last line of the\f
run journal will be one of the following, depending on the
result of the analysis.
creation of No illegal amendment found, reotab created.
reotab No amendment found, reotab not created.
Illegal amendment found, reotab not created.
Note: Only when reotab is created is it possible to continue
the reorganization.
7_._1_._1_ _ _ _ _ _ _ _ _ _ _S_u_r_v_e_y_ _o_f_ _a_f_f_e_c_t_e_d_ _F_i_l_e_s_
survey of At this point survey information about for example the files
affected which should be reorganized and which are to be created is
files printed.
There will be one line per file, and one line per list, at
most.
Sorting criterium is the sysdok reference.
List of messages:
1: the file <file name' must be removed
The mentioned file is not included in the new descripfile
and thus must be removed from the database.
The actual reorganization may be started if there are no
system errors.
2: the file <file name' must not be reorganized
The descripfile is altered and the file should thus be
reorganized, but via fp-adaption reorganization has been
prohibited.
\f
3: the file <file name' must be created, block length:
<blocklgt'
A filehead for the mentioned file of the type cfmaster,
cflist or outvar is to be created. This will be done in the
phase of reorganization. The block length is the blocklength
measured in segments with which the file should be created.
The actual reorganization can be started as far as no error:
messages occur.
4: the file <file name' must be reorganized, block length
<blocklgt'
The file must be reorganized, either because its description
is changed or because it is required via fp-adaption. The
blocklength is the blocklength with which the new file is
created.
The actual reorganization can be started as far as no error
messages occur.
7_._1_._2_ _ _ _ _ _ _ _ _ _ _R_e_s_u_l_t_s_ _o_f_ _A_n_a_l_y_s_i_s_
results of At this point information about the amendments, which have
analysis been found in the descripfile, is printed. The only relevant
amendments are those which can have influenced a reorgani-
zation.
This part will normally be the biggest one, and therefor it
is split up according to the sorting criteria:
1. logical file number
2. record type number
3. list numberand
4. sysdok reference. \f
Thus the messages become structured in 4 levels in this way:
Level:
1: the whole db
messages concerning a whole file at a time
2: per logical file
messages concerning the whole log.file
3: per recordtype in current log.file
messages concerning userfields in this recordtype
4: per list in current record type
messages concerning keyfields belonging to this list
There are special headlines to denote which logical file,
record type and list the following messages concern:
M_
1
P_ 20: logical file number: <lf no' record type number: <no'
0
Denotes that the following results will concern this logical
file and, if given, this record type.
Note: Starting with version 7 of reorgprograms, this message
will be replaced by the following two:
20: logical file number: <lf no'
Denotes that the following results will concern this logical
file.
21: record type number: <rec.type no.'
Denotes that the following results will concern this record
type.
\f
Note: The record type number >-13> is used for the initial
dummy record of a cfmaster file.
22: list number: <list no'
Denotes that the following results concern keyfields belong-
ing to the list mentioned.
In this special case the sysdok-references will be
a) for fields in cf-masterfiles:
the sysdokreference for the list
b) for fields in cf-listfiles:
the sysdokreference of the mother
field corresponding to this chainfield.
L_i_s_t_ _o_f_ _m_e_s_s_a_g_e_s_:
30: no-mref changed to mref
The list description where no-mref (without mother
reference) is changed to mref (with mother reference).
Reorganization of daughter file.
31: file description removed
The file description is only found in the old descripfile.
Possible reorganization.
32: file description changed
One or more amendments have been found in the description of
the file concerned. It could for example be amendment of
min-, norm- or segs, blocklength or if the file type is cf
master an amendment of the key description or segs _pr _buck.
A part of these parameters may be calculated by DATABASE80,
and thus the user can not always see what actually has been
changed.
Reorganization.\f
33: list description removed
The list description only exists in the old descripfile.
Reorganization of mother file and possible daughter file.
34: new file description inserted
New file is described.
Reorganization.
35: new list description inserted
New list is described.
Reorganization of mother file and possible daughter file.
36: key size of mother file changed
The key size of the mother file is changed.
Reorganization of mother- and daughter file.
37: list sequence changed
The sequence in the description of lists in a connection- or
network structure is changed so that the primary list is no
longer the same.
Reorganization.
50: new logical file description inserted
New logical file is described.
51: logical file description removed
The logical file description only exists in the old
descripfile.
Possible reorganization. \f
52: primary list changed
The primary list in the description of a logical file is
changed.
Reorganization.
53: record type description removed
The record type description only exists in the old
descripfile.
Reorganization.
54: new group description inserted
New group is described.
55: group removed from record type
The group is no longer, according to the description, meant
to be included in the record type.
Reorganization.
56: field address changed
The address of the field concerned is changed.
Reorganization.
57: field description changed
One or more amendments have been found in the description of
the field concerned. It may for example be amendment of
field type, dim, repr, or amendment with regard to adm.
status ident.
Reorganization.
58: field description removed
The description of the field is only existing in the old
descripfile. \f
Reorganization if it is not an equivalence field or field
type mref or list.
59: new field description inserted
New field is described.
Reorganization, if it is not an equivalence field or the
field type is mref or list.
7_._1_._3_ _ _ _ _ _ _ _ _ _ _E_r_r_o_r_s_
error found This list contains information about errors; that is,
by reanalyse illegal amendments in the descripfile. You must not go on
with the run before these are corrected and the reanalyse
program has been rerun:
Sorting criterium is the sysdok reference.
L_i_s_t_ _o_f_ _m_e_s_s_a_g_e_s_:
100: -error- a file of type cf list
must not be motherfile
The file mentioned is described as motherfile of a list.
This is not allowed in reorg80.
If you want to reorganize the other files of the database,
then exclude both mother- and daughterfile of a listfile-
to-listfile construction by using the calling parameter:
reanalyse ... noreorg.<m.file no'.<d.file no'
101: -error- daughter file no changed
The daughter file no. of the list description is changed
(stated indirectly by the user via daughter logical file
name). \f
102: -error daughter logical file no changed
The daughter logical file no of the listdescription is
changed.
103: -error- field type changed
Illegal amendment of fieldtype is found. Which means change
from or to aggregate, list or mref.
104: -error- group type changed
The type of the group is changed from an ordinary to a
repeating - or the other way round.
105: -error- field in repeating group moved
A field description is moved f_r_o_m_ a repeating group to
another part of a record type.
106: -error- file type changed
The type of the file is changed.
107: -error- included logical file missing
One or more (but not all) logical files are removed in the
new file description.
108: -error- list reference changed
List reference (list name) in the description of field of
the type dref or mref is changed.
110: -error- mother file no. changed
The mother file no of the list description is changed
(stated indirectly by the user via the mother logical file
name).\f
111: -error- mother logical file no. changed
The mother logical file no of the list description is
changed.
112: -error- logical file type changed
The type of the logical file is changed.
7_._1_._4_ _ _ _ _ _ _ _ _ _ _H_a_r_d_ _e_r_r_o_r_
Most of the hard errors will cause the program to stop at
once, without printing the run journal. These errors are
described in chapter 8, as they may occur in all reorg80
programs.
But there are some few kinds of hard errors which can be
detected by reanalyse in good time. When reanalyse meets one
of them, the run journal will be printed out, however
unsorted, and the last message will be the hard error
message. Then the program will terminate.
L_i_s_t_ _o_f_ _p_o_s_s_i_b_l_e_ _h_a_r_d_ _e_r_r_o_r_ _m_e_s_s_a_g_e_s_:
180: dimension error - more lists than <no of lists',
increase size-parameter
181: dimension error - more recordtypes in one register
than <no of rectypes',
increase size-parameter
See chapter 6.1 concerning the size-parameter.
*system error* ....
Contact the system80 group of RC \f
7_._2_ _ _ _ _ _ _ _ _ _ _ _ _R_e_e_x_t_r_a_c_t_ _R_u_n_ _J_o_u_r_n_a_l_
The run journal from reextract gives an account of the
records read from the different files and written in the
oldformat file.
L_i_s_t_ _o_f_ _m_e_s_s_a_g_e_s_:
200: number of records in the file: <file name' read: <number',
written: <number'
Information about how many records per file are read and how
many that are written in the oldformat file.
L_i_s_t_ _o_f_ _e_r_r_o_r_ _m_e_s_s_a_g_e_s_:
250: -error- record type does not belong to current file
<record type no' <file name'
In the file to be reorganized or deleted, a record is found
with a record type which is described as belonging to
another file. The record concerned is printed b_e_f_o_r_e_ the
error message.
The record is skipped.
251: -error- unknown record type <record type no'<file name'
In the file to be reorganized or deleted, a record is found
with a record type which is not described in the descripfi-
le. The record concerned is printed b_e_f_o_r_e_ the error message.
The record is skipped.
It is up to the user to decide whether reorganization shall
continue after these errors. \f
7_._3_ _ _ _ _ _ _ _ _ _ _ _ _R_e_f_o_r_m_ _R_u_n_ _J_o_u_r_n_a_l_
reform The run journal from reform will be empty unless errors
messages occur.
L_i_s_t_ _o_f_ _m_e_s_s_a_g_e_s_:
350: -error- field type change: <old type'
to <new type' causes overflow,
recordtype: <rec type no'
The new field contents will be the greatest possible number.
The user can check the field changes in the record concerned
(e.g. in the reanalyse run journal) to decide which field
causes the error.
It is up to the user to decide whether reorganization shall
continue after this error.
7_._4_ _ _ _ _ _ _ _ _ _ _ _ _R_e_i_n_s_e_r_t_ _R_u_n_ _J_o_u_r_n_a_l_
The run journal from reinsert gives an account of, how the
files are created and how many records there are inserted
into each of them.
Besides resource problems, there may be some errors with
records which cannot be inserted or connected correctly.
These errors may, originate in some undetected inconsisten-
cies in the old database. The user is advised to have a look
at these records after the reorganization is finished and
possibly repair and reinsert them explicitly.
\f
L_i_s_t_ _o_f_ _m_e_s_s_a_g_e_s_:
400: temporary file created, file no. and name <file no'
<file name'
A file with the number and name stated in the message
created on scope temp by the program.
401: filehead created, file no. and name: <file no'
<file name'
A filehead is created.
402: number of records in the file <fileno',read: <number'
, written: <number'
Information per file about how many records are read from
the new format file and how many that are written in any new
reorganized file.
403: no records in file to be reorganized file no.: <file no'
The file concerned, which was to be reorganized, is empty.
404: total number of records read: <number'
Number of records read in the new format file.
L_i_s_t_ _o_f_ _e_r_r_o_r_ _m_e_s_s_a_g_e_s_:
450: -error- the file can>t be created, file no., result:
<file no'<result'
Probably, resources on the disc on which the file with the
current number is created are lacking.
The run is terminated. \f
451: -error- the file can>t be extended, file no.,resultcf:
<file no'<result'
Probably, resources on the disc on which the file with the
current number is created are lacking.
See RCSL 28-D5, Connected Files System concerning extend _cf.
The run is terminated.
452: -error- record is already existing in file no: <file no'
There exist more records with identical identification after
reform.
456: -error- worknames exceeded, number = <no'
The worknames procedure can only create 999 worknames.
Try to split up reorganization by means of the parameter
noreorg. <file no'
457: -error- workfile cannot be created on: <discname'
It is impossible to create the necessary workfiles on the
disc specified by:
workkit.<discname'
458: -error- mother record not found, m.file, d.file:
<m.filename' <d.filename' list: <list no'
When inserting records in the listfile, a record points to a
motherrecord which cannot be found.
The error message is continued with some information which
serves to identify records and which should be sent to the
System80-group at RC:
- a printout of the mref - or insert record, \f
- a printout of the first part of the current
motherrecord
- the summary following:
total number of not satisfied references:<no'
After this error, the run is not terminated, but the records
mentioned are not inserted into the database, or they are
not connected to one of their chains. But the database will
be consistent.
You should contact the system80-group and discuss what to do
with the records causing this error.\f
8_._ _ _ _ _ _ _ _ _ _ _ _ _ _H_A_R_D_ _E_R_R_O_R_
This section deals with those errors which are so grave that
the run is terminated.
Errors can occur at various points in the run and in diffe-
rent parts of the software. They are divided into the fol-
lowing sections:
8.1 errors in the call parameters
8.2 errors due to lack of resources
8.3 errors from the cf-system
8.4 errors from the sq-system
8.5 run time errors
8_._1_ _ _ _ _ _ _ _ _ _ _ _ _E_r_r_o_r_s_ _i_n_ _t_h_e_ _C_a_l_l_ _P_a_r_a_m_e_t_e_r_s_
Each time a reorg80-program starts running, the fp-para-
meters are printed from the beginning and simultaneously
checked.
If there is an error in a parameter, the sign combination
below is printed immediately after it:
<*'
Then the rest of the parameters in that group follow (see
section 6 call), without being checked. The checking-up is
resumed by the next parameter group.
If a parameter group is terminated too early by the next pa-
rameter group, the error-mark below will appear:
<*<
After the keyword for the next parameter group. This group\f
will be treated in the normal way.
If an error has occured, the print-out of the fp-parameters
is followed by the line:
*** error in fp-parameters: <n' errors detected
where <n' is the number of error-marks.
The run is then terminated with:
end <progname' ...
*** error 1 ....
8_._2_ _ _ _ _ _ _ _ _ _ _ _ _E_r_r_o_r_s_ _d_u_e_ _t_o_ _L_a_c_k_ _o_f_ _R_e_s_o_u_r_c_e_s_
In connection with the opening of various files hard errors
may occur, causing the error-message:
bytes 0 line ....
called from ...
device status ***device status <name'
M_ *
status
P_1
The important lines to notice are the last lines including
<name' and <status' (see system 3 utility Programs, Part
One; sections 6 and 7).
E.g. <status':
process does not exist.
can mean, either that the file does not exist, or that the
job has not specified the resource >area> adequately (see\f
Boss 2 - User>s Manual, section 2).
<status':
end of document
means that the job has not got segments enough for the file
in question (see section 6.5, use of resources).
8_._3_ _ _ _ _ _ _ _ _ _ _ _ _E_r_r_o_r_s_ _f_r_o_m_ _t_h_e_ _C_f_-_S_y_s_t_e_m_
For cf-master files, errors can occur either because the
contents of the file is incorrect:
buflengthcf ***buflengthcf
and
prep _i prep _i
or because the file is not correctly updated:
protect _Cf ***protectcf alarm:
updmark 1
These errors are described in (ref (2), appendix A).
8_._4_ _ _ _ _ _ _ _ _ _ _ _ _E_r_r_o_r_s_ _f_r_o_m_ _t_h_e_ _s_q_-_S_y_s_t_e_m_
These errors have the format:
*** <sq-procedure' on: <filename'
<errortext' <n'
For a more detailed description, see ref (3).\f
The errortexts most likely to occur are:
contents contents <n'
the catalog entry has an illegal contents value. <n' is the
value found. Maybe a wrong filename is used.
Note: Both oldformat and newformat must have contents 21.
create create 4
This means that resources are lacking for the creation of
the work file <filename'. The situation is managed by
extending the resource temp disc in the job line.
s.length s.length 0
Can be due to, either that the oldformat-file has
disappeared, or that it has the wrong contents.
sq-sum sq-sum <n'
The file has been violated.
8_._5_ _ _ _ _ _ _ _ _ _ _ _ _R_u_n_ _T_i_m_e_ _E_r_r_o_r_s_
These errors include field-, index-, case-, and stack-errors
from the running program, i.e. errors of the type:
field 1793 line 107-109
called from line .....
....
Normally this is a program error.
It may also be due to a machine error, so one should repeat
the run as a precautionary measure before sending the error
report in.\f
When a >field> or >index> alarm occurs in running the
reanalyse program, this could mean that the upper limit of
an internal table has been exceeded. This situation can be
avoided by means of the fp-parameter:
size. <increase percentage'
in a rerun (see section 6.1).
Concerning the error:
stack stack
it should be mentioned that it may occur if the resource
>size> has not been specified large enough, or because size
is omitted in the job line so that one is running with
standard size. \f
9_._ _ _ _ _ _ _ _ _ _ _ _ _ _D_A_N_I_S_H_ _A_P_P_E_N_D_I_X_
I dette kapitel beskrives dels de danske nøgleord og stan-
dard filnavne, dels de danske tekster i kørselsjournalerne.
Alt andet end nøgleord og tekster er kun beskrevet i den
engelske del af manualen.
sprog Alle REORG80-programmer accepterer både engelske og danske
nøgleord i kaldene. Derimod fastlægges sproget for standard-
navnene og for teksterne ved en særlig katalogindgang som
bruges af alle værktøjsprogrammer.
Indgangen s_8_0_i_n_s_t_m_o_d_e_ er beskrevet i følgebrevet til værk-
tøjssystembånd, version 3.
9_._1_ _ _ _ _ _ _ _ _ _ _ _ _K_e_y_w_o_r_d_s_ _i_n_ _P_r_o_g_r_a_m_ _C_a_l_l_s_
Her er syntaksen for alle nøgleord og alle standardnavne
remset op.
Beskrivelsen skal derimod søges i den engelske del af
manualen, kap. 6.1-6.4. For hver dansk parameter er den
tilsvarende engelske anført nedenunder.
K_a_l_d_ _a_f_ _r_e_a_n_a_l_y_s_e_
reanalyse
kald nybeskriv
glbeskriv
init
analyseD_D_*
reanalyse fil .<parametre' D_D_1
individ
reotab
felt
orden
size
test
testud \f
Ingen parametergruppe er obligatorisk.
nybeskriv nybeskriv .<nyt db-registernavn'
engelsk: newdescrip
Standard: nybeskriv.beskrivreg
glbeskriv glbeskriv. <gl db-registernavn'
engelsk: olddescrip
Standard: glbeskriv.glbeskriv
M_init ja U_U_U_1D_D_D_
init.
P_nej D_D_D_1U_U_U_
engelsk: init
Standard: init.nej
M_cf U_U_U_1
analyse analyse. outvar
P_all D_D_D_1
engelsk: analyse
Standard: analyse.cf
M_*2
fil fil .<reorgmarkering' .<filnummer'
P_ 11
engelsk: file
<reorgmarkering'\f
reorg
ejreorg
engelsk: reorg, noreorg
Standard: Ændring i db-beskrivelsen, som medfører en ændring
i en fils indhold, bevirker reorganisering af
denne.
M_individ *
individ .<individtypenummer'
P_1
engelsk: record
Standard: Alle i-typer i en fil reorganiseres, hvis filen
reorganiseres.
reotab reotab .<reotab navn'
engelsk: reotab
Standard: reotab.reotab
M_ felt nummer 1
felt .
P_ navn 1
engelsk: field
Standard: felt.nummer
M_ orden *
orden .<kæde nummer'
P_1
engelsk: order
Standard: Listefilindivider indsættes, sorteret efter ident-
felterne.\f
size size .<procent forøgelse'
engelsk: size
Standard: size.0
M_ test ja U_U_U_1
test .
P_nej D_D_D_1
engelsk: test
Standard: test.nej
M_ testud 1
testud. <testud fil navn' .extend
P_ 0
engelsk: testout
Standard: testud.testud
K_a_l_d_ _a_f_ _r_e_e_x_t_r_a_c_t_
M_ reextract reotab*
kald <gl beskriv'= reextract .<parameter'
P_ glformat0
<glbeskriv' <glbeskriv'
<gl db-registernavn'
engelsk: <olddescrip'
reotab reotab .<reorgtabel-navn'
engelsk: reotab
Standard: reotab.reotab \f
glformat glformat .<udfil-navn'
engelsk: oldformat
Standard: glformat.glreorgfil
K_a_l_d_ _a_f_ _r_e_f_o_r_m_
reformkald reotab*
<venstre side' = reform glformat .<parameter'
nyformat0
<venstre side' <venstre side'
<gl dbregisternavn'
<ny dbregisternavn'
engelsk: <left side'
reotab reotab .<reorgtabel-navn'
engelsk: reotab
Standard: reotab.reotab
glformat glformat .<indfil-navn'
engelsk: oldformat
Standard: glformat.glreorgfil
nyformat nyformat .<udfil-navn'
engelsk: newformat
Standard: nyformat.nyreorgfil\f
K_a_l_d_ _a_f_ _r_e_i_n_s_e_r_t_
reinsert kald reotab U_U_U_*
M_m_m_ nyformat
<nybeskriv' = reinsert .<parameter'
P_p_p_ work
workkit D_D_D_0
<nybeskriv'
<nybeskriv' <nyt db-registernavn'
engelsk: newdescrip
reotab reotab .<reorgtabelnavn'
engelsk: reotab
Standard: reotab.reotab
M_ nyformat 1
nyformat .<indfil-navn' .clear
P_ 0
engelsk: newformat
Standard: nyformat. nyreorgfil
M_m_m_ work work
.<discnavn'
P_p_p_workkit workkit
engelsk: work, workkit
Standard: work.disc
\f
9_._2_ _ _ _ _ _ _ _ _ _ _ _ _R_u_n_ _J_o_u_r_n_a_l_
I de følgende afsnit findes en liste over alle meddelelser
der kan komme fra de 4 programmer.
Alle meddelelser er identificeret med et ntydigt nummer.
Teksterne vil ikke blive forklaret, med mindre det er meget
væsentlige og ikke selvforklarende tekster. Ellers kan
forklaringen findes under de tilsvarende engelske
meddelelser.
-fejl- Hvis der kommer en fejludskrift, startende med -fejl-, må
man ikke køre reextract, men rette fejlårsagen og køre
reanalyse om.
*prgfejl* Hvis der kommer en programfejl, startende med *prgfejl* skal
man kontakte værktøjsgruppen på RC.
9_._2_._1_ _ _ _ _ _ _ _ _ _ _R_e_a_n_a_l_y_s_e_ _R_u_n_ _J_o_u_r_n_a_l_
R_e_a_n_a_l_y_s_e_ _K_ø_r_s_e_l_s_j_o_u_r_n_a_l_
reanalyse Kørselsjournalen kan bestå af op til fire dele med følgende
kørsels- overskrifter og i den nævnte rækkefølge:
journal
Oversigt over berørte filer
analyseresultater
fejl
alarm
dannelse Sidste linie i kørselsjournalen er en af følgende:
af reotab
ingen ulovlig ændring fundet, reotab dannes
ingen ændring fundet, reotab dannes ikke
ulovlig ændring fundet, reotab dannes ikke
\f
B_e_m_æ_r_k_:
Kun når reotab er dannet, er det muligt at køre videre.
Oversigt O_v_e_r_s_i_g_t_ _o_v_e_r_ _b_e_r_ø_r_t_e_ _f_i_l_e_r_
over berørte
filer Der udskrives højst n linie per fil og n linie per liste,
udskrifterne sorteres efter sysdokreferencen.
1: filen <filnavn' skal fjernes
2: filen <filnavn' må ikke reorganiseres
3: filen <filnavn' skal oprettes, bloklængde: <bloklgd'
4: filen <filnavn' skal reorganiseres, bloklængde: <bloklgd'
A_n_a_l_y_s_e_r_e_s_u_l_t_a_t_e_r_
analyse Denne del vil normalt omfatte mange meddelelser og den er
resultaterdelt op for at gøre den mere overskuelig. Sorteringskriteria
for meddelelserne er:
1: registernummer
2: individtypenummer
3: kæde nummer og
3: sysdokreference
Meddelelserne bliver struktureret på denne måde:
1: hele databasen
meddelelser vedrørende en hel fil ad gangen\f
2: per register
meddelelse vedrørende hele registret
3: per i-type i det aktuelle register
meddelelse vedrørende brugerfelter i
i-typen
4: per kæde i den aktuelle i-type
meddelelse vedrørende nøglefelter
hørende til kæden.
Specielle overskrifter viser, hvilket register, hvilken
i-type og hvilken kæde de efterfølgende meddelelser drejer
sig om.
M_1
20: registernummer: <regnr' individtype: <no'
P_0
De efterfølgende medd. drejer sig om dette register og evt.
angivne individ type.
B_e_m_æ_r_k_: Fra og med version 7, erstattes denne overskrift af
følgende to:
20: registernummer: <regno'
21: individtype nummer: <itypeno'
22: liste nummer: <liste nr'
De efterfølgende medd. drejer sig om kædefelter til denne
kæde.
\f
I dette tilfælde vil sysdokreferencen være:
a) for felter i cf-masterfilen:
sysdokreferencen for liste-beskrivelsen.
b) for felter i cf-listefiler:
sysdokreferencen for det felt i moderen som svarer til
dette kædefelt.
Ø_v_r_i_g_e_ _m_e_d_d_e_l_e_l_s_e_r_:
30: ejref ændret til mref
31: filbeskr fjernet
32: filbeskr ændret
33: listebeskr fjernet
34: ny filbeskr indsat
35: ny listebeskr indsat
36: nøglelængde for moderfil ændret
37: listerækkefølge ændret
\f
50: ny registerbeskr indsat
51: registerbeskr fjernet
52: primærliste ændret
53: individtypebeskr fjernet
54: ny feltgruppebeskr indsat
55: feltgruppe fjernet fra individtypen
56: feltadresse ændret
57: feltbeskr ændret
58: feltbeskr fjernet
59: ny feltbeskr indsat
F_e_j_l_
fejl Her gives en meddelelse for hver ulovlig ændring.
Sorteringskriterium er sysdokreferencen.\f
100: -fejl- en fil af type cf-list må
ikke være moderfil
Hvis du skal reorganisere andre filer i databasen, skal du
udelukke både moder- og datterfilen i en
listefil-til-listefil konstruktion ved at bruge
fp-parametren:
reanalyse .... ejreorg.<m.filnr'.<d.filnr'
101: -fejl- datterfilnr ændret
102: -fejl- datterregisternr ændret
103: -fejl- felttype ændret
104: -fejl- feltgruppetype ændret
105: -fejl- felt i rep. feltgr. flyttet
106: -fejl- filtype ændret
107: -fejl- indg. register mangler
108: -fejl- listehenvisning ændret
\f
110: -fejl- moderfilnr ændret
111: -fejl- moderregisternr ændret
112: -fejl- registertype ændret
alarm A_l_a_r_m_
Der er hårde fejl som reanalyse kan opdage, men som bevirker
at kørslen ikke kan fortsættes.
Kørselsjournalen bliver så skrevet ud, omend usorteret, og
den sidste meddelelse vil være den der beskriver den hårde
fejl.
Læs iøvrigt kap. 8 om hårde fejl.
180: dimensionsfejl - der er flere kæder end <antal kæder'
sæt size-parameter op
181: dimensionsfejl - der er flere ityper i et register
end <antal ityper'
sæt size-parameter op
*prgfejl* ......
Henvend dig til værktøjsgruppen på RC. \f
9_._2_._2_ _ _ _ _ _ _ _ _ _ _R_e_e_x_t_r_a_c_t_ _R_u_n_ _J_o_u_r_n_a_l_
R_e_e_x_t_r_a_c_t_ _K_ø_r_s_e_l_s_j_o_u_r_n_a_l_
reextract Kørselsjournalen giver en oversigt over antal poster læst
kørsels- fra de forskellige filer og skrevet i filen glformat.
journal
200: antal individer i filen: <filnavn' læst: <ant', skrevet: <ant'
fejlmeddelelser:
250: -fejl- itype tilhører ikke aktuel fil <itypenr'<filnavn'
I en fil, som skal reorganiseres eller slettes, er fundet et
individ med en individtype, som er beskrevet som hørende til
en anden fil. Det pågældende individ skrives ud f_ø_r_
fejludskriften. Individet skippes.
251: -fejl- ukendt individtype <itypenr'<filnavn'
I en fil, som skal reorganiseres eller slettes, er fundet et
individ med en individtype, som ikke er beskrevet i
db-beskrivelsen. Det pågældende individ skrives ud f_ø_r_
fejludskriften. Individet skippes.
Det er op til brugeren at afgøre, om reorganiseringen skal
fortsætte efter disse fejl.
9_._2_._3_ _ _ _ _ _ _ _ _ _ _R_e_f_o_r_m_ _R_u_n_ _J_o_u_r_n_a_l_
R_e_f_o_r_m_ _k_ø_r_s_e_l_s_j_o_u_r_n_a_l_
reform Kørselsjournalen vil være tom med mindre der er fejl.
kørsels-
journal 350: -fejl- typeændring: <gl type' til <ny type'
giver overflow,
individtype: <itypenr'\f
Det nye feltindhold vil være det størst mulige tal. Brugeren
kan checke feltændringerne i den pågældende individtype (f.x. i
reanalyse kørselsjournalen) for at se hvilket felt der forårsager
fejlen.
Det er op til brugeren at afgøre om reorganiseringen skal
fortsætte.
9_._2_._4_ _ _ _ _ _ _ _ _ _ _R_e_i_n_s_e_r_t_ _R_u_n_ _J_o_u_r_n_a_l_
R_e_i_n_s_e_r_t_ _K_ø_r_s_e_l_s_j_o_u_r_n_a_l_
reinsert Kørselsjournalen beskriver forløbet af reinsert.
kørsels-
journal Mulige fejlårsager er resource problemer eller poster, der
ikke kan indsættes eller connectes korrekt. Dette kan
skyldes uopdagede konsistensfejl i den gamle database.
Det tilrådes at brugeren efter kørslen kigger på disse
poster og afgør om de evt. skal rettes og genindsættes
explicit.
400: temporær fil oprettet, filnr og -navn:
<filnr'<filnavn'
401: filhoved oprettet, filnr og -navn: <filnr'<filnavn'
402: antal individer i filen: <filnr' læst: <ant'
skrevet: <ant'
403: ingen individer i fil, som reorganiseres, filnr: <filnr'
404: samlet antal individer læst: <antal'\f
450: -fejl- filen kan ikke oprettes, filnr, resultat
451: -fejl- filen kan ikke udvides, filnr, resultat
Se evt. ref. 2, angående extend-cf.
452: -fejl- individ findes i forvejen i filnr: <filnr'
456: -fejl- for mange arbejdsfiler, filnr: <nr'
Der kan kun dannes 999 arbejdsnavne. Split reorganisationen
op v.h.a. parametre noreorg .<filnumre'
457: -fejl- arbejdsfil kan ikke oprettes på <discnavn'
458: -fejl- moderpost ukendt, moderfil, datterfil:
<m-filnavn'<d-filnavn', kæde: <kædenr'
En listefilpost peger på en ukendt moderpost.
Fejlmeddelelsen efterfølges af en udskrift som identificerer
posterne og som skal sendes til system80 gruppen på RC.
- en udskrift af mref eller insertposten,
- en udskrift af starten af det aktuelle moderfilindivid,
- følgende afslutning:
total number of not satisfied references: <antal'
Efter denne fejl fortsætter kørslen, men de omtalte listefil-
poster er enten ikke indsat eller ikke connected til en af
mødrene. Den reorganiserede database er dog konsistent og
kan bruges. Brugeren skal kontakte system80-gruppen på RC og
afklare hvordan posterne skal behandles. \f
1_0_._ _ _ _ _ _ _ _ _ _ _ _ _I_N_D_E_X_
adaption 7
analyse 19
change of array length 11
change of cf-list files 14
change of field name 14
change of field number 14
change of field type 11
change of file number 14
change of group number 14
change of ident-fields 13
change of keyfields 12
change of list sequence 12
change of logical fileno 14
change of primary list 12
change of record typenumber 14
change of simple field to array field 12
change of text field length 12
change of the number of decimals 12
corresponding logical files 16
creation of reotab 36
Danish appendix 55
division of reorganization 4
errors 35, 42
errors due to lack of Resources 51
errors found by reanalyse 42
errors from the Cf-System 52
errors from the Sq-System 52
errors in Call Parameters 50
examples of program call 30
exclusion of files 7 \f
f-bits, moving of 11
field, insertion of 10
field name, change of 14
field number, change of 14
field, removal of 10
field type, change of 11
file for future amendments 16
filehead creation 9, 31
file, insertion of 9
file numbers, change of 14
file, removal of 10
fp-adaption 7, 17
group, insertion of 9
group, removal of 10
groups, repeating 14
hard error 44, 50
initialization 2
insertion of a field 10
insertion of a group 9
insertion of a file 9
insertion of a list 9
insertion of a logical file 9
insertion of a record type 9
insertlist 5
limitations 14
list sequence, change of 12
list-to-listfile 8
moving of a field 10
moving of f-bits 11
negative keyfields 14
new format 17
\f
oldformat 17
operating guide 14
phase of analysis 4
phase of reorganization 4
programcall, examples 30
purpose 2
reanalyse 4
reanalyse call 18
reanalyse, examples of 30, 31
reanalyse messages 35
reanalyse run journal 35
record order 6
record type, insertion of 9
record type number, change of 14
record type, removal of 10
reextract 4
reextract call 23
reextract, example of 31, 34
reextract run journal 45
reform 4
reform call 24
reform, example of 32, 34
reform run journal 46
reinsert 5
reinsert call 26
reinsert, examples of 33, 34
reinsert run journal 46
reinsertion of cf-listfiles 5
removal of a field 10
removal of a file 10
removal of a group 10
removal of a list 12
removal of a logical file 10,14
removal of a record type 10
REORG80 programs 4 \f
repeating groups 14
requirements 2
result of analysis 37
run journal 35
run time errors 53
specifications 9
survey of affected files 36
sysdok references 37
system error 35
tidy up a file 3, 7, 9, 31
use of resources 27
use of the system 2
\f
Timeforbrug:
800203 2 timer BE
\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. PUT PROCEDURES ......................................... 2
2.1 Putnumber ......................................... 2
2.2 Putfixed .......................................... 5
2.3 Putchar ........................................... 6
2.4 Puttext ........................................... 7
3. GET PROCEDURES ......................................... 10
3.1 Getnumber ......................................... 10
3.2 Getfixed .......................................... 16
3.3 Getchar ........................................... 17
3.4 Gettext ........................................... 17
4. TEXT COMPARISON ........................................ 21
4.1 Comparetext ....................................... 21
5. ERROR HANDLING ......................................... 23
5.1 Putgeterror ....................................... 23
5.2 Alarm Messages .................................... 24
6. PROGRAMMING EXAMPLES ................................... 25
6.1 Concatenating of Text Strings ..................... 25
6.2 Extraction of a Substring ......................... 25
6.3 A Text Compared with a String ..................... 26
6.4 Conversion of String Format ....................... 26
6.5 Conversion of Characters in a String .............. 26
6.6 Reading of Punched Cards .......................... 27
A_P_P_E_N_D_I_X_:
A. REFERENCES ............................................. 31
\f
ii
\f
1_._ _ _ _ _ _ _ _ _I_N_T_R_O_D_U_C_T_I_O_N_ 1.
This manual describes a set of procedures intended for handling
of text strings in ALGOL programs.
Text strings may be packed into arrays of type boolean, long or
real by means of the procedures described in chapter 2.
Chapter 3 describes some procedures for extracting a substring, a
single character, or a numeric value from a textarray.
Chapter 4 describes how to compare two text strings.
Chapter 5 contains a general description of error handling and a
list of alarm messages.
Finally, chapter 6 shows some programming examples.
The text handling procedures are designed for use in ALGOL pro-
grams, but they may also be used directly in a FORTRAN program if
no string parameters are specified. If an external ALGOL pro-
cedure using the text procedures is called from a FORTRAN pro-
gram, long text string references must be avoided.
\f
F_ 2_._ _ _ _ _ _ _ _ _P_U_T_ _P_R_O_C_E_D_U_R_E_S_ 2.
The put procedures putnumber, putfixed, putchar and puttext are
intended for generating a text string in an array in the same way
as write would output the characters through a zone.
The text may be created as a sequence of 12-bits characters in a
boolean array, or as an ordinary string of 8-bits characters in a
long or real array.
When the text is generated in a boolean array, one character is
stored in each halfword. The character is placed in the 8 least
significant bits, and the remaining bits are set equal to zero.
The characters generated by the put procedures may use the full
ISO-low and ISO-high alphabet, i.e. 0 <= char <= 255.
Neither replacechar nor outtable has any influence on the
generating of characters by the put procedures, but a character
conversion table may be stated as a parameter in the procedure
call, giving the same possibilities as a call of outtable before
write.
However, the possibility of using different characters for
leading space, space in number, and ending space by means of
replacechar does not exist in putnumber/putfixed.
2_._1_ _ _ _ _ _ _ _P_u_t_n_u_m_b_e_r_ 2.1
This integer procedure converts a numeric value into a text
string in an array, in the same way as a numeric parameter is
converted by write.
M_m_m_ 1 1
C_a_l_l_: put _number (dest, pos, conv, layout, num)
P_p_p_ 0 0
\f
put _number (return value, integer).
Shows the result of the conversion:
>=0: no. of characters inserted into dest,
=-1: conversion stopped because dest is full,
=-3: layout exceeded, see below.
dest (call and return value, array of type boolean,
long, or real).
The converted text string is inserted into this
array, see below.
pos (call and return value, integer).
As call value pos denotes the character position
into which the first character is to be inser-
ted. Pos = 1 means first character in dest(1),
so pos may be negative if lower limit of dest is
less than 1.
The return value of pos denotes the character
position after the last inserted character, so
that pos is ready for a following call of a
put-procedure.
The contents of dest outside this character
position interval are unchanged.
conv (call value, one-dimensional integer array, op-
tional parameter). If this parameter is speci-
fied, it is supposed to contain a character
conversion table, by which all characters are
converted before insertion into dest, see below.
layout (call value, string, optional parameter). An
ordinary ALGOL layout with the same format and
meaning as in write. If this parameter is
omitted, the same standard layout is used as in
write (<< _d> or << _-dd.dddd>).
\f
num (call value, integer, long or real). The value
of this parameter is converted into character
form according to the layout, in the same way as
by write.
F_u_n_c_t_i_o_n_: The characters generated by put _number are inserted
into dest depending on the type of this array. For an
array of more than one dimension the lexicografical
ordering is used.
If dest is a boolean array, the characters are
generated as so-called 12-bits characters, with one
character per array element. The characters are stored
in the 8 least significant bits, whereas the remaining
bits are set to zero. So, all character values in the
range 0<= char <= 255 may be used.
In an array of type long or real, and in a zone record,
the characters are stored as 8-bits characters with 3
characters per word (24 bits). Here, too, the full
character range 0-255 is allowed.
If dest is a zone, a zonerecord must exist, i.e.
recordlength > 0.
C_h_a_r_a_c_t_e_r_ _c_o_n_v_e_r_s_i_o_n_:
In all put procedures character conversion is totally
independent of a possible call of outtable and/or
replacechar, and the value of outindex is insignificant
as well. If no conv parameter has been specified, the
characters are never converted.
If a conv parameter has been specified, each character
is converted before insertion into dest, according to
the following algorithm:
new _char: = conv (char) extract 12;
\f
If new _char > 255 or char is not a legal index in conv,
no character is generated.
L_a_y_o_u_t_: A possible layout is specified and used in the same way
as in write, with the exception of a layout containing
"ending blanks". If the number value exceeds the range
of such a layout, write will print a * as error symbol
in the last position. Put _number will instead insert as
many characters as possible within the layout, and then
return with the procedure value -3.
E_r_r_o_r_s_: Too many parameters, or illegal parameter types will
cause a run-time alarm (param <paramno>).
A call value of pos outside the index range of dest
will cause a run-time alarm (charpos <pos>).
If dest is filled up before the number conversion is
finished, the character conversion stops, and the
procedure returns with the procedure value -1. In this
case the return value of pos denotes the first
non-existent character position in dest. So a possible
new call of a put procedure (with pos unchanged) will
give the charpos alarm above.
A negative procedure value may be changed into a
run-time alarm by means of the standard variable
'put _get _error'.
2_._2_ _ _ _ _ _ _ _P_u_t_f_i_x_e_d_
This integer procedure converts an integer or long value into a
text string in an array, giving the possibility of inserting a
decimal point in a fixed position (like writeint).
\f
M_m_m_ 1 1
C_a_l_l_: put _fixed (dest, pos, conv, layout, num)
P_p_p_ 0 0
put _fixed
dest
pos see put _number.
conv
layout
num (call value, integer or long). The value of this
parameter is converted into character form
according to layout in the same way as writeint.
I.e. if the layout contains a decimal point, a
point is inserted into the generated textstring
in the corresponding position.
E_r_r_o_r_s_: As put _number.
2_._3_ _ _ _ _ _ _ _P_u_t_c_h_a_r_ 2.3
This integer procedure inserts a single character into one or
more positions of a text string in an array.
M_m_m_ 1 1
C_a_l_l_: put _char (dest, pos, conv, char ,rep )
P_p_p_ 0 0
put _char (return value, integer).
Denotes the result:
>=0: no. of characters inserted into dest
=-1: too few characters inserted, dest is full.
dest
pos see put _number
conv
\f
char (call value, boolean or integer).
The rightmost 8 bits of char are considered a
character, which may be converted by a possible
conv parameter. The resulting character is
inserted into dest in the position denoted by pos
(and possibly following positions, see rep). The
contents of the remaining bits of char are
insignificant.
rep (call value, integer, optional parameter). This
parameter specifies how many times char is going
to be inserted into dest. If the parameter is
omitted, char is inserted just once. If rep <= 0,
nothing is inserted.
E_r_r_o_r_s_: As put _number.
2_._4_ _ _ _ _ _ _ _P_u_t_t_e_x_t_ 2.4
This integer procedure moves a text string into an array from a
string parameter or from another array, possibly after conversion
of each single character.
M_m_m_ 1 1
C_a_l_l_: put _text (dest, pos, conv, text ,length )
P_p_p_ 0 0
put _text (return value, integer).
Denotes the result:
>=0: no. of characters inserted into dest,
=-1: transfer stopped, because dest is full,
=-2: transfer stopped, because text is exhausted.
dest
post see put _number
conv
\f
text (call value, string or array of type boolean,
long, or real).
The characters are transferred one by one from
text into dest, to be stored from character
position pos and on (after possible conversion).
length (call value, integer, optional parameter). This
parameter controls the transfer as described
below.
F_u_n_c_t_i_o_n_: The contents of text are transferred one character at a
time into dest.
If text is an array of more than one dimension, the
lexicographical ordering is used. The first character
transferred is the first character of text(1). If text
is a zone, a zone record must exist, i.e. recordlength
> 0.
The array is supposed to contain a simple string of
characters. A long text string reference (as described
in ref. 1) cannot occur, as it would be interpreted
as characters.
When text is a boolean array, the characters are taken
one from each array element, using only the 8 least
significant bits.
From arrays of type long or real the characters are
taken as 8-bits characters with 3 characters per word
(24 bits).
If the text parameter is of type string, this must be a
simple string, i.e. a string constant (<:...:>), or a
simple variable referring to a string constant (a:=
long <:...:>). From a string expression like "string
ra(increase(i))" only the characters in the first array
element would be transferred.
\f
L_e_n_g_t_h_: The length parameter controls the transfer in the
following way:
If length is not specified or equals zero, characters
are transferred until either a null-character is read
from text or text is exhausted. The null-character is
not transferred.
If length > 0, e_x_a_c_t_l_y_ length characters are
transferred regardless of possible null-characters. So
the procedure works as a sort of "text-tofrom".
However, this is senseless when text is of type string,
in which case length > 0 is handled as length < 0.
When length < 0, a_t_ _m_o_s_t_ abs length characters are
transferred, the transfer stopping if a null-character
is read from text.
The character transfer may stop prematurely if text is
exhausted, or dest becomes full. In this case puttext
returns a negative procedure value.
See also the description of procedure gettext, which
transfers a text controlled by character classes
instead of by null-characters.
E_r_r_o_r_s_: As put _number.
Furthermore, the run-time alarm "index 1" will occur,
if the text parameter is an array of which the element
number one does not exist.
And the run-time alarm "string 0" occurs, if the text
parameter is of type string, but contains an impossible
long text string reference. This alarm will also occur
when a legal long text string reference is used from a
FORTRAN program (because of the differences between the
ALGOL and FORTRAN running systems).
\f
F_ 3_._ _ _ _ _ _ _ _ _G_E_T_ _P_R_O_C_E_D_U_R_E_S_ 3.
The get procedures getnumber, getfixed, getchar, and gettext are
intended for reading from a text string in an array, instead of
reading through a zone.
The reading may be controlled by character classes in the same
way as in the ordinary read procedures (read, readstring), or a
fixed number of characters may be read by specifying a "layin"
for number reading or a length for text reading.
A possible call of intable has no influence on the get
procedures, but a character conversion table may be specified
directly as an optional parameter in the procedure call.
The array from which the characters are read may contain 12-bits
characters in a boolean array, or 8-bits characters in an array
of type long or real.
If a proper conv table is specified, characters within the full
ISO-low and ISO-high alphabet may be read, i.e. 0<= char <= 255.
3_._1_ _ _ _ _ _ _ _G_e_t_n_u_m_b_e_r_ 3.1
This integer procedure converts a (part of a) text string in an
array into a numeric value.
M_m_m_ 1 1
C_a_l_l_: get _number (source, pos, conv, layin, num)
P_p_p_ 0 0
get _number (return value, integer). Denotes the result
of the conversion:
>=0: char _class shift 12 + char _value extract 12
of the last read character.
=-4: conversion stopped because source exhausted.
=-6: syntax error or number to great.
\f
source (call value, array of type boolean, long, or
real). This array is supposed to contain the
string of characters to be converted, see
below.
pos (call and return value, integer).
As call value pos denotes the character position
from which the first character is to be read.
Pos=1 means first character in source(1), so pos
may be negative if lower limit of source is less
than 1.
The return value of pos denotes the character
position after the last read character, so that
pos is ready for a following call of a get
procedure.
conv (call value, one-dimensional integer array,
optional parameter). If this parameter is
specified, it is supposed to contain a character
class table, see below. If the parameter is
omitted, the ISO standard character classes are
used.
layin (call value, string, optional parameter).
This parameter specifies, how the contents of
source should be interpreted, see below.
num (return value, integer, long, or real).
The number read from source is returned in this
parameter, which however remains unchanged, if
the result value of getnumber is negative.
F_u_n_c_t_i_o_n_: Characters are read from source depending on the array
type, and converted into a numeric value which is
returned in the parameter num. If source is a zone, a
zone record must exist, i.e. record length > 0. For an
array of more than one dimension the lexicographical
ordering is used.
\f
From a boolean array characters are read as 12-bits
characters, one from each array element. Only the 8
least significant bits are used:
char:= source(index) extract 8
From an array of type long or real characters are read
as 8-bits characters, three characters from each word.
A long text string reference cannot occur, as it would
be interpreted as characters.
All character values in the interval 0 <= char <= 255
are allowed, but if the ISO standard character classes
are used, character values > 127 will give an index
alarm, as will a character value which is not a legal
index in a specified conv table.
C_h_a_r_a_c_t_e_r_ _c_o_n_v_e_r_s_i_o_n_:
A possible call of intable has no influence on the
character conversion, nor has the value of tableindex.
If a conv parameter is specified, the array must
contain a character class table, each element composed
of a character class and a character value:
conv(char) = class shift 12 + value extract 12
Where class is an integer 0 <= class <= 4095, and value
is an integer -2048 <= value <= 2047. (See the
description of intable, ref. 2).
As character class = 1 (shift character) is useless
when tableindex is not used, such characters are
considered blind (like class = 0).
A possible EM character has no special meaning in the
get procedures, but is handled like any other
terminator.
\f
L_a_y_i_n_: The layin parameter is an ALGOL layout, allowing only a
part of the possibilities given in write. A layin is
composed of
<first letter> <d's> <dec.point> <d's> <fill>
<fill>: If <fill> is non-empty, the layin is called an "o_p_e_n_
l_a_y_i_n_", and the reading is controlled exclusively by
character classes (like procedure read). In this case
the number of d's in the layin is insignificant.
When <fill> is empty, the layin is a "c_l_o_s_e_d_ _l_a_y_i_n_",
which means that exactly so many characters are read as
indicated by the total number of positions in the
layin. This may be useful for reading position
controlled data, such as punched cards. The data field
may contain leading and/or ending delimiters (character
class >= 6), whereas any delimiter between digits is
considered a data error.
Blind characters (class <= 1) are skipped, and they are
not counted.
<first letter>: The first letter of the layin must be either b or
d.
When <first letter> is b_, the field may be empty, in
which case the num parameter remains unchanged. If the
layin is open, reading stops immediately after the
first delimiter. If the layin is closed, an empty field
may contain all delimiters.
When <first letter> is d_, a closed layin requires the
field to contain at least one digit. If the layin is
open, leading delimiters are skipped like in procedure
read.
\f
<dec.point> A possible decimal part in the layin is allowed, but
its only significance in putnumber is to tell the field
length when the layin is a closed one.
If no layin parameter is specified, the open layin
<<d _> is used.
For illustration of the effect of various layins, see
the example below.
N_u_m_b_e_r_ _s_y_n_t_a_x_:
The number is read according to the syntax of ALGOL
numbers (see ref. 1), i.e. a number may contain a
sign, decimals and/or an exponent part, which are not
specified in the layin.
E_x_a_m_p_l_e_: Suppose long array la contains the following string
from index 1 and on:
ab1234x567
The statement
get _number (la, 1, string layin, num)
will read the following values for various layins:
Open layins: last char.
<<b > num unchanged a
<<d > num:= 1234 x
<<ddd.dddd > num:= 1234 x
Closed layins:
<<b> num unchanged a
<<bd> - - b
<<bdd> num:= 1 1
<<d> syntax error a
<<dddd> num:= 12 2
<<ddd.dd> num:= 1234 4
<<ddddddd> num:= 1234 x
<<dddddddd> syntax error 5
\f
E_r_r_o_r_s_: Too many parameters, or illegal parameter types will
cause the run-time alarm "param <paramno>".
A call value of pos outside the index range of source
will cause the run-time alarm "charpos <pos>".
A layin containing illegal layout components will cause
the run-time alarm "layin 0".
If a character value is read which is not a legal index
in a specified conv table (or in the standard ISO
table), the run-time alarm "index <char value>" occurs.
If source is exhausted before the number reading is
finished, the procedure returns with the procedure
value -4, and the num parameter remains unchanged. In
this case the return value of pos denotes the first
non-existent character position in source. So a
possible new call of a get procedure (with pos
unchanged) will give the charpos alarm above.
When a syntax error is found in source, or when the
number is too great for the actual num parameter, the
return value of the procedure is -6 and the num
parameter remains unchanged. If the layin was a closed
one, the specified number of characters have always
been read. Otherwise reading continues up to and
including the first delimiter.
A negative procedure value may be changed into a
run-time alarm by means of the standard variable
'put _get _error'.
\f
3_._2_ _ _ _ _ _ _ _G_e_t_f_i_x_e_d_ 3.2
This integer procedure converts a (part of a) text string in an
array into a numeric value to be stored in an integer or long
variable. A decimal fraction may be scaled i.e. stored as an
integral number after multiplication by a power of ten.
M_m_m_ 1 1
C_a_l_l_: get _fixed (source, pos, conv, layin, num)
P_p_p_ 0 0
get _fixed
source see get _number
pos
conv
layin as get _number, see also below.
num (return value, integer or long).
The number read from source is returned in this
parameter, which however remains unchanged when
the result value of get _fixed is negative.
F_u_n_c_t_i_o_n_: The procedure works like get _number except for handling
of decimals in the layin.
In get _fixed the decimals in the layin are significant
in an open as well as in a closed layin. If the layin
contains "dec" decimals, the number read from source is
multiplied by 10**dec. So the values
12, 12.3, 12.345, -12.345
will, when read by the layin <<dd.dd _> be stored as
1200, 1230, 1235, -1235
E_r_r_o_r_s_: As get _number.
\f
3_._3_ _ _ _ _ _ _ _G_e_t_c_h_a_r_ 3.3
This integer procedure fetches one single character from a text
string in an array.
M_m_m_ 1
C_a_l_l_: get _char (source, pos, conv, char)
P_p_p_ 0
get _char (return value, integer). Contains char _class
shift 12 + char _value extract 12 after possible
conversion of the character.
source
pos see get _number
conv
char (return value, integer). The character value
(after possible conversion) of the character in
source denoted by pos. Even a blind character
(class <= 1) will be returned by getchar.
E_r_r_o_r_s_: Only the run-time alarms "charpos <pos>" and "index
<charvalue>" (as described by get _number) can occur.
3_._4_ _ _ _ _ _ _ _G_e_t_t_e_x_t_ 3.4
This long procedure moves a text string from one array to
another, possibly with conversion of each character.
M_m_m_ 1 1
C_a_l_l_: get _text (source, pos, conv, text , length )
P_p_p_ 0 0
\f
get _text (return value, long). Denotes the result of
the transfer:
>= 0: the value is a combination of two
integers:
no _of _chars shift 24 + last _char.
no _of _chars is the number of characters
packed into the new textstring. last _char
is
class shift 12 + value extract 12
(after possible conversion) of the last
character read from source.
= -4: Transfer stopped, because source is
exhausted.
= -5: Transfer stopped, because text is full.
source
pos see get _number
conv
text (call value, array of type boolean, long, or
real). The text string is transferred from
source into this array, after possible
conversion of each character.
length (call value, integer, optional parameter).
Denotes how many characters are to be
transferred, see below.
F_u_n_c_t_i_o_n_: The contents of source, from character position pos and
on, are transferred one character at a time into text,
where they are stored from index 1 and on. If text is a
zone, a zonerecord must exist, i.e. recordlength > 0.
If text is an array of more than one dimension, the
lexicographical ordering is used.
\f
The characters are stored in text according to the type
of this array. If text is a boolean array, the
characters are inserted as 12-bits characters, one in
each array element. The characters are stored in the 8
least significant bits, whereas the remaining bits are
set to zero.
In an array of type long or real the characters are
stored as 8-bits characters with 3 characters per word
(24 bits).
C_h_a_r_a_c_t_e_r_ _c_o_n_v_e_r_s_i_o_n_:
If a conv parameter is specified, each character read
from source will be converted. The character value is
found by
new _char: = conv (char) extract 8.
(See also getnumber).
L_e_n_g_t_h_: The length parameter controls the transfer in the
following way:
If length is not specified or equals zero, characters
are transferred in the same way as by readstring:
Leading delimiters (class >= 7) are skipped, and the
following characters are packed into text until a final
d_e_l_i_m_i_t_e_r_ is recognized. This character has been read,
but is not stored in text. All blind characters (class
<= 1) are skipped.
If length > 0, e_x_a_c_t_l_y_ length characters are
transferred regardless of the character class. Even
blind characters are transferred, so the procedure
works as a sort of "text-tofrom". This is also suitable
for extracting a substring of a text.
\f
If length < 0, a_t_ _m_o_s_t_ abs length characters are
transferred, the transfer stopping if a t_e_r_m_i_n_a_t_o_r_
(class >=8) is read from text. A possible terminator
has been read, but is not packed into text. Blind
characters are neither transferred nor counted.
After the last character a NULL-character is inserted
in text. If text contains 8-bits characters the
remaining part of the last word (of 3 characters) is
set equal to zero. The return value no _of _chars in the
procedure value does not count this NULL-character.
The character transfer may stop prematurely if source
is exhausted or text becomes full. In this case gettext
returns a negative procedure value, and no final
NULL-character is inserted in text.
E_r_r_o_r_s_: As getnumber.
Besides the run-time alarm "index 1" will occur, if the
text parameter is an array of which the element number
one does not exist.
\f
F_ 4_._ _ _ _ _ _ _ _ _T_E_X_T_ _C_O_M_P_A_R_I_S_O_N_ 4.
Two text strings may be compared by the procedure compare _text,
when they are both stored as 8-bits characters in long arrays,
starting in first character of a word. These start conditions are
easily obtained by means of gettext.
4_._1_ _ _ _ _ _ _ _C_o_m_p_a_r_e_t_e_x_t_ 4.1
This integer procedure compares two text strings.
C_a_l_l_: compare _text (text1, text2, chars)
compare _text (return value, integer). The result of the
comparison:
= 0: text1 = text2
= -1: text1 < text2
= +1: text1 > text2
text1, text2 (call values, long arrays). Each of the
two arrays is supposed to contain a string of
8-bits characters starting at the first
character in the element with index 1.
chars (call and return value, integer). The call value
denotes the maximum number of characters to be
compared. The call value may be <=0 meaning all
characters. The return value of chars is the
field address of the word at which the
comparison stopped.
\f
F_u_n_c_t_i_o_n_: The contents of text1 and text2 are compared word by
word (24 bits). The comparison involves at most 'chars'
characters (stored in (chars+2)//3 words), but the
comparison stops as soon as a difference between the
strings has been encountered, or the last character of
a word contains a null-character, or when the upper
index of one of the arrays is reached.
E_x_a_m_p_l_e_: If the long arrays la1 and la2 contains the following
strings
la1 = <:abcdefghij:>
la2 = <:abcd:>
then the comparison
compare _text (la1, la2, 4)
will give the result 0 (equal),
but the comparison
compare _text (la1, la2, 0)
will give the result 1 (la1 > la2).
\f
F_ 5_._ _ _ _ _ _ _ _ _E_R_R_O_R_ _H_A_N_D_L_I_N_G_ 5.
Parameter errors in a call of a put or get procedure (e.g.
illegal parameter type) will always cause a run-time alarm.
An error in the contents of a text parameter is handled as a data
error, causing a negative return value of the procedure. This may
however be changed into a run-time alarm by means of the standard
variable 'put _get _error'.
5_._1_ _ _ _ _ _ _ _P_u_t_g_e_t_e_r_r_o_r_ 5.1
This integer variable controls the handling of data errors by the
put and get procedures.
Each possible negative procedure value corresponds with a bit in
put _get _error. If this bit has the value 1 the procedure will
provoke a run-time alarm instead of returning, in case the cor-
responding data error occurs. The alarm may be trapped, so that
data errors can be handled centrally in the program.
The possible data errors and the corresponding bits in
put _get _error are listed below:
proc putgeterror alarm explanation used by
v_a_l_ _ _b_i_t_ _ _ _ _ _ _ _ _ _m_e_s_s_a_g_e_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _p_r_o_c_e_d_u_r_e_ _ _ _ _ _ _ _ _
-1 1 shift 1 put full -1 dest array full all put procedures
-2 1 shift 2 put exh. -2 text array exhausted puttext
-3 1 shift 3 p.layout -3 layout exceeded putnumber/putfixed
-4 1 shift 4 get exh. -4 source array exhausted all get procedures
-5 1 shift 5 get full -5 text array full gettext
-6 1 shift 6 getvalue -6 syntax or num too great getnumber/getfixed
The default value of put _get _error is 0, i.e. no run-time alarms
on data error.
\f
5_._2_ _ _ _ _ _ _ _A_l_a_r_m_ _M_e_s_s_a_g_e_s_ 5.2
The following parameter alarm messages may occur from the put and
get procedures. The alarm address is in any case the name "text
procs"
called from
a_l_a_r_m_ _t_e_x_t_ _ _ _e_x_p_l_a_n_a_t_i_o_n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _p_r_o_c_e_d_u_r_e_ _ _
charpos <n> The characterposition specified by all put
pos (2nd parameter) is outside dest/ and get
source. <n> shows the position. procedures
index 1 The array element with index 1 of puttext or
the text parameter (3rd or 4th gettext
parameter) does not exist.
index <n> A character value outside the used all get
alphabet is read from source. <n> procedures
is the character value.
layin 0 A layin containing illegal layout getnumber
components (sign, first letter f or
or z, exponent part, leading spaces, getfixed
or space between d's) is specified.
string 0 The string parameter contains an im- puttext
possible long text string reference.
Or a long text string parameter is
used in an external ALGOL procedure,
which is called from a FORTRAN pro-
gram.
\f
F_ 6_._ _ _ _ _ _ _ _ _P_R_O_G_R_A_M_M_I_N_G_ _E_X_A_M_P_L_E_S_ 6.
This section shows some examples of use of the put and get
procedures.
6_._1_ _ _ _ _ _ _ _C_o_n_c_a_t_e_n_a_t_i_o_n_ _o_f_ _T_e_x_t_ _S_t_r_i_n_g_s_ 6.1
A number of different texts may be concatenated into one text
string by means of the put procedures. The following program part
forms a text string consisting of a string, a number and some
single characters.
begin
integer p, num; long array la (1:10);
...
p:= 1;
puttext (la, p, <:this is a text:>);
putchar (la, p, '-',3);
putnumber (la, p, <<d>, num);
putchar (la, p, 0);
...
write (out, la);
If num = 123 the write statement will produce the following
output:
this is a text---123
6_._2_ _ _ _ _ _ _ _E_x_t_r_a_c_t_i_o_n_ _o_f_ _a_ _S_u_b_s_t_r_i_n_g_ 6.2
A part of a text string may be extracted by means of gettext:
if gettext (la, 5, subla, 4) < 0 then error;
This call will extract a substring consisting of 4 characters
from position 5, 6, 7, and 8 of la.
\f
6_._3_ _ _ _ _ _ _ _A_ _T_e_x_t_ _C_o_m_p_a_r_e_d_ _w_i_t_h_ _a_ _S_t_r_i_n_g_ 6.3
As the procedure comparetext requires array parameters the
contents of a text array can be compared with a string constant
in this way:
puttext (compare, 1, <:...:>);
if comparetext (la, compare, 0) = 0 then
begin <*equal*>
...
end;
6_._4_ _ _ _ _ _ _ _C_o_n_v_e_r_s_i_o_n_ _o_f_ _S_t_r_i_n_g_ _F_o_r_m_a_t_ 6.4
A text string may be converted from 8-bits characters to 12-bits
characters (and vice versa) by means of puttext or gettext:
length:= ...; <*no. of chars, > 0 *>
puttext (ba, 1, la, length); <*from 8 to 12*>
gettext (la, 1, ba, length); <*from 8 to 12*>
and
puttext (la, 1, ba, length); <*from 12 to 8*>
gettext (ba, 1, la, length); <*from 12 to 8*>
Whether you should use puttext or gettext depends on the wanted
startposition in from-array or to-array, as a startposition can
be specified only for the first parameter.
6_._5_ _ _ _ _ _ _ _C_o_n_v_e_r_s_i_o_n_ _o_f_ _C_h_a_r_a_c_t_e_r_s_ _i_n_ _a_ _S_t_r_i_n_g_ 6.5
The character values in a text string may be converted by means
of puttext or gettext using a conversion table:
isotable (conv);
<*change the wanted characters in conv*>
...
length:= ...; <*no. of chars > 0 *>
puttext (new _la, 1, conv, la, length);
or
gettext (la, 1, conv, new _la, length);
\f
(See section 6.4 concerning whether to use puttext or gettext).
6_._6_ _ _ _ _ _ _ _R_e_a_d_i_n_g_ _o_f_ _P_u_n_c_h_e_d_ _C_a_r_d_s_ 6.6
The get procedures are particularly suited for reading of punched
card images. Each card consisting of 81 characters (80 characters
followed by a NL character) may be read by a call of inrec6 and
subsequently interpreted by means of the get procedures.
Suppose some of the cards contain the following information:
column datatype contents
1- 3 text cardtype = emp
4- 7 num employee number (4 digits)
8-36 text employee name (29 chars)
37-65 text employee address (29 chars)
66-68 num department
69-77 num salary (with 2 decimals)
78-79 num rate of taxation
80-80 char status
The card deck is terminated by a card with cardtype = fin.
These cards may be read and used for creation of employee records
by the program listed below.
\f
F_
\f
F_
\f
F_
\f
F_ A_._ _ _ _ _ _ _ _ _R_E_F_E_R_E_N_C_E_S_ A.
1 RCSL No 42-i0606:
ALGOL7, Reference Manual
2 RCSL No 42-i1278:
ALGOL8, User's Guide, Part 2
\f
F_
\f
«eof»