_______________________________________________________________________________

                  INTRODUCTION TO THE PRIMOS OPERATING SYSTEM
                Part V (Languages and Advanced PRIMOS Material)

                              Written by Violence
                      Copyright (C) 1989 The VOID Hackers
_______________________________________________________________________________


Welcome to the fifth and final part of my series on the  PRIMOS  operating sys-
tem.  In this last installment, I will cover many of the aspects of PRIMOS that
I have overlooked, including:

        o  Program Types and Execution (Languages)
        o  All about Access Control Lists (Setting and Editing)
        o  Abbreviation files (use and investigation thereof)
        o  The physical system console of a Prime computer system
        o  The ACL's and Read/Write Locks Used to Protect the SAD
        o  Hacking older (outdated) revisions of PRIMOS
        o  Some useful CPL utilities that enhance PRIMOS
        o  References and Acknowledgements
        o  Epilog - The End of a Series

As you can see, part V is the "throw-together, finish-it-up" installment.  Here
I will cover everything that I have failed to do so in the previous parts.  You
should by now have a fairly good working knowledge of PRIMOS.  I hope this last
installment will make all you eager PRIMOS hackers happy.  Enjoy!

_______________________________________________________________________________

PROGRAM TYPES AND EXECUTION


From the file extension listing in Part I you can see that There are many diff-
erent types of programs,  each with their own file extension.  How can you look
at and execute these programs?  Well, that's what this section is all about.

