home *** CD-ROM | disk | FTP | other *** search
/ kermit.columbia.edu / kermit.columbia.edu.tar / kermit.columbia.edu / tu / tuiros.asm < prev    next >
Assembly Source File  |  1991-01-09  |  14KB  |  397 lines

  1. OSTAPE   TITLE '...OS tape to CMS disk utility'
  2.          MACRO
  3. &NAME    $TXT  &MSG,&MSG2
  4.          LCLC  &A,&B
  5. &A       SETC  '&NAME'.'L'
  6. &B       SETC  '*-'.'&NAME'.'-01'
  7. &NAME    DC    AL1(&A)
  8.          DC    C&MSG
  9. &A        EQU   (&B)
  10.          MEND
  11.          SPACE 01
  12.          MACRO
  13. &NAME    $MSG  &MSG
  14.          LCLC  &A
  15.          AIF   ('&MSG' EQ '').BP00
  16. &A       SETC  '&MSG'.'-'.'&SYSECT'
  17. &NAME    LA    R15,&MSG                  ==> MESSAGE
  18. .BP00    ANOP
  19.          BAL   R14,LINEDIT             ISSUE MESSAGE
  20.          MEND
  21.          SPACE 01
  22.          MACRO
  23. &NAME    $CP   &MSG
  24.          LCLC  &A
  25.          AIF   ('&MSG' EQ '').BP00
  26. &A       SETC  '&MSG'.'-'.'&SYSECT'
  27. &NAME    LA    R15,&MSG                  ==> CP COMMAND
  28. .BP00    ANOP
  29.          BAL   R14,DIAG08              ISSUE CP COMMAND
  30.          MEND
  31.          SPACE 01
  32.          MACRO
  33. &NAME    $CMS  &MSG
  34.          LCLC  &A
  35.          AIF   ('&MSG' EQ '').BP00
  36. &A       SETC  '&MSG'.'-'.'&SYSECT'
  37. &NAME    LA    R1,&MSG                   ==> CMS COMMAND
  38. .BP00    ANOP
  39.          BAL   R14,SVC202                CALL CMS COMMAND
  40.          MEND
  41.          EJECT
  42. *****
  43. **         Columbia University Center for Computer Activities
  44. **
  45. **                          OSTAPE
  46. **
  47. **              Written by Eric M Bitterman on 10/31/84
  48. **
  49. **  This program will read thru an OS formatted tape and copy the
  50. **  files on it to a CMS disk, based on the name in the HDR rec.
  51. **
  52. **  To copy this program from tape to a CMS disk, issue the following
  53. **  commands:
  54. **       TAPE REW
  55. **       TAPE FSF
  56. **       FILEDEF  INMOVE TAP1 (RECFM VB LRECL 13000 BLOCK 13000)
  57. **       FILEDEF OUTMOVE DISK OSTAPE ASSEMBLE A (RECFM V LRECL 100)
  58. **       MOVEFILE
  59. **       COPYFILE OSTAPE ASSEMBLE A (RECFM F LRECL 80)
  60. **
  61. **  To generate this program just enter the following CMS commands:
  62. **       ASSEMBLE OSTAPE
  63. **       LOAD OSTAPE
  64. **       GENMOD OSTAPE
  65. **       NUCXLOAD OSTAPE
  66. **
  67. **  To install the files, the installation tape must be attached
  68. **  as 181 and then just enter:  OSTAPE and away it goes.
  69. **
  70. **  The format of this command is:
  71. **       OSTAPE    COPYALL              ( a b d y z )
  72. **                 DUMP fn ft fm        ( a b d y )
  73. **                 DVOL1                ( d e )
  74. **                 GENEXEC fn ft fm     ( a b d )
  75. **                 LOAD fn ft fm        ( b c d )
  76. **                 MODESET              ( d )
  77. **                 SCAN fn ft           ( b c d )
  78. **                 tapcmd nn            ( d )
  79. **                 WVOL1 volser owner   ( d e )
  80. **
  81. **  tapcmd    = BSR BSF ERG FSR FSF REW RUN WTM
  82. **  nn        = number of times this function is to be issued
  83. **  fn/ft/fm  = CMS filename, type and mode
  84. **
  85. **  Options
  86. **  -------
  87. **  a        WTM | NOWTM  BLKSIZE  {4096 | 800}
  88. **  b        PRINT | NOPRINT  TERM  DISK
  89. **  c        EOT  EOF nn
  90. **  d        TAPn  DEN  density  cuu
  91. **  e        REWIND  LEAVE
  92. **  y        APPEND
  93. **  z        INPUT  cuu  OUTPUT  cuu
  94. **
  95. *****
  96.          EJECT
  97. OSTAPE   CSECT
  98.          USING OSTAPE,R12
  99.          B     12(,R15)                SKIP AROUND LITERAL
  100.          DC    CL8'OSTAPE'
  101.          STM   R14,R12,12(R13)         SAVE ENTRY REGISTERS
  102.          LA    R12,00(,R15)            FIX BASE REGISTER
  103.          LA    R14,WORK                ==> OUR SAVE AREA
  104.          USING WORK,R13
  105.          ST    R13,04(,R14)            .....CHAIN BACKWARD
  106.          ST    R14,08(,R13)            .....CHAIN FORWARD
  107.          LR    R13,R14                 ==> OUR SAVE AREA
  108. *****
  109. **  Check for any options.
  110. *****
  111. CHK4OPT  DS   0H
  112.          CLI   08(R1),X'FF'            ARE THERE ANY?
  113.          BE    NOFUNC                  ..... No,  then load to disk
  114.          LA    R15,TAPLIST-10          ==> LIST OF VALID FUNCTIONS
  115. CHK4OPT1 DS   0H
  116.          LA    R15,10(,R15)            BUMP TO NEXT ENTRY
  117.          CLI   00(R15),X'FF'           END OF LIST?
  118.          BE    BADFUNC                 .....YES,  THEN ERROR
  119.          CLC   08(08,R1),00(R15)       MATCH?
  120.          BNE   CHK4OPT1                ..... NO,  THEN CONTINUE
  121.          LH    R15,08(,R15)            GET DISPL TO PROCESS RTN
  122.          B     00(R15,R12)             GO PROCESS OPTION
  123. $FUNC    DS   0H
  124.          MVC   TAPECTL1,08(R1)         MOVE IN THE FUNCTION
  125.          BAL   R14,TAPECOM             ISSUE TAPE COMMAND
  126.          BNZ   BADTAPE                 ....., NG,  THEN ERROR$TXT
  127.          B     RETURN                  DONE
  128.          EJECT
  129. $DUMP    DS   0H
  130. $COPY    DS   0H
  131. $DVOL    DS   0H
  132. $GENX    DS   0H
  133. $LOAD    DS   0H
  134. $MODE    DS   0H
  135. $SCAN    DS   0H
  136. $WVOL    DS   0H
  137.          $MSG  MSG999W                 WARN USER
  138.          LA    R15,04                  SET RETURN CODE
  139.          B     RETURN                  DONE
  140. NOFUNC   DS   0H
  141. *****
  142. **  Rewind the tape to its loadpoint.
  143. *****
  144.          BAL   R14,TAPEREW             REWIND TAPE
  145.          BNZ   BADTAPE                 ..... NG,  THEN ERROR MESSAGE
  146. *****
  147. **  Read thru the file looking for HDR1 records, extract the CMS
  148. **  filename and then FSF the tape.
  149. *****
  150. READ     DS   0H
  151.          BAL   R14,RDTAPE              READ NEXT TAPE RECORD
  152.          BZ    NOTEOF                  .... OK,  SKIP
  153.          CH    R15,=H'02'              WAS IT END OF TAPE?
  154.          BNE   BADTAPE                 ..... NO,  THEN TAPE ERROR
  155.          CLI   EOF,X'FF'               WAS LAST OPERATION EOF?
  156.          BE    BADTAPE                 .....YES,  THEN DONE
  157.          MVI   EOF,X'FF'               SET EOF FLAG
  158.          B     READ
  159.          EJECT
  160. NOTEOF   DS   0H
  161.          MVI   EOF,X'00'               INIT TO ZERO
  162.          CLC   =C'HDR1',BUFFER
  163.          BNE   READ                    ..... NO,  THEN CONTINUE
  164. *****
  165. **  This is the HDR1 now extract the CMS filename.
  166. *****
  167.          LA    R0,17                   MAX LENGTH TO SCAN
  168.          LA    R1,BUFFER+04            ==> BEGIN OF FILEID
  169.          LR    R2,R1                   .....AND HERE TOO
  170.          LA    R3,FN                   ==> WHERE TO STASH VALUE
  171.          LA    R4,02                   SET NUMBER OF FIELDS TO FIND
  172. GETVAL   DS   0H
  173.          MVC   00(08,R3),SPACE         INIT FIELD TO BLANKS
  174. GETVAL1  DS   0H
  175.          CLI   00(R1),C'.'             FOUND?
  176.          BE    GETVAL2                 .....YES,  THEN SKIP
  177.          CLI   00(R1),C' '             FOUND?
  178.          BE    GETVAL2                 .....YES,  THEN SKIP
  179.          LA    R1,01(,R1)              BUMP TO NEXT CHARACTER
  180.          BCT   R0,GETVAL1              CONTINUE
  181. GETVAL2  DS   0H
  182.          LR    R15,R1                  COPY OVER
  183.          SR    R15,R2                  CALC LENGTH OF DATA
  184.          BCTR  R15,R0                  .....AND SET RELATIVE TO ZERO
  185.          C     R15,=F'07'              IS FIELD LENGTH OK?
  186.          BNH   *+08                    .....YES,  THEN SKIP
  187.          L     R15,=F'07'              OTHERWISE SET TO MAX LENGTH
  188.          LTR   R15,R15                 CHECK TO SEE THIS IS VALID
  189.          BM    GETVAL3                 .... NG,  ITS < 00
  190.          MVC   00(*-*,R3),00(R2)       *** EXECUTED INSTRUCTION ***
  191.          EX    R15,*-06                MOVE IN VALUE
  192.          B     GETVAL4
  193. GETVAL3  DS   0H
  194.          MVC   00(08,R3),=CL8'EMB'
  195. GETVAL4  DS   0H
  196.          LA    R1,01(,R1)              BUMP PAST THE DELIMETER
  197.          LR    R2,R1                   .....AND COPY HERE
  198.          LA    R3,08(,R3)              BUMP TO NEXT RESULT FIELD
  199.          BCT   R4,GETVAL               CONTINUE
  200. *****
  201. **  Issue message giving name of this CMS file.
  202. *****
  203.          MVC   S1(08),FN               MOVE IN THE FILENAME
  204.          MVC   S2(08),FT               .....FILETYPE
  205.          MVC   S3(02),FM               .....AND THE FILEMODE
  206.          $MSG  MSG101I                 ISSUE MESSAGE
  207.          EJECT
  208. *****
  209. **  Read in the HDR2 record and extract the LRECL and BLKSIZE.
  210. *****
  211.          BAL   R14,RDTAPE              READ NEXT TAPE RECORD
  212.          MVC   INLRECL(05),BUFFER+10   MOVE IN THE LRECL
  213.          MVC   OUTLRECL(05),BUFFER+10  .....AND HERE TOO
  214.          MVC   INBLOCK(05),BUFFER+05   MOVE IN THE BLOCKSIZE
  215. *****
  216. **  Now skip over any extra HDRx type records.
  217. *****
  218.          BAL   R14,TAPEFSF             FSF
  219. *****
  220. **  Issue the FILEDEF and MOVEFILE commands inorder to copy the
  221. **  program on the tape over to a CMS disk.
  222. *****
  223.          $CMS  FINIS                   CLOSE ALL FILES
  224.          $CMS  INMOVE                  DEFINE MOVEFILE INPUT
  225.          $CMS  OUTMOVE                 DEFINE MOVEFILE OUTPUT
  226.          $CMS  MOVEFILE                COPY DATA
  227.          BNZ   NGMOVE
  228. *****
  229. **  Skip over the EOF file.
  230. *****
  231.          BAL   R14,TAPEFSF
  232.          B     READ                    GET NEXT FILE
  233.          EJECT
  234. RDTAPE   DS   0H
  235.          MVC   TAPECTL1,KREAD          SETUP TO DO READ
  236.          LA    R1,BUFFER               ==> TAPE BUFFER
  237.          STCM  R1,B'0111',TAPECTL4     .....AND SAVE BUFFER ADDR
  238.          LA    R1,80                   GET BUFFER LENGTH
  239.          ST    R1,TAPECTL5             .....AND SAVE IN PLIST
  240.          ST    R14,SAVR14              SAVE RETURN ADDRESS
  241.          BAL   R14,TAPECOM             ISSUE TAPEIO REQUEST
  242.          L     R14,SAVR14              RESTORE RETUN ADDRESS
  243.          L     R0,TAPECTL6             GET LENGTH OF DATA READ
  244.          LTR   R15,R15                 SET CONDITION CODE
  245.          BR    R14                     RETURN
  246. NGMOVE   DS   0H
  247.          LR    R2,R15                  SAVE RETURN CODE
  248.          $MSG  MSG102E
  249.          LR    R15,R2                  RESTORE RETURN CODE
  250.          B     RETURN                  DONE
  251. BADFUNC  DS   0H
  252.          $MSG  MSG998E                 ISSUE ERROR MESSAGE
  253.          LA    R15,04                  SET BAD RETURN CODE
  254.          B     RETURN                  DONE
  255. BADTAPE  DS   0H
  256.          LR    R2,R15                  COPY RETURN CODE HERE
  257.          SLL   R15,01                  MULTIPLY BY TWO
  258.          LA    R15,TPERRS-02(R15)      ==> MESSAGE DISPLACEMENT
  259.          LH    R15,00(,R15)            GET MESSAGE DISPLACEMENT
  260.          AR    R15,R12                 ==>MESSAGE TEXT
  261.          $MSG  ,
  262.          LR    R15,R2                  RESTORE RETURN CODE
  263. RETURN   DS   0H
  264.          L     R13,04(,R13)            ==> PREV SAVE AREA
  265.          L     R14,12(,R13)            RESTORE RETURN ADDRESS
  266.          LM    R0,R12,20(R13)          .....AND THESE TOO
  267.          BR    R14                     ALL DONE
  268. TAPEFSF  DS   0H
  269.          MVC   TAPECTL1,KFSF           FORWARD SPACE THE TAPE
  270.          B     TAPECOM
  271. TAPEREW  DS   0H
  272.          MVC   TAPECTL1,KREW           REWIND TAPE TO LOAD POINT
  273. TAPECOM  DS   0H
  274.          LA    R1,TAPECTL              ==> TAPE PLIST
  275. SVC202   DS   0H
  276.          NOPR  R14
  277.          SVC   202
  278.          DC    AL4(01)
  279.          LTR   R15,R15
  280.          BR    R14
  281.          EJECT
  282. LINEDIT  DS   0H
  283.        LINEDIT TEXTA=(R15),RENT=NO,DOT=NO,COMP=NO,DISP=ERRMSG,         X
  284.                SUB=(CHARA,S1,CHARA,S2,CHARA,S3),                       X
  285.                MF=(E,EDWORK)
  286.          MVC   S1(SUBLEN),S1-01        SET TO BLANKS
  287.          BR    R14                     RETURN
  288.          EJECT
  289.          LTORG
  290. WORK     DC   9D'00'
  291. SAVR14   DC    F'00'                   SAVE REGISTER R14 HERE
  292. BUFFER   DC    CL80' '                 TAPE BUFFER
  293. SPACE    DC    CL8' '
  294. EOF      DC    X'00'
  295. INMOVE   DS   0D
  296.          DC    CL8'FILEDEF'
  297.          DC    CL8'INMOVE'
  298.          DC    CL8'TAP1'
  299.          DC    CL8'('
  300.          DC    CL8'RECFM'
  301.          DC    CL8'VB'
  302.          DC    CL8'LRECL'
  303. INLRECL  DC    CL8'200'
  304.          DC    CL8'BLOCK'
  305. INBLOCK  DC    CL8'4000'
  306.          DC   8X'FF'
  307. OUTMOVE  DS   0D
  308.          DC    CL8'FILEDEF'
  309.          DC    CL8'OUTMOVE'
  310.          DC    CL8'DISK'
  311. FN       DC    CL8'        '
  312. FT       DC    CL8'        '
  313. FM       DC    CL8'A1      '
  314.          DC    CL8'('
  315.          DC    CL8'RECFM'
  316.          DC    CL8'VB'
  317.          DC    CL8'LRECL'
  318. OUTLRECL DC    CL8'300'
  319.          DC   8X'FF'
  320. FINIS    DS   0D
  321.          DC    CL8'FINIS'
  322.          DC    CL8'*'
  323.          DC    CL8'*'
  324.          DC    CL8'*'
  325.          DC   8X'FF'
  326. MOVEFILE DS   0D
  327.          DC    CL8'MOVEFILE'
  328.          DC   8X'FF'
  329.          EJECT
  330. *****
  331. **  TAPEIO plist.
  332. *****
  333. TAPECTL  DS   0D
  334.          DC    CL8'TAPEIO'
  335. TAPECTL1 DC    CL8'FSF'                FUNCTION
  336. TAPECTL2 DC    CL4'0181'               DEVICE ADDRESS
  337. TAPECTL3 DC    BL1'0'                  MODE
  338. TAPECTL4 DC    AL3(00)                 BUFFER ADDRESS
  339. TAPECTL5 DC    F'00'                   BUFFER LENGTH
  340. TAPECTL6 DC    F'00'                   NUMBE OF BYTES READ
  341.          DC   8X'FF'
  342. TAPLIST  DS   0D
  343. *****
  344. **  Standalone functions.
  345. *****
  346. KREW     DC    CL8'REW     ',AL2($FUNC-OSTAPE)
  347.          DC    CL8'RUN     ',AL2($FUNC-OSTAPE)
  348.          DC    CL8'ERG     ',AL2($FUNC-OSTAPE)
  349.          DC    CL8'BSR     ',AL2($FUNC-OSTAPE)
  350.          DC    CL8'BSF     ',AL2($FUNC-OSTAPE)
  351.          DC    CL8'FSR     ',AL2($FUNC-OSTAPE)
  352. KFSF     DC    CL8'FSF     ',AL2($FUNC-OSTAPE)
  353.          DC    CL8'WTM     ',AL2($FUNC-OSTAPE)
  354. *****
  355. **  Hi level functions.
  356. *****
  357.          DC    CL8'DUMP    ',AL2($DUMP-OSTAPE)
  358.          DC    CL8'COPYALL ',AL2($COPY-OSTAPE)
  359.          DC    CL8'DVOL1   ',AL2($DVOL-OSTAPE)
  360.          DC    CL8'GENEXEC ',AL2($GENX-OSTAPE)
  361.          DC    CL8'LOAD    ',AL2($LOAD-OSTAPE)
  362.          DC    CL8'MODESET ',AL2($MODE-OSTAPE)
  363.          DC    CL8'SCAN    ',AL2($SCAN-OSTAPE)
  364.          DC    CL8'WVOL1   ',AL2($WVOL-OSTAPE)
  365.          DC   2X'FF'
  366. KREAD    DC    CL8'READ'
  367. TPERRS   DS   0H
  368.          DC    AL2(MSG204I-OSTAPE)    RC=01
  369.          DC    AL2(MSG205I-OSTAPE)    RC=02
  370.          DC    AL2(MSG206I-OSTAPE)    RC=03
  371.          DC    AL2(MSG207I-OSTAPE)    RC=04
  372.          DC    AL2(MSG208I-OSTAPE)    RC=05
  373.          DC    AL2(MSG209I-OSTAPE)    RC=06
  374.          DC    AL2(00)                Place holder
  375.          DC    AL2(MSG210I-OSTAPE)    RC=08
  376.          EJECT
  377.          DC    C' '
  378. S1       DC    CL8' '
  379. S2       DC    CL8' '
  380. S3       DC    CL8' '
  381. SUBLEN    EQU   (*-S1)
  382. EDWORK LINEDIT MF=L,MAXSUBS=03
  383. MSG101I  $TXT  '........ ........ ..'
  384. MSG102E  $TXT  'MOVEFILE terminated with a non-zero return code'
  385. MSG204I  $TXT  'Invalid function or parameter list'
  386. MSG205I  $TXT  'END-OF-FILE or END-OF-TAPE encountered'
  387. MSG206I  $TXT  'Permanent I/O error'
  388. MSG207I  $TXT  'Illegal device id specified'
  389. MSG208I  $TXT  'Tape not attached'
  390. MSG209I  $TXT  'Tape is file protected'
  391. MSG210I  $TXT  'Incorrect length'
  392. MSG998E  $TXT  'Invalid or omitted OSTAPE function'
  393. MSG999W  $TXT  'Function not implemented'
  394.          PRINT NOGEN
  395.         REGEQU ,
  396.          END
  397.