Annotation of researchv10dc/cmd/oworm/scsi/gram.y, revision 1.1

1.1     ! root        1: %start         input
        !             2: 
        !             3: %{
        !             4: 
        !             5: #include       "scsi.h"
        !             6: 
        !             7: %}
        !             8: 
        !             9: %token         DISK ID RELEASE HELP SET EJECT INQUIRY READ CAPACITY SENSE
        !            10: %token         NUMBER EXT SIDEA SIDEB ALL RESET SLEEP START STOP STATUS
        !            11: %token         ECHO ERROR MEDIA WORM WRITE DIAGNOSTIC STRING COPY CONFIG
        !            12: %token         TEST INTERNAL ALTERNATE
        !            13: 
        !            14: %type <str>    STRING
        !            15: %type <num>    NUMBER drive side shelf optdrive
        !            16: 
        !            17: %union {
        !            18:        char *str;
        !            19:        int num;        /* 32 bits */
        !            20: }
        !            21: 
        !            22: %%
        !            23: 
        !            24: input  :       /* nothing */
        !            25:        |       input line error '\n'
        !            26:        |       input line '\n'
        !            27:        |       input line ';'
        !            28:        |       input line error ';'
        !            29:        ;
        !            30: 
        !            31:        /*
        !            32:                help can be done explicitly by :help info::
        !            33:        */
        !            34: line   :               /* nothing */
        !            35:        |       ALTERNATE optdrive  { s_alternate($2); }
        !            36:        |       CAPACITY optdrive   { s_capacity($2, (long *)0, (long *)0); }
        !            37:        |       CONFIG { s_config(); }
        !            38:        |       COPY drive NUMBER NUMBER drive NUMBER {/*:COPY sdrive sstart nblocks ddrive dstart:: */
        !            39:                        s_copy($2, $3, $4, $5, $6);
        !            40:                }
        !            41:        |       DISK EJECT drive  { s_diskeject($3); }
        !            42:        |       DISK ID drive  { s_diskid($3); }
        !            43:        |       DISK RELEASE drive shelf side  { s_diskrelease($4, $5, $3, 1); }
        !            44:        |       DISK RELEASE drive  { s_diskrelease(-1, A, $3, 1); }
        !            45:        |       DISK SET shelf side drive  { s_diskset($3, $4, $5, 1); }
        !            46:        |       ECHO NUMBER  { print(">> %d <<\n", $2); }
        !            47:        |       HELP  { help(); }
        !            48:        |       ID drive  { scsiid($2); }
        !            49:        |       INQUIRY {
        !            50:                        int i;
        !            51:                        for(i = 0; i<8; i++)
        !            52:                                s_inquiry(scsi_id, i);
        !            53:                }
        !            54:        |       INQUIRY drive  { s_inquiry(scsi_id, $2); }
        !            55:        |       INTERNAL { s_internal(-1, 0); }
        !            56:        |       INTERNAL NUMBER optdrive  { s_internal($2, $3); }
        !            57:        |       MEDIA drive NUMBER NUMBER  { s_media($2, $3, $4, 0); }
        !            58:        |       MEDIA drive NUMBER NUMBER STRING  { s_mediaf($2, $3, $4, $5); } /*:MEDIA drive start nblocks \"filename\"::*/
        !            59:        |       EXT MEDIA drive NUMBER NUMBER  { s_media($3, $4, $5, 1); }
        !            60:        |       READ drive NUMBER  {
        !            61:                        struct scsi_o output;
        !            62:                        s_read($2, $3, 1, &output);
        !            63:                        scsiodump(output.data, 1024);
        !            64:                }
        !            65:        |       READ ID drive  {
        !            66:                        char name[256];
        !            67: ;
        !            68:                        s_readid($3, name);
        !            69:                        print("id='%s'\n", name);
        !            70:                }
        !            71:        |       RESET  { s_reset(); }
        !            72:        |       SENSE drive { s_sense($2, 0); }
        !            73:        |       EXT SENSE drive { s_sense($3, 1); }
        !            74:        |       SLEEP NUMBER  { sleep($2); }
        !            75:        |       START drive { s_start($2); }
        !            76:        |       STATUS drive { s_status($2, (struct scsi_o *)0); }
        !            77:        |       STATUS { s_status(0, (struct scsi_o *)0); }
        !            78:        |       STOP drive  { s_stop($2); }
        !            79:        |       TEST drive { s_testunit(scsi_id, $2); }
        !            80:        |       WORM drive { s_worm($2, 1); }
        !            81:        |       WORM drive NUMBER { s_worm($2, $3); } /*:WORM drive start:: */
        !            82:        |       WRITE drive NUMBER { s_write($2, $3, 1); }
        !            83:        |       WRITE drive NUMBER NUMBER { s_write($2, $3, $4); } /*:WRITE drive start n:: */
        !            84:        ;
        !            85: 
        !            86: drive  :       NUMBER
        !            87:        ;
        !            88: 
        !            89: optdrive:      NUMBER
        !            90:        |       { $$ = 0; }
        !            91:        ;
        !            92: 
        !            93: shelf  :       NUMBER
        !            94:        ;
        !            95: 
        !            96: side   :       SIDEA  { $$ = 0; }
        !            97:        |       SIDEB   { $$ = 1; }
        !            98:        ;
        !            99: 
        !           100: %%
        !           101: 
        !           102: yywrap()
        !           103: {
        !           104:        return(1);
        !           105: }
        !           106: 
        !           107: yyerror(s1, s2)
        !           108:        char *s1, *s2;
        !           109: {
        !           110:        fprint(2, s1, s2);
        !           111:        fprint(2, "\n");
        !           112: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.