home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / b / krtcvt.min < prev    next >
Text File  |  2020-01-01  |  5KB  |  345 lines

  1.     .title    KRTCVT.MIN  File name and misc data conversions
  2.     .ident    "V03.62"
  3.  
  4. ; /62/    31-May-93  Billy Youdelman
  5.  
  6. ;    Copyright 1984 Change Software, Inc.
  7.  
  8.     .include "IN:KRTMAC.MIN"
  9.     .iif ndf  KRTINC  .error    <; .include for IN:KRTMAC.MIN failed>
  10.  
  11.     .macro    chtype    ch,val
  12.     . = chtype+ch
  13.     .byte    val
  14.     .endm    chtype
  15.  
  16.     .psect    chtype    ,ro,d,lcl,rel,con
  17.     .sbttl    Generate character class table for file name state parsing
  18.  
  19. chtype:    .rept    128.
  20.     .byte    0
  21.     .endr
  22.  
  23.     chtype     0    ,1
  24.     chtype    lf    ,1
  25.     chtype    cr    ,1
  26.     chtype    space    ,7
  27.     chtype    '(    ,2
  28.     chtype    ')    ,3
  29.     chtype    comma    ,6
  30.     chtype    '.    ,5
  31.     chtype    '/    ,4
  32.     $ch = '0
  33.     .rept    10.
  34.     chtype    $ch    ,7
  35.     $ch = $ch+1
  36.     .endr
  37.     chtype    '<    ,2
  38.     chtype    ':    ,4
  39.     chtype    73    ,1
  40.     chtype    '>    ,3
  41.     $ch = 'A&137
  42.     .rept    32
  43.     chtype    $ch    ,7
  44.     $ch = $ch+1
  45.     .endr
  46.     chtype    '[    ,2
  47.     chtype    '\    ,4
  48.     chtype    ']    ,3
  49.     $ch = 'a!40
  50.     .rept    32
  51.     chtype    $ch    ,7
  52.     $ch = $ch+1
  53.     .endr
  54.  
  55.  
  56.     .psect    $pdata
  57.     .sbttl    NAMCVT state transition table
  58.  
  59. ptable:
  60. .byte    1    ,30.    ,2    ,-1    ,11.    ,21.    ,-1    ,21.
  61. .byte    2    ,30.    ,-1    ,3    ,-1    ,2    ,2    ,2
  62. .byte    3    ,30.    ,-1    ,-1    ,14.    ,23.    ,3    ,23.
  63. .byte    4    ,30.    ,30.    ,-1    ,-1    ,24.    ,-1    ,24.
  64. .even
  65.  
  66. paction:.word    null    ,init    ,copy    ,fin
  67.  
  68.     .psect    $code
  69.     .sbttl    Parse file_specification to get only filename.type
  70.  
  71. namcvt::save    <r1,r2,r3,r4>
  72.     mov    @r5    ,r2
  73.     mov    2(r5)    ,r4
  74.     clrb    @r4
  75.     mov    #1    ,r1
  76.  
  77. 10$:    tst    r1
  78.     beq    80$
  79.     clr    r3
  80.     bisb    (r2)+    ,r3
  81.     bic    #^c177    ,r3
  82.     dec    r1
  83.     mul    #10    ,r1
  84.     movb    chtype(r3),r0
  85.     add    r0    ,r1
  86.     movb    ptable(r1),r1
  87.     beq    80$
  88.     bmi    90$
  89.     clr    r0
  90.     div    #10.    ,r0
  91.     asl    r0
  92.     jsr    pc    ,@paction(r0)
  93.     br    10$
  94.  
  95. 80$:    clr    r0
  96.     clrb    @r4
  97.     br    100$
  98.  
  99. 90$:    mov    #-1    ,r0
  100. 100$:    unsave    <r4,r3,r2,r1>
  101.     return
  102.  
  103.     .sbttl    Action routines for the file name parser
  104.  
  105. null:    return
  106.  
  107. init:    mov    2(r5)    ,r4
  108.     clrb    @r4
  109.     return
  110.  
  111. copy:    movb    r3    ,(r4)+
  112.     clrb    @r4
  113.     return
  114.  
  115. fin:    save    <r0,r3>
  116.     mov    2(r5)    ,r0
  117.     tstb    @r0
  118.     beq    30$
  119. 10$:    tstb    @r0
  120.     beq    20$
  121.     cmpb    @r0    ,#'.
  122.     beq    30$
  123.     inc    r0
  124.     br    10$
  125. 20$:    movb    #'.    ,r3
  126.     call    copy
  127. 30$:    unsave    <r3,r0>
  128.     return
  129.  
  130.  
  131.     .sbttl    Check file extent to determine its type
  132.  
  133. chkext::save    <r1,r2,r3,r4>
  134.     mov    @r5    ,r1
  135.     strlen    r1
  136.     tst    r0
  137.     beq    290$
  138.     add    r0    ,r1
  139. 210$:    cmpb    -(r1)    ,#'.
  140.     beq    220$
  141.     sob    r0    ,210$
  142.     br    290$
  143. 220$:    copyz    r1    ,#chkbuf,#5
  144.     mov    #chkbuf    ,r1
  145.     strlen    r1
  146.  
  147. 223$:    mov    #4    ,r3
  148.     sub    r0    ,r3
  149.     beq    225$
  150.     blt    290$
  151.     mov    r1    ,r2
  152.     add    r0    ,r2
  153. 224$:    movb    #space    ,(r2)+
  154.     sob    r3    ,224$
  155.     clrb    @r2
  156.  
  157. 225$:    mov    bintyp    ,r2
  158. 230$:    mov    r2    ,r3
  159.     tstb    @r3
  160.     beq    290$
  161.     mov    r1    ,r4
  162.     call    310$
  163.     cmpb    r0    ,(r3)+
  164.     bne    240$
  165.     call    310$
  166.     cmpb    r0    ,(r3)+
  167.     bne    240$
  168.     call    310$
  169.     cmpb    r0    ,(r3)+
  170.     bne    240$
  171.     call    310$
  172.     cmpb    r0    ,(r3)+
  173.     beq    280$
  174. 240$:    add    #4    ,r2
  175.     br    230$
  176.  
  177. 280$:    mov    #1    ,r0
  178.     br    300$
  179. 290$:    clr    r0
  180. 300$:    unsave    <r4,r3,r2,r1>
  181.     return
  182.  
  183. 310$:    movb    (r4)+    ,r0
  184.     cmpb    r0    ,#'A!40
  185.     blo    320$
  186.     cmpb    r0    ,#'Z!40
  187.     bhi    320$
  188.     bicb    #40    ,r0
  189. 320$:    return
  190.  
  191.     .save
  192.     .psect    $rwdata    ,rw,d,lcl,rel,con
  193. chkbuf:    .byte    0 ,0 ,0 ,0 ,0 ,0
  194.     .restore
  195.  
  196.  
  197.     .sbttl    File extents that are likely to be binary
  198.  
  199. binini::strcpy    bintyp    ,#binl
  200.     return
  201.  
  202.     .save
  203.     .psect    $pdata
  204.     .dsabl    lc
  205. binl:    .ascii    ".BAC"
  206.     .ascii    ".BAX"
  207.     .ascii    ".BIN"
  208.     .ascii    ".BOT"
  209.     .ascii    ".BUP"
  210.     .ascii    ".CAL"
  211.     .ascii    ".CRF"
  212.     .ascii    ".DEV"
  213.     .ascii    ".DSK"
  214.     .ascii    ".EXE"
  215.     .ascii    ".LDA"
  216.     .ascii    ".MLB"
  217.     .ascii    ".OBJ"
  218.     .ascii    ".REL"
  219.     .ascii    ".RTS"
  220.     .ascii    ".SAV"
  221.     .ascii    ".SML"
  222.     .ascii    ".STB"
  223.     .ascii    ".SYS"
  224.     .ascii    ".TSX"
  225.     .byte    0
  226.     .even
  227.     .enabl    lc
  228.     .restore
  229.  
  230.  
  231.     .sbttl    Convert invalid characters to something reasonable
  232.  
  233.     .save
  234.     .psect    $pdata
  235. defchr::.byte    'X&137
  236.     .even
  237.     .restore
  238.  
  239. fixfil::save    <r1,r2,r3>
  240.     mov    @r5    ,r1
  241.     mov    2(r5)    ,r2
  242.     clr    r3
  243. 10$:    tstb    @r1
  244.     beq    35$
  245.     scan    @r1    ,#okchr
  246.     tst    r0
  247.     bne    20$
  248.     mov    #er$fnm    ,r3
  249.     movb    defchr    ,@r2
  250.     br    30$
  251. 20$:    movb    @r1    ,@r2
  252. 30$:    inc    r1
  253.     inc    r2
  254.     br    10$
  255.  
  256. 35$:    clrb    @r2
  257.     sub    #256.    ,sp
  258.     mov    sp    ,r1
  259.     mov    2(r5)    ,r2
  260.     copyz    r2    ,r1  ,#255.
  261.  
  262.     scan    #':    ,r1
  263.     tst    r0
  264.     beq    37$
  265. 36$:    movb    (r1)+    ,(r2)+
  266.     sob    r0,    36$
  267.  
  268. 37$:    mov    #6    ,r0
  269.  
  270. 40$:    cmpb    (r1)    ,#'.
  271.     beq    70$
  272.     movb    (r1)+    ,(r2)+
  273.     beq    90$
  274. 50$:    sob    r0    ,40$
  275.  
  276. 60$:    tstb    (r1)
  277.     beq    90$
  278.     cmpb    (r1)    ,#'.
  279.     beq    70$
  280.     mov    #er$fnm    ,r3
  281.     inc    r1
  282.     br    60$
  283.  
  284. 70$:    mov    #4    ,r0
  285. 80$:    movb    (r1)+    ,(r2)+
  286.     beq    90$
  287.     sob    r0    ,80$
  288.     tstb    (r1)
  289.     beq    90$
  290.     mov    #er$fnm    ,r3
  291.  
  292. 90$:    clrb    (r2)
  293.     add    #256.    ,sp
  294.  
  295. 100$:    mov    r3    ,r0
  296.     unsave    <r3,r2,r1>
  297.     return
  298.  
  299.     .save
  300.     .psect    $pdata
  301. okchr:    .ascii    "0123456789.:"
  302.     .ascii    "abcdefghijklmnopqrstuvwxyz"
  303.     .ascii    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  304.     .byte    0
  305.     .even
  306.     .restore
  307.  
  308.  
  309.     .sbttl    Unformat a string
  310.  
  311.     .save
  312.     .psect    $rwdata    ,rw,d,lcl,rel,con
  313. ubuf:    .blkb    80.
  314.     .restore
  315.  
  316. unfmts::save    <r1,r2,r3,r4,r5>
  317.     mov    r0    ,r5
  318.     mov    #ubuf    ,r4
  319. 10$:    movb    (r5)+    ,r1
  320.     beq    100$
  321.     cmpb    r1    ,#space
  322.     blo    20$
  323.     movb    r1    ,(r4)+
  324.     br    40$
  325. 20$:    movb    #'\    ,(r4)+
  326.     clr    r0
  327.     div    #10    ,r0
  328.     movb    r1    ,r2
  329.     mov    r0    ,r1
  330.     clr    r0
  331.     div    #10    ,r0
  332.     add    #'0    ,r0
  333.     add    #'0    ,r1
  334.     add    #'0    ,r2
  335.     movb    r0    ,(r4)+
  336.     movb    r1    ,(r4)+
  337.     movb    r2    ,(r4)+
  338. 40$:    br    10$
  339. 100$:    clrb    @r4
  340.     mov    #ubuf    ,r0
  341.     unsave    <r5,r4,r3,r2,r1>
  342.     return
  343.  
  344.     .end
  345.