To start off, let's talk about CPL programs.  CPL is Prime's "Command Procedure
Language"  and,  like VAX/VMS's DCL,  is an interpreted language for performing
rudimentary tasks.  This is not to say that it is unable to perform complicated
tasks,  for it most certainly can.  Most commonly a user's LOGIN file will be a
CPL program (usually called CPL's).

CPL programs are SAM type files and can be SLISTed as usual.  There are several
methods for executing a CPL program.  In these examples, I will assume the file
is called VOID.CPL.  Here are the examples:

        OK, cpl void
        OK, r void.cpl

The first example illustrates use of the  CPL command.  When CPL'ing a program,
you need not include the ".CPL" file extension, but you can if you want to.  In
the second example we see the R command.  R is not really the command name, but
the command's  abbreviation.  The full command name is RESUME.  RESUME requires
that you include the file extension along with the filename.  Should a CPL pro-
gram be located in the CMDNC0 directory, then you can execute it by simply ent-
ering it's name.  An example would be:

        OK, void

That would execute the VOID.CPL  program located in CMDNC0.  In fact,  any file
located in CMDNC0 can be executed by simply typing it's name.  You can, of cou-
rse, append the file extension, but that is not necessary.

CPL is a rather rich language and you can write many utilities with it.  Every-
thing from a utility to perform mediocre tasks to a full-fledged BBS/Chat prog-
ram.  CPL is really beyond a simple scripting langage.  One thing  Prime should
consider is adding  some new commands to  CPL  and writing a compiler subsystem
for it.  Tough work,  yes,  but the benefits would easily outweigh the problems
involved (at least from my viewpoint).  Until then, interpreted CPL is quite OK
though.  It's fast enough.

It is beyond the scope of this series to provide instructions on programming in
CPL, but there are alreasy  some files floating  around regarding it.  The file
in TCSB #1 (by Necrovore) lists all the CPL commands but is not very helpful in
the  examples  department.  With enough  reader-response  I might sit  down and
pound out a good CPL tutorial.

On with the show...

BAS files cannot be executed,  as they are BASIC source code.  You will want to
compile the source and then execute the compiled code.  To enter the BASIC sub-
system you enter BASIC at the command line.  Like this:

        OK, basic

If the Prime you are on has BASIC/VM  (called BASICV)  available then I suggest
that you use it,  as,  unlike standard  BASIC,  BASIC/VM is virtual in  nature,
making the machine's memory appear to be a hell of  a lot larger than it really
is.  To invoke BASIC/VM, you would type (at the command line):

        OK, basicv

Either way, you should get the ">" prompt.  At this point,  you need to load in
the BAS file and compile it.  All of the following examples assume that you are
using BASIC/VM,  as it is a lot more recent in nature.  BASIC commands are very
similar to  BASIC/VM  commands.  On with the show.  In the following examples I
will show you what it would look like if you were to invoke  BASIC/VM,  load in
a BAS program called VOID.BAS, compile it, and quit.

        OK, basicv
        [BASICV Rev. 22.0.0 Copyright (c) 1988, Prime Computer, Inc.]
        [Serial #serial_number (company_name)]

        >n void.bas
        >list

        10 ! This is a sample BASIC/VM program
        15 ! Written by Violence (C) 1989 VOID
        20 !
        25 PRINT '[BASIC/VM EXAMPLE Rev. 22.0]'
        30 !
        35 ! That revision level is a joke.  Heh.
        40 !
        45 INPUT LINE 'Enter some text,' A$
        50 PRINT
        55 PRINT A$,LIN 1
        60 END

        >comp void.bin
        >q
        OK,

The 'n'  command stands for NEW  (either N filename or NEW filename will work).
It is saying to BASIC/VM that the new filename is to be VOID.BAS.  BASIC/VM lo-
ads VOID.BAS into the workspace.  The LIST command should be obvious.  The COMP
command is the  abbreviation for COMPILE.  It takes the source code,  checks it
for errors,  and compiles  and links it into  a binary file.  This file  can be
executed by using the RESUME command, as illustrated:

        OK, R VOID.BIN

BASIC source code, as well as other types of source code  (CBL, FTN, F77, etc.)
will not compile if it contains errors.  To enter the other available compilers
you must enter the name of the language compilers.  Available compilers consist
of the following:

     *  BASIC     Prime BASIC compiler
     *  BASICV    Virtual memory BASIC compiler
     *  COBOL     COBOL compiler
        DBASIC    Interpreted BASIC with double-precision arithmetic
     *  F77       Compiles FORTRAN 77 or FORTRAN IV code
     *  FTN       Compiles FORTRAN IV code
     *  NCOBOL    Non-shared (non-virtual) COBOL compiler
     *  PL1G      Compiles PL/1, subset G code
     *  PMA       Assembles Prime Macro Assembler code
        RPG       Compiles an RPG II program (non-virtual)
        SPL       Compiles an SPL program
        VRPG      Compiles an RPG II program (virtual)

Language systems commonly found on Primes are denoted with an asterisk (*).

Generally, to execute compiled source code, use the RESUME (R) command.  If the
program is located in CMDNC0, just issue the filename (less the file extension)
to execute it.  Use  SLIST to view source code.  Most always,  source code will
have file extension denoting the language type.  If a source code file does not
have an extension  then SLIST it.  Lots of  times a  source file  will tell you
what language it was coded in in its comment header.

I am not going to go into the other languages as  many hackers are not familiar
with high level languages such as FORTRAN IV,  FORTRAN-77,  PL/1 Subset G, etc.
Quite a few are,  but not as many  as one would think.  The information  I have
presented on CPL  and BASIC/VM  is enough to  get you on your way, and besides,
there are other means of learning these languages:

        (a) Looking at source code files and learning
        (b) Purchasing language manuals from Prime Computer, Inc.

(A) is easy to do.  Just look  for files  with the extensions  '.FTN',  '.BAS',
'.PLP', '.PL1', '.PMA' and so forth.  Remember, '.SAVE' and '.BIN' are compiled
code and not source.

(B) may not seem like a good or easy option, but it's not so bad at all!  Prime
Computer, Inc.  will sell you manuals  for these languages for about $20 to $25
a piece.  Not so bad when you consider  most manuals cost even more.  Just call
up Prime Computer, Inc.'s Telemarketing Department and request info or buy them
right then and there.  Should they ask why you want manuals,  tell them you are
a freelance Prime programmer.  They love that one.  Here's the address, etc:

        Software Distribution
        PRIME COMPUTER, INC.
        1 New York Ave.
        Framingham, MA 01701

        (617) 879-2960
        ext 2053, 2054

_______________________________________________________________________________

SETTING AND EDITING ACCESS CONTROL LISTS (ACL'S)


You have already learned how to check the ACL  (Access Control List) protecting
a specified UFD and you  also know what each of the access  rights are and what
they mean.  If you have forgotten any of these things then please refer to Part
II of this series.  First off I  will explain  ACL's and  how they are  set up.
Then I will go into the actual editing and creating of ACL's.

ACL's are stored in Access Catagories (ACAT's)  and can protect not only UFD's,
but also individual files.  An ACL is a list of users and access rights for the
objects they cover.  Each entry in an ACL governs who has what rights to a par-
ticular filesystem object.  Each entry in an ACL is an ordered pair, as is ill-
ustrated by this structural example:

        identifier:rights

The two fields in an entry in an ACL  must be separated by a colon  (:).  ACL's
may contain up to 32 pairs but may not be longer than 160 characters in length,
including blanks.

An identifier is one of three types, a single user ID (such as SYSTEM), a group
identifier (like .PROJECT_ADMINISTRATORS$), or a special identifier (like $REST
meaning everyone else not specified in the ACL).

Access categories are files that contain an ACL.  ACAT's are used  to protect a
set of files in a similar matter.  A good example of ACAT usage is the SAD  UFD
on a Prime computer (located off of MFD 0).  SAD is protected  in such a manner
that all of the files therein  are protected similarly.  Basically,  ACAT's are
useful when protecting files in a UFD differently from one another.

Here is a sample ACL for a  UFD called STEVE.  I will be using this ACL for all
further examples used in this section.

        ACL protecting "<Current directory>":
                STEVE          ALL
                SYSTEM         ALL
                LOWERY         DALURW
                JOHNSON        DALURW
                $REST:         NONE

Notice that the owner of this UFD,  STEVE,  has ALL rights to his UFD.  This is
obvious, of course.  Also notice that SYSTEM has ALL rights also.  This is pro-
bably due to backup reasons,  etc.  STEVE has also given the users,  LOWERY and
JOHNSON DALURW access to his UFD.  Possibly they are in the same department and
are  working together on  a project of  some sort.  The $REST  identifier is  a
wildcard indicating that no other system user has any access to STEVE's UFD.

Let's say that LOWERY no longer works on the project with  STEVE  and  JOHNSON.
Therefore LOWERY's access to  STEVE's UFD needs to be terminated.  In addition,
JOHNSON needs  P (Protect)  access  to STEVE's UFD.  Lastly, STEVE wants to add
SIMPSON to his ACL  (LOWERY's replacement, perhaps).  To perform these changes,
STEVE must edit his UFD's ACL.  To do this he will have to use the  EDIT_ACCESS
command (abbreviated EDAC).  Here is what he would type:

        OK, edac <user02>steve lowery: johnson:pdalurw simpson:dalurw

Sorry for the runover, but ACL related command lines are generally lengthy.  It
should be easy for you to track the modifications presented in the above examp-
le.  Notice that STEVE did not list himself or SYSTEM.  Why?  Because he wasn't
making changes to them.  When using  EDAC  you need  only list all ACL changes.
The EDAC  command  will be useful  for editing rights  into other people's ACL-
protected UFD's  (assuming you have  access to do such).  STEVE's new ACL looks
like this:

        ACL protecting: "<Current directory>":
                STEVE           ALL
                SYSTEM          ALL
                JOHNSON         PDALURW
                SIMPSON         DALURW
                $REST:          NONE

If you happen to create an account on a Prime computer you will want to protect
your UFD with an ACL.  To do this you will want to use the  SET_ACCESS  command
(abbreviated SAC).  Let's go back into  time when the  system administrator  of
STEVE's system created his account.  Also assume that the sys admin didn't cre-
ate a default ACL for STEVE.  Here is what STEVE did to create his original ACL
entry:

        OK, sac <user02>steve steve:all system:all lowery:dalurw johnson:dalurw
$rest:none

Unlike EDAC,  SAC requires you to list all ACL fields.  Failure to list a field
will cause the field to have NONE as the access right.

EDAC and SAC will usually  prompt you as to whether  or not you  really want to
make the specified changes, if you want to overwrite an existing ACL file,  and
so forth.  If you supply a -NO_QUERY  argument to the end of the entry then you
will not be prompted at all.  Abbreviate -NO_QUERY with -NQ.  A good example is
SAC'ing an existing ACL to make wholesale modifications.  To avoid the 'are you
sure' type prompt, type this (using our previous SAC example):

        OK, sac <user02>steve steve:all system:all lowery:dalurw johnson:dalurw
$rest:none -nq

Remember,  when SAC'ing and EDAC'ing ACL's include the full pathname of the ACL
file.  And remember to include the owner as having ALL rights, as failure to do
so can lock you out of a UFD or other filesystem object.

Other access-related commands are LIST_ACCESS (abbreviated LA, detailed in Part
II of this series), RWLOCK, SET_DELETE, and PROTECT.  Use Prime's online 'HELP'
for descriptions of these commands.

_______________________________________________________________________________

PRIMOS ABBREVIATION FILES


While most PRIMOS commands are not long  enough to be an inconvinience,  it can
occasionally be irritating to type a command or command with arguments that you
commonly use.  The solution?  Abbreviations.

PRIMOS fully supports abbreviations.  Abbreviations are exactly what they sound
like; shortened commands that represent full commands.  Some good examples that
illustrate this are as follows:

        (a) Say you like use the -DETAIL argument of the LD command as opposed
            to the normal form of LD.  Instead of having to type LD -DET all
            the time you can create an abbreviation called LF that will, when
            issued, tell PRIMOS to do an LD -DET.

        (b) Say you frequently issue the CLOSE ALL command.  Wouldn't it be
            nicer to be able to type CA instead of CLOSE ALL all the time?

        (c) Say you create many temporary (T$xxxx) files and that you have to
            delete these files when done with your session.  Instead of 'hand-
            deleting' them before you logout, make an abbreviation called DT
            that PRIMOS interprets as DELETE T$@ -NQ.

Those three examples illustrate  the usefulness of abbreviation files.  Another
nice fact about abbreviation files is that people  occasionally store passwords
to passworded UFD's  (non-ACL)  and NUA's  to various and sundry systems on the
network.  So inspecting peoples' abbreviation files is also good hacking pract-
ice.  In this section I will describe how to access, list, use, and create abb-
reviation files.

Abbreviation files can be called from within CPL program as well as used during
interactive sessions.  Another important fact  about abbreviation files is that
they can contain only normal commands and not subcommands.  That is to say, you
can abbreviate any normal  command line procedure,  but you cannot make an abb-
reviation to enter NETLINK, call and NUA, and THEN log you in.

The system administrator can turn abbreviation files on and off, thus some ins-
tallations will not be able to use abbreviation files.

First off lets learn how to look at and use existing abbreviation files (ABBREV
files).  At the start of a session you must  tell PRIMOS to 'turn on' your abb-
reviation file.  Usually a user's LOGIN.CPL or LOGIN.COMI file will do this for
you, but if you want to look inside another user's ABBREV file you will need to
know how to do this from the PRIMOS command line.  Type:

        OK, abbrev pathname

where 'pathname'  is the full pathname of the ABBREV file you wish to activate.
To see what is inside the ABBREV file, issue the following command:

        OK, abbrev -list

Very simple.  To deactivate an ABBREV file, simply type:

        OK, abbrev -off

If you wish to turn the ABBREV file back on, type:

        OK, abbrev -on

If you have activated a new ABBREV file  (with the  'ABBREV pathname'  command)
then you will have to use the 'ABBREV pathname' file to turn the ABBREV file on
again.

Note that logging off will  automatically turn on an active  ABBREV file.  Also
note that you can only have one active ABBREV file at any given time.

To create a brand new ABBREV file, you need to issue the following command:

        OK, abbrev newpathname -create

An example would be:

        OK, abbrev void -create
        OK,



 Sub: Other Nets [BitNet etc..]
Read: (1-30), Message # 30, (c/r)=Next Msg ?::R

30/30: Last prime file 10 of 10...
Name: Predat0r #1 @5211
Date: Sun May 05 22:40:43 1991
From: Youth International Party Line (Kentucky)


Now you have an empty  ABBREV  file named VOID.  Abbreviations  consist  of two
parts, a name and a value.  Names can be up to 8 ASCII characters in length and
can contain any character except for spaces,  single-quotes  ('),  commas  (,),
greater-than symbols (>) and vertical bars (|).  Also remember that PRIMOS con-
verts all command line text to UPPER CASE, so case is irrelevant in the name.

NOTE: Do NOT start an abbreviation name with a hyphen  (-).  If you do then you
      will have to enclose  the entire name in single-quotes  (')  whenever you
issue the  ABBREV command.  Example,  an abbreviation named  -VOID  can only be
called if you type '-VOID' and so forth.

Values contain the  ASCII text that the  abbreviation name represents  (ie, the
actual command line procedure).  Values can contain all characters.

Now let's create a sample ABBREV file.  Let's fill it up  with some useful abb-
reviations.  Type:

        OK, abbrev -add test cpl test
        OK, abbrev -add ca close all
        OK, abbrev -add lf ld -det
        OK, abbrev -list
        Abbreviation file: <USER02>TVH>VOID
        Abbreviations: 2

            TEST     cpl test
            CA       close all
            LF       ld -det

        OK,

Okay, here we have just created three abbreviations.  These abbreviations  will
now be interpreted as commands by the PRIMOS command line.  Thus, typing:

        OK, test

will execute the CPL program called TEST (or TEST.CPL; recall that CPL does not
require you to enter the file extension).  CA would act just like you had typed
CLOSE ALL, and so on.  Be aware that  an abbreviation file  cannot contain more
than 200 abbreviations.

To delete an abbreviation file entry, type:

        OK, abbrev -delete abbrevname

Thus, to delete the TEST abbreviation, we would type:

        OK, abbrev -delete test

These are the basics of the abbreviation subsystem.  There are more advanced
commands that I have not gone over due to spacial limitations.  To obtain more
information on the abbreviation subsystem, type:

        OK, abbrev -help

_______________________________________________________________________________

THE PHYSICAL SYSTEM CONSOLE


The physical system console of a  Prime computer has added power over any other
local or  remote  terminal.  It is only  from this  one specific  console  that
several potent operator commands can be issued and invoked successfully.

A few of these  console-specific commands will be boring to any hacker not into
system programming  on a Prime.  Some commands, however, will be rather useful.
About the most useful console command is the  'RESUS -ENABLE'  command.  As you
might recall from Part III,  RESUS is the REmote System USer facility.  That is
to say, when RESUS is enabled and you are logged into an administrator account,
you will  actually be a  virtual  system console.  This will allow  all console
commands to be able to be used from  any local or remote terminal.  The -ENABLE
argument simply tells PRIMOS that you want to turn RESUS on.

Another useful console  command is the user logoff command.  With this you will
be able to logoff users other than yourself.  This is not advised.

Other useful commands are the log management commands.  These will allow you to
make your presence on the system virtually unknown.  Simply edit all logs, both
PRIMOS and NETWORK related, and kill all references to yourself.  There is much
that you can do.  For a full list of operator commands you  will have to invoke
the online HELP facility by typing, you guessed it, HELP.  Without an argument,
it should list all the PRIMOS commands.  Just pick out those that say 'Operator
Command' beside them.

I'm not  really going to  continue with this topic as you will have a hard time
getting  console  capability  unless you  are on-site or  the fools have  RESUS
enabled and you are  using a  SYS1 priv'ed account.  You don't need the logging
commands to  edit the logs  (just the SYS1 privs).  Lastly,  there are  ways of
getting console that  I will not discuss.  I just want  you to know  that there
are additional methods available and that you should work at finding them.  Its
the best way  to really learn  (besides,  it's too sensitive to  release to the
general hacker community).

_______________________________________________________________________________

THE ACL'S AND READ/WRITE LOCKS USED TO PROTECT THE SAD


It should prove both helpful and informative to know how the SAD (System Admin-
istration Directory) is protected.  The following 'map' displays the SAD  ACL's
and their associated access rights.


                  SAD - System Administrator Directory
                   |
                   |    (System Administrator: ALL)
                   |    (Login Server:         ALL)
                   |    (Everyone Else:        LU)
     ______________|_______________________________________
    |              |             |             |           |
   UVF            SDF           MGF           MPF          PD  (Sys Admin: ALL)
(DEFAULT)      (DEFAULT)     (PA.ACAT)     (PA.ACAT)       |   (Login Srv: LUR)
                                                           |   (PA.ACAT: LURW)
     ______________________________________________________|
    |              |             |             |           |
   MPP            PVF           PPPF          PDF          BACKUP
(Sys Admin: RW)(DEFAULT)     (DEFAULT)     (DEFAULT)    (Sys Admin: ALL)
(Login Srv: R)                                          (PA.ACAT: DALURW)
(PA.ACCR:   R)

            PA.ACAT = System_Administrator: RW
                      .PROJECT_ADMINISTRATORS$: RW


SAD     = System Administration Directory    UVF     = User Validation File
SDF     = System                             MGF     = Master Group File
MPF     = Master Project File                PD      = <not sure>
MPP     = Master Project Profile             PVF     = Project Validation File
PPPF    = <not sure>                         PDF     = <not sure>
BACKUP  = Backup of PA.ACAT                  PA.ACAT = Project Admin Access Cat

_______________________________________________________________________________

HACKING OLDER (OUTDATED) REVISIONS OF PRIMOS


I hadn't planned on covering any pre-19.x.x revisions of PRIMOS,  but I thought
some of  you avid network  hackers might be interested to know  the very basics
about these insecure revisions.

Revisions 18.x.x,  17.x.x  and earlier will actually  tell you whether or not a
given  user  ID is  valid before  asking  you for  a password.  This makes it a
rather trivial task  of determining whether or not a  given account exists.  In
my experiences early revisions of  PRIMOS  will  be found only on obscure nets,
like those in  Brazil and Japan.  On these  archaic revisions of PRIMOS you can
enter  CTRL-C as the password of a valid  account and automatically  bypass the
front  door password  security.  Very nice.  You can barely  find these ancient
revisions anymore.

These older revisions are  not at all  like the current revisions of PRIMOS.  I
suggest reading the 'HACKING PRIMOS' article by  Nanuk of the North if you plan
on penetrating these revisions, as his file was written in the days when 18.x.x
was common.

Not really much more that I can say, as you'll probably never come across these
revisions and even if you do, the command structure they use is enough to cause
severe gastro-intestinal disorders.

_______________________________________________________________________________

SIMPLIFIED MEANS OF ATTACHING TO SUB-UFD'S


Sub-directories are great,  but when you start going deeper  than 2 levels on a
Prime it starts getting to be a pain.  Full pathnames get to be depressing when
you are  6 or 7  levels deep.  Enter the UP and DOWN external commands.  Recall
that I mentioned these commands in Part II of this series.  These externals are
found on most Primes,  but there are a few  that do not have them available.

********  I did not write  these utilities.  Many versions  exist on  different
* NOTE *  systems.  I have yet to see copyright notieces, so I will assume that
********  they are either examples from the CPL Reference Manual or Pub Domain.

_______________________________________________________________________________

DOWN.CPL SOURCE CODE


/* DOWN.CPL, DOWN_ATTACH, WHO_KNOWS, 02/24/89
/* An external command to simplify down-ATTACHing.
/*
/* START-CODE:
/*
   &args path
   &do &while [null %path%]
       &s path := [response 'UFD to Down-ATTACH to' '']
   &end
   a *>%path%
   type Now attached to %path%
   &return
/*
/* END-CODE

_______________________________________________________________________________

UP.CPL SOURCE CODE


/* UP.CPL, UP_ATTACH, WHO_KNOWS, 02/24/89
/* An external command to simplify up-ATTACHing.
/*
/* START-CODE:
/*
   &args num:dec=1
   &s path := [dir [pathname *]]
   &do I := 1 &to %num%
       &s path := [dir [pathname %path%]]
   &end
   a %path%
   type Now attached to %path%
   &return
/*
/* END-CODE

_______________________________________________________________________________

A PRIMOS IMPLEMENTATION OF THE UNIX "FILE" COMMAND


I really like the UNIX "file" command.  Instead of accidentally viewing a comp-
iled program or other non-ASCII file,  I check and see if  it is a text file by
using the "file" command.  PRIMOS, unfortunately,  does not have a simple means
for you to obtain such information.  You can best get  the information from one
of the LD arguments,  but that's a pain in the a**! when you just want the stats
one one file and the UFD  has lots of  files in it.  Thus was caused the PRIMOS
implementation of the UNIX "file" command.

The UNIX  "file" command simply  tells you the filetype  of the specified file.
The PRIMOS implementation of "file" tells you:

        o  Filename
        o  Filetype
        o  Size (in bytes)
        o  Date and time of last modification

Following are the filetypes understandable by the FILE command:

        o  ACAT for an access category
        o  DAM for a direct access file
        o  SAM for a sequential access file (ASCII text)
        o  SEGDAM for a segmented direct access file
        o  SEGSAM for a segmented sequential access file
        o  UFD for a directory (UFD)
        o  UNKNOWN if file is not of a recognized type

CAVEAT - all error messages when using "file" are suppressed.
         no wildcard capability (yet).

_______________________________________________________________________________

FILE.CPL SOURCE CODE


/* FILE.CPL, FILE_INFORMATION, VOID, 02/24/89
/* PRIMOS version of the UNIX System V 'file' command.
/* This source code is in the public domain.
/*
/* Version    Date    Programmer  Description
/*   1.0    02/02/89  Violence    Initial coding.
/*   2.0    02/24/89  Violence    Words converted into bytes.
/*
/* START-CODE:
/*
          &args filename
          &severity &warning &ignore
          &if [null %filename%] &then &goto usage
          &s filename := [translate %filename%]
          &if [exists %filename%] &then &goto file
          type 'File not found.  '%filename%' (FILE)'
          &return
/*
/* Display file attributes
/*
   &label file
          &s ftyp := [attrib %filename% -type -br]
          &s size := [attrib %filename% -l -br]
          &s datm := [attrib %filename% -dtm -br]
          &s size := [calc %size% * 2]
          &if %size% = 1 &then &s size := %size%' byte'
          &else size := %size%' bytes'
          type %filename%': '%ftyp%' ('%size%'); Last Modified '%datm%
          &return
/*
/* Display FILE usage
/*
   &label usage
          type
          type 'Usage: FILE {filename}'
          type
          &return
/*
/* END-CODE

_______________________________________________________________________________

CONCLUSION


All in all I find the PRIMOS  operating system excellent,  both in power and in
user friendliness.  One can do almost anything from  PRIMOS and it's associated
utilities and language systems.  It's every bit  as capable as VAX/VMS or UNIX.

Primes have,  on the  down side,  become a lot  more difficult  to hack.  Prime
Computer, Inc.  has become aware of the  increasing popularity  of  PRIMOS with
hackers and have taken the appropriate steps  in alerting it's customers.  This
probably has already affected you.  Defaults are gone.  System passwords are in
effect.  Increased  system security.  This makes hacking  Prime computers these
days a d***! sight more difficult  than it once was.  To this you may  thank all
those people that abused NETLINK on PRIMENET systems and so forth.

Enjoy a Prime when you get in one.  Experiment with the operating system.  Most
of all,  however, LEARN!  One need not be malicious to learn.  When experiment-
ing, experiment on *YOUR OWN* filesystems,  not those of the owners.  As I have
said, it is more difficult to obtain  PRIMOS and PRIMENET  accounts these days.
Cherish and benefit from them,  but do not act like an idiot  and end up making
it harder for everyone else.

_______________________________________________________________________________

REFERENCES


FDR3108-190L (PRIMOS Commands Reference Guide)
FDR3104-101B (New User's Guide to EDITOR and RUNOFF)
FDR3250 (PRIMOS Commands Programmer's Companion)
FDR3341 (BASIC/VM Programmer's Companion)

Hacking PRIMOS Volumes I and II (by Codes Master)
Hacking PRIMOS I, II, and III (by Evil Jay)
PRIMOS: Networking Communications (by Magic Hassan)
PRIMOS Part I (by Carrier Culprit, LOD/H Tech Journal #2)
PRIMOS (by Nanuk of the North)

_______________________________________________________________________________

ACKNOWLEDGEMENTS


During the course of the writing of this series  many people have lent me their
help and support.  I now wish to acknowledge those that aided me in this task.

Thrashing Rage - Thanks for the ideas, proofreading, and help in recovering the
        original documents when the  work disk  got 164 disk errors.  You saved
        me from two weeks of retyping!  Thanks!

The Beekeeper - Thanks for  getting the  documents to the right people at 2600,
        "The Hackers' Quarterly".  Whether or not it actually gets published or
        not is not important.  What is  important is that you  thought it was a
        worthy-enough series for possible publication.  Thanks!

Mad Hacker - Without all of our hours and hours of discussion this series would
        not be what it is now.  Thanks!

And to all the hackers that have written about the  PRIMOS  operating system in
the past goes a hearty thanks.  Couldn't have done it without you guys.  Thanks
goes to:  Prime Suspect,  Magic Hassan,  The Codes Master, Necrovore,  Nanuk of
the North, and The Force.  Thanks guys!

_______________________________________________________________________________

EPILOG - THE END OF A SERIES


Here ends the last part of my PRIMOS series.  I hope that you have learned some
about PRIMOS and how it can be  extremely useful to the hacker.  If you wish to
contact me, you can reach me on the following systems:

         2600 BBS #4 - The BeeHIve           The Dallas Hack Shack
         P-80 Systems International          The Lost City of Atlantis

I will do my  best to answer all  questions fielded to me  regarding the PRIMOS
operating system.  Thanks for a successful series!       -- Violence  (03/8/89)

     May the forces of darkness become confused on the way to your house.

_______________________________________________________________________________

        End of Part V of "Introduction to the PRIMOS Operating System"
_______________________________________________________________________________


