Table of Contents
TUTORIALS
The best way to familiarize yourself with the various subcommands is to try them out on your own. This series of tutorials will guide you through what to expect (and not) as you work your way through the range of functionality provided by the CDC.IO
utility.
For these tutorials - we are running all commands against two separate instances:
- the CYBIS/R1 distribution (in local directory
E:\Emulation\CybisRelease1\disks
) which contains:
- DM01_SYSTFA
- DM02_SYSTFA
- DM03_CYBDEV
- DM04_BINARY
- DM11_DEV0
- DM12_CYB0
- DM13_CYB1
- DM14_CYB2
- DM21_UOL
- DM22_PUB0
- DM23_PUB1
- DM24_CYB3
- the CYBIS/R2 (NCC) distribution (in local directory
E:\Emulation\CybisRelease2.Prod\disks
) which contains:
- DQ10
- DQ11
- DQ12
- DQ13
- DQ20_BINARY
- DQ21_CYB0
- DQ22_CYB1
- DQ23_PUB0
- DQ24_PUB1
- DQ25_UOL
- DQ26_GEN1 (Added AFTER Installation)
- DQ27_GEN2 (Added AFTER Installation)
Tutorials
1.1 allhelp
Info
This operation's purpose is to display the help - no tutorial is required.
1.2 c.aclist
The βAccount Listβ subcommand displays a formatted view of any account in a specified cluster.
Learn More at c.aclist
1.3 c.analyze
The cluster Analysis subcommand provides volumes of diagnostic information about the target cluster identified in the command line.
Learn More at c.analyze
1.4 c.b66conv
This subcommand performs a transfer of a B66 file capsule to a specified target file.
Project Proprietary
The B66 file format was developed to define a specific type of capsule used to transfer TUTOR
, CODE
, LESLIST
, CHARSET
, and COMMON
data between systems. This special format, and its use, will only be relevant to packagers and maintainers of the CYBIS/Rn releases.
There is no tutorial for this subcommand - hobbyists who are interested in learning more about this subcommand and its use should contact the author.
Learn more about Patching System Lessons.
1.5 c.backup
One of the significant limitations of the PLATO environment is its lack of flexibility (when compared to modern systems) in the area of source code and configuration management. Complicating this is the βbase CYBIS systemβ itself.
As received from VCampus
, CYBIS' backup system was not operational. The primary means of managing change is to work on copies of files. This works most of the time, but it's not very convenient or useful when
- it comes time to do a new release,
- or if a corruption occurs in a given file,
- or if the restoration of a single file to a previous version is needed.
- etc.
To address this deficiency, a backup and restore feature was added to CDC.IO
which enables a bridge between the PLATO/CYBIS filesystem and the HOST filesystem.
Learn More at c.backup
1.6 c.brestore
Restore a single host-based backup file into a PLATO tutor file cluster. Host-based backup files may be of any supported format including that generated by the utility NOS Tools which breaks tape files up into individual files.
Learn More at c.brestore
1.7 c.catalog
Another major benefit of modern systems is having a robust collection of relational databases. One of the most popular, simple (and portable) forms of RDBMS structures is SQLITE3
.
This subcommand enables the creation of a catalog which may be used for any purpose. The primary purpose for which this feature is built: we can quickly catalog and 'diff' the filesystems of two or more separate instances.
A catalog may contain one or more inventories and may be updated at any time. This feature can be run while the PLATO/CYBIS system is up and running, but subject to the same obvious conditions: stuff may change.
Learn More at c.catalog
1.8 c.findnf
Finding a NOS file in a cluster is sometimes a bit of a challenge. Because a given filename may be stored under a userindex
that was not known or expected, it's nice to have a means of searching an entire cluster for a given file name.
Issue the following command against the CYBIS/R1 cluster:
cdc.io c.findnf -c "E:\Emulation\CybisRelease1\disks" system
The response is:
Success
Congratulations!
You have now found all of the files starting with system
!
1.9 c.findpf
Finding a PLATO file in a given cluster (especially if it's not running) is equally a pain. This subcommand enables you to find any PLATO file on any pack within the cluster.
Issue the command:
cdc.io c.findpf -c "E:\Emulation\CybisRelease1\disks" system
The response is:
Success
Congratulations!
You have successfully found the elusive file beginning with the name system
!
1.10 c.grplist
Managing groups is a function of any site administrator and the built-in tools are helpful but not complete.
When trying to understand the the sum-total of the site configuration, this subcommand was created to give the site administrator a more global view of the system's users.
Learn More at c.grplist.
1.11 c.pfcopy
Considerations
Copying files between systems is very cumbersome because so many thing need to be taken into consideration. The CYBIS PF
utility has certain benefits, but also has constraints. The process for moving files between systems requires that a tape be mounted; loaded; unloaded; then mounted on the target system and reloaded. There is a lot of manual operation specific to each file that makes this process error prone and very inconvenient. It also requires that you have a running system (both source and target must be functioning).
You must know what you are doing before initiating a copy operation. Just a few of the considerations below need to be examined prior to performing any kind of copy operation:
Is the file to be copied:
- Source System
- a
system lesson
? - compatible with the target system?
- dependent on other files or lessons?
- etc.
- Target System
- already in existence?
- the same size as the source system?
- a
system lesson
? - etc.
Learn More at c.pfcopy
1.12 c.pflist
The c.pflist
subcommand is the global version of the more specific pflist
command.
Using the command:
cdc.io c.pflist -c "E:\Emulation\CybisRelease1\disks"
The output is generated in βbriefβ form. An example of this output is about 193Kbytes and displays a list of files found in every masterfile found in every NOS pack in the cluster specified.
Significantly more information may be obtained by supplying the -i
or βinfolevel
flags:
cdc.io c.pflist -i -c "E:\Emulation\CybisRelease1\disks"
A much longer example is 2 megabytes larger but provides substantial detail about the file:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β PLATO Pack Listing β β Pack Name 'system' Structure Type 'm' β β Container <class 'nosio.NosFile'>' β β 00683. File(s) β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ filename blks prts ftype start file inf word rmts ndir account file type dftype ---------- ---- ---- - ----- -------------------- ---- ---- ------- -------------------------------------- ---------- accountc 63 9 a 21 00000000011100000003 . . system normal tutor lesson tutor a accountp 56 8 a 84 00000000011000000014 . . system normal tutor lesson tutor a accounts 49 7 a 140 00000000010700000024 . . system normal tutor lesson tutor a accountu 56 8 a 189 00000000011000000033 . . system normal tutor lesson tutor a account1 98 14 a 245 00000000011600000043 . . system normal tutor lesson tutor a . . . u 49 7 a 27251 00000000010700007465 . . system normal tutor lesson tutor a user 42 6 a 27300 00000000010600007474 . . system normal tutor lesson tutor a utility 77 11 a 27342 00000000011300007502 . . system normal tutor lesson tutor a u0busy 14 2 a 27419 00000000010200007515 . . system normal tutor lesson tutor a u0ffm 28 4 a 27433 00000000010400007517 . . system normal tutor lesson tutor a vocabedit 28 4 a 27461 00000000010400007523 . . system normal tutor lesson tutor a x 7 1 a 27489 00000000010100007527 . . system normal tutor lesson tutor a xa0qrefns 238 34 k 28784 00001225134200010020 10 21 system named-record dataset nameset k xrecords 126 18 a 27496 00000000012200007530 . . system normal tutor lesson tutor a xsyswork 42 6 a 27622 00000000010600007552 . . s0xfer normal tutor lesson tutor a zclmastuvw 35 5 k 28553 40000305130500007757 3 5 system named-record dataset nameset k zclmcurr1 35 5 a 28588 40000000010500007764 . . system normal tutor lesson tutor a zfloppypc 35 5 a 27699 00000000010500007565 . . system normal tutor lesson tutor a zfroml 7 1 a 27664 00000000010100007560 . . system normal tutor lesson tutor a zimode 35 5 a 28623 40000000010500007771 . . system router lesson router a znotes 126 18 a 28658 40000000012200007776 . . system normal tutor lesson tutor a zs0pcld4 126 18 a 27734 40000000012200007572 . . system normal tutor lesson tutor a z1report 21 3 a 27671 00000000010300007561 . . system normal tutor lesson tutor a 0 7 1 a 27692 00000000010100007564 . . system normal tutor lesson tutor a 4;;;;;;;;; 21 3 0 00000000770300000000 . .
Success
Congratulations!
You have now listed the entire contents of cluster E:\Emulation\CybisRelease1\disks
!
1.13 c.pfprint
This is the cluster version of pfprint. The only difference is that the -c (cluster) switch is active and the -M (masterfile) and the pack_path argument are not required.
cdc.io c.pfprint -v -c "E:/Emulation/TH.CybisRelease1/disks" plat.* charsets
The above command results in the printing of file PLATO
and CHARSETS
.
File Selection
The file specifications follow the syntax of regular expressions .
1.14 c.resolve
Resolve and print the result of a Cluster Object specification. This function helps visualize the list of packs and files upon which a given Cluster Object Specifier will operate. It can also Reconcile one cluster's contents against another's based on a Cluster Object specification. This subcommand helps compare file naming across cluster contexts.
This function does a quick βcomparisonβ of two sets of files meeting the
same criteria across two different clusters. For example, if
I would like to see how the files on pack system
in account system
compare between two clusters - I issue the following command:
cdc.io c.resolve -I "E:\Emulation\CybisRelease1\disks" -O "E:\Emulation\CybisRelease2.Prod\disks" -f system.*@system
The report output displays a side-by-side comparison of the matching filenames found on each cluster/account/pack along with:
- the filetype of each file
- the number of parts occupied by each file
- the difference between the two file sizes (if any)
The first 5 results are shown here:
1 system accountc 9 parts a pack 'system ' account 'system ' 9 parts (equ size) 2 system accountp 8 parts a pack 'system ' account 'system ' 8 parts (equ size) 3 system accounts 7 parts a pack 'system ' account 'system ' 8 parts ( 1 more) 4 system accountu 8 parts a pack 'system ' account 'system ' 8 parts (equ size) 5 system account1 14 parts a pack 'system ' account 'system ' 14 parts (equ size)
<adm note>It's important to note that this does a very simple comparison to that provided in the cat.compare subcommand which uses a cryptographic signature of each file to recognize differences in the actual content of the file (in addition to just finding a difference in size).
Success
Congratulations!
You have just resolved the contents of account system
!
1.15 cat.compare
In c.catalog, we created a catalog containing two sample clusters. In this tutorial, we have created a catalog of three clusters:
- The BASIC βHunterβ distribution TH.CybisRelease1.
- A modified βHunterβ distribution CybisRelease1.
- The NCC distribution NCC.CybisRelease1.
Learn More at cat.compare
1.16 cat.delete
This subcommand removes a previously cataloged cluster from the specified database.
That's All!
1.17 cat.list
The cat.list
subcommand has several variants:
- This variant simply lists the names of the cataloged clusters
(py11.venv) Ξ» cdc.io cat.list -d nccwork.sqlite3 Cluster Name 0 CybisRelease1 1 NCC.CybisRelease1 2 TH.CybisRelease1 - Lists the volumes contained in one or more cataloged clusters
(py11.venv) Ξ» cdc.io cat.list -d nccwork.sqlite3 CybisRelease1 NCC.CybisRelease1 Cluster Name Container Name CType Hostfile Path Last Modified 0 CybisRelease1 binary1 m C:\dtCyber.R1\disks\DM04_BINARY 2023-05-02T06:26:15.886402 1 CybisRelease1 binary2 m C:\dtCyber.R1\disks\DM04_BINARY 2023-05-02T06:26:15.886402 2 CybisRelease1 develop m C:\dtCyber.R1\disks\DM21_UOL 2023-05-02T06:26:15.906349 3 CybisRelease1 puba m C:\dtCyber.R1\disks\DM22_PUB0 2023-05-02T06:26:15.910338 4 CybisRelease1 pubb m C:\dtCyber.R1\disks\DM22_PUB0 2023-05-02T06:26:15.910338 5 CybisRelease1 pubc m C:\dtCyber.R1\disks\DM22_PUB0 2023-05-02T06:26:15.910338 6 CybisRelease1 pubd m C:\dtCyber.R1\disks\DM22_PUB0 2023-05-02T06:26:15.910338 7 CybisRelease1 pube m C:\dtCyber.R1\disks\DM22_PUB0 2023-05-02T06:26:15.910338 8 CybisRelease1 pubf m C:\dtCyber.R1\disks\DM23_PUB1 2023-05-02T06:26:15.914329 9 CybisRelease1 pubg m C:\dtCyber.R1\disks\DM23_PUB1 2023-05-02T06:26:15.914329 10 CybisRelease1 pubh m C:\dtCyber.R1\disks\DM23_PUB1 2023-05-02T06:26:15.914329 11 CybisRelease1 pubi m C:\dtCyber.R1\disks\DM23_PUB1 2023-05-02T06:26:15.914329 12 CybisRelease1 pubj m C:\dtCyber.R1\disks\DM23_PUB1 2023-05-02T06:26:15.914329 13 CybisRelease1 s0files m C:\dtCyber.R1\disks\DM12_CYB0 2023-05-02T06:26:15.894353 14 CybisRelease1 s0stuff m C:\dtCyber.R1\disks\DM12_CYB0 2023-05-02T06:26:15.894353 15 CybisRelease1 system m C:\dtCyber.R1\disks\DM12_CYB0 2023-05-02T06:26:15.894353 16 CybisRelease1 system1 m C:\dtCyber.R1\disks\DM13_CYB1 2023-05-02T06:26:15.898371 17 CybisRelease1 system2 m C:\dtCyber.R1\disks\DM13_CYB1 2023-05-02T06:26:15.898371 18 CybisRelease1 system3 m C:\dtCyber.R1\disks\DM13_CYB1 2023-05-02T06:26:15.898371 19 CybisRelease1 system4 m C:\dtCyber.R1\disks\DM13_CYB1 2023-05-02T06:26:15.898371 20 CybisRelease1 system5 m C:\dtCyber.R1\disks\DM13_CYB1 2023-05-02T06:26:15.898371 Cluster Name Container Name CType Hostfile Path Last Modified 0 NCC.CybisRelease1 binary1 m C:\dtCyber.R2\disks\DQ20_BINARY 2023-11-16T20:08:52.520364 1 NCC.CybisRelease1 binary2 m C:\dtCyber.R2\disks\DQ20_BINARY 2023-11-16T20:08:52.520364 2 NCC.CybisRelease1 develop m C:\dtCyber.R2\disks\DQ25_UOL 2023-11-16T20:08:52.542870 3 NCC.CybisRelease1 puba m C:\dtCyber.R2\disks\DQ23_PUB0 2023-11-16T20:08:52.534328 4 NCC.CybisRelease1 pubb m C:\dtCyber.R2\disks\DQ23_PUB0 2023-11-16T20:08:52.534328 5 NCC.CybisRelease1 pubc m C:\dtCyber.R2\disks\DQ23_PUB0 2023-11-16T20:08:52.534328 6 NCC.CybisRelease1 pubd m C:\dtCyber.R2\disks\DQ23_PUB0 2023-11-16T20:08:52.534328 7 NCC.CybisRelease1 pube m C:\dtCyber.R2\disks\DQ23_PUB0 2023-11-16T20:08:52.534328 8 NCC.CybisRelease1 pubf m C:\dtCyber.R2\disks\DQ24_PUB1 2023-11-16T20:08:52.538317 9 NCC.CybisRelease1 pubg m C:\dtCyber.R2\disks\DQ24_PUB1 2023-11-16T20:08:52.538317 10 NCC.CybisRelease1 pubh m C:\dtCyber.R2\disks\DQ24_PUB1 2023-11-16T20:08:52.538317 11 NCC.CybisRelease1 pubi m C:\dtCyber.R2\disks\DQ24_PUB1 2023-11-16T20:08:52.538317 12 NCC.CybisRelease1 pubj m C:\dtCyber.R2\disks\DQ24_PUB1 2023-11-16T20:08:52.538317 13 NCC.CybisRelease1 s0files m C:\dtCyber.R2\disks\DQ21_CYB0 2023-11-16T20:08:52.525351 14 NCC.CybisRelease1 s0stuff m C:\dtCyber.R2\disks\DQ21_CYB0 2023-11-16T20:08:52.525351 15 NCC.CybisRelease1 system m C:\dtCyber.R2\disks\DQ21_CYB0 2023-11-16T20:08:52.525351 16 NCC.CybisRelease1 system1 m C:\dtCyber.R2\disks\DQ22_CYB1 2023-11-16T20:08:52.529340 17 NCC.CybisRelease1 system2 m C:\dtCyber.R2\disks\DQ22_CYB1 2023-11-16T20:08:52.529340 18 NCC.CybisRelease1 system3 m C:\dtCyber.R2\disks\DQ22_CYB1 2023-11-16T20:08:52.529340 19 NCC.CybisRelease1 system4 m C:\dtCyber.R2\disks\DQ22_CYB1 2023-11-16T20:08:52.529340 20 NCC.CybisRelease1 system5 m C:\dtCyber.R2\disks\DQ22_CYB1 2023-11-16T20:08:52.529340 - Lists the volumes contained in one or more cataloged clusters and the files contained within them matching the pattern
%plato%
1).
(py11.venv) Ξ» cdc.io cat.list -d nccwork.sqlite3 -f "%plato%" NCC.CybisRelease1 Cluster Name Container Name CType Hostfile Path Last Modified 0 NCC.CybisRelease1 binary1 m C:\dtCyber.R2\disks\DQ20_BINARY 2023-11-16T20:08:52.520364 1 NCC.CybisRelease1 binary2 m C:\dtCyber.R2\disks\DQ20_BINARY 2023-11-16T20:08:52.520364 2 NCC.CybisRelease1 develop m C:\dtCyber.R2\disks\DQ25_UOL 2023-11-16T20:08:52.542870 3 NCC.CybisRelease1 puba m C:\dtCyber.R2\disks\DQ23_PUB0 2023-11-16T20:08:52.534328 4 NCC.CybisRelease1 pubb m C:\dtCyber.R2\disks\DQ23_PUB0 2023-11-16T20:08:52.534328 5 NCC.CybisRelease1 pubc m C:\dtCyber.R2\disks\DQ23_PUB0 2023-11-16T20:08:52.534328 6 NCC.CybisRelease1 pubd m C:\dtCyber.R2\disks\DQ23_PUB0 2023-11-16T20:08:52.534328 7 NCC.CybisRelease1 pube m C:\dtCyber.R2\disks\DQ23_PUB0 2023-11-16T20:08:52.534328 8 NCC.CybisRelease1 pubf m C:\dtCyber.R2\disks\DQ24_PUB1 2023-11-16T20:08:52.538317 9 NCC.CybisRelease1 pubg m C:\dtCyber.R2\disks\DQ24_PUB1 2023-11-16T20:08:52.538317 10 NCC.CybisRelease1 pubh m C:\dtCyber.R2\disks\DQ24_PUB1 2023-11-16T20:08:52.538317 11 NCC.CybisRelease1 pubi m C:\dtCyber.R2\disks\DQ24_PUB1 2023-11-16T20:08:52.538317 12 NCC.CybisRelease1 pubj m C:\dtCyber.R2\disks\DQ24_PUB1 2023-11-16T20:08:52.538317 13 NCC.CybisRelease1 s0files m C:\dtCyber.R2\disks\DQ21_CYB0 2023-11-16T20:08:52.525351 14 NCC.CybisRelease1 s0stuff m C:\dtCyber.R2\disks\DQ21_CYB0 2023-11-16T20:08:52.525351 15 NCC.CybisRelease1 system m C:\dtCyber.R2\disks\DQ21_CYB0 2023-11-16T20:08:52.525351 16 NCC.CybisRelease1 system1 m C:\dtCyber.R2\disks\DQ22_CYB1 2023-11-16T20:08:52.529340 17 NCC.CybisRelease1 system2 m C:\dtCyber.R2\disks\DQ22_CYB1 2023-11-16T20:08:52.529340 18 NCC.CybisRelease1 system3 m C:\dtCyber.R2\disks\DQ22_CYB1 2023-11-16T20:08:52.529340 19 NCC.CybisRelease1 system4 m C:\dtCyber.R2\disks\DQ22_CYB1 2023-11-16T20:08:52.529340 20 NCC.CybisRelease1 system5 m C:\dtCyber.R2\disks\DQ22_CYB1 2023-11-16T20:08:52.529340 Container PLATO File File Type Create Date Modify Date Account # Blocks Cryptographic Hash 0 develop nplato tutor a 1997-11-05 00:00:00 1997-11-05 01:07:30 s0nver 126 93f48183f56f8696f06356e6e1dc857ffab371eb4c578c507799c4e40ff03ad7 Container PLATO File File Type Create Date Modify Date Account # Blocks Cryptographic Hash 0 puba 0atplato1 tutor a 1979-10-16 00:00:00 2002-03-04 16:01:08 publisd 28 948958b4406c5e8ae4e06e0abcf8d2f3d3d4169245facb3adf745ee0e0355900 1 puba 0atplato1b tutor a 1979-10-16 00:00:00 1993-12-09 14:34:44 publisd 14 cb42e8aef147867695f84cda514b75e594db7ed4cdf1d383c06523414505d048 2 puba 0atplato1c tutor a 1979-10-22 00:00:00 2002-03-04 16:01:42 publisd 21 a8d6df15d02e3ada871c62befdfdc456b978cc30f0acf9a8a616c2dbd84116a3 3 puba 0atplato2 tutor a 1977-06-16 00:00:00 1997-06-12 15:38:36 publisd 14 6901c447e2e5b662e60a0daf5600004b0f82b2d5fc459feb14fd24acd4afb9ce Container PLATO File File Type Create Date Modify Date Account # Blocks Cryptographic Hash 0 pubc 0plato3 tutor a 1977-07-01 00:00:00 1979-02-05 09:16:34 publisd 7 bb69b76397514cc889ad17af58374d265a47618176216e9331509178490d1697 1 pubc 0plato4 tutor a 1977-07-25 00:00:00 1979-02-05 09:16:40 publisd 14 e678d36932f76925be681e44214a62e1db94a07589a851f8edea56c663cedddc 2 pubc 0plato6 tutor a 1977-07-25 00:00:00 1979-02-05 09:16:46 publisd 14 88ada8227a78b93373b30638a33d86fcd763241bb0be959a0753056298a92afd 3 pubc 0plato7 tutor a 1977-07-25 00:00:00 1979-02-05 09:16:53 publisd 14 c7c15f48426ba36d1a6c86dea286ca1af9a14ad1d3389d02b41457eebf55a625 Container PLATO File File Type Create Date Modify Date Account # Blocks Cryptographic Hash 0 pubd 0platoiv tutor a 1974-02-12 00:00:00 1979-02-05 08:40:45 publise 14 8653ec8948d5f8be9f1680a8b6fc4b5093beb0081be31fd5c01fad8b8de581c3 Container PLATO File File Type Create Date Modify Date Account # Blocks Cryptographic Hash 0 system plato tutor a 1997-11-05 00:00:00 1997-11-05 01:28:00 system 126 406a90f18e962c91495d5422d2ca7a05f022dbc540993ea3ef709433d259c3a9 Container PLATO File File Type Create Date Modify Date Account # Blocks Cryptographic Hash 0 system1 oplato tutor a 1997-11-05 00:00:00 2003-12-24 11:19:36 system 126 9f16e942ea1c126ba395a25a618d0f5096f3af89cda62f18e807a6498ba3e3e5
1.18 hash
When packaging containers (or files of any kind), it is sometimes important to ensure that the integrity of the files is preserved. The cryptographic hash of the file can be used to determine the condition of the file. A unique signature is generated for each file in the current folder and the signature is stored in a file .hashtab
. If a signature changes between hash
operations, the change is noted as output of the command which resembles the following:
1.19 nosget
1.20 noslist
This subcommand processese the target volume and identifies the file names and their respective user indexes contained within the volume:
1.21 pfget
1.22 pflist
The pflist subcommand is the βsingle volumeβ version of the cluster subcommand c.pflist.
The alternative form of the command provides significant detail about each file: