home *** CD-ROM | disk | FTP | other *** search
/ kermit.columbia.edu / kermit.columbia.edu.tar / kermit.columbia.edu / cpm86 / cn8fil.a86 < prev    next >
Text File  |  1988-08-15  |  14KB  |  529 lines

  1. ; * * * * * * * * * * * * * * *  version 2.9  * * * * * * * * * * * * * * *
  2. ; [34c]    Add sorted wildcard SENDs with starting filename
  3. ; * * * * * * * * * * * * * * *  version 2.8  * * * * * * * * * * * * * * *
  4. ; [32c]    Allow replacement of output filename with trailer from RECEIVE.
  5. ; * * * * * * * * * * * * * * *  version 2.7  * * * * * * * * * * * * * * *
  6. ; [31]    Fix display of file renaming.
  7. ;    RonB, 05/05/84
  8. ; [30c] Isolate ANSI escape sequences for machine independence.
  9. ; [29g]  Add 8th bit quoting
  10. ;    RonB, 04/15/84
  11. ; * * * * * * * * * * * * * * *  version 2.6  * * * * * * * * * * * * * * *
  12. ; [28d]  Improve input filename processing, allow valid special chars
  13. ;    RonB, 03/27/84
  14. ; [23]    Modification to GTCEOF to fix ASCII mode transfer
  15. ; * * * * * * * * * * * * * * *  version 2.4  * * * * * * * * * * * * * * *
  16. ; [Rg]    ^X/^Z file interruption.  Slight mod to GTNFIL.    Rg, 2/84
  17. ; * * * * * * * * * * * * * * *  version 2.1  * * * * * * * * * * * * * * *
  18. ;  [par] Added calls to set parity, strip parity on input if
  19. ;    other than none parity is called for.
  20. ;     JD, 2/84
  21. ;  [16]    Add file-mode ASCII or BINARY processing.
  22. ;    RonB,01/02/84
  23. ;  [11]    Capitalize and parse filename being received.
  24. ;    RonB,12/27/83
  25. ;  [9]    Fix filename parsing, and add wildcard ability.
  26. ;    RonB,12/26/83
  27. ; * * * * * * * * * * * * * * *  version 2.0  * * * * * * * * * * * * * * *
  28.     CSEG $
  29.  
  30. ;    Get the file name (including host to micro translation)
  31.  
  32. gofil:    cld
  33.     push    ds
  34.     pop    es
  35.     mov    si, offset data
  36.     mov    di, offset fcb
  37.     mov    al,0
  38.     stosb
  39.     mov    cx,11
  40.     mov    al,' '
  41.     rep stosb
  42.     mov    cx,24
  43.     mov    al,0
  44.     rep stosb
  45.     mov    di, offset fcb+1
  46.     mov    ah,0
  47. gofil1:    lodsb            ;Get a filename character
  48.     cmp    al,'.'
  49.     je    gofil2
  50.     cmp    al,0
  51.     je    gofil4
  52.     cmp    ah,8
  53.     jae    gofil1
  54.     call    gofl20        ;Capitalize, and replace strange chars ;[11]
  55.     stosb
  56.     inc    ah
  57.     jmps    gofil1
  58. gofil2:    mov    di, offset fcb+9
  59.     mov    ah,0
  60. gofil3:    lodsb            ;Get a file type character
  61.     cmp    al,'.'
  62.     je    gofil4
  63.     cmp    al,0
  64.     je    gofil4
  65.     cmp    ah,3
  66.     jae    gofil4
  67.     call    gofl20        ;Capitalize, and replace strange chars ;[11]
  68.     stosb
  69.     inc    ah
  70.     jmps    gofil3
  71. gofil4:    cmp    byte ptr fcb+1,' ' ;Any chars in first field?    ;[32c] begin
  72.     jne    gofil5        ; if not, set filename to '&'
  73.     mov    byte ptr fcb+1,'&'
  74. gofil5:    mov    si, offset fcb2+11 ;Replace with RECEIVE trailer
  75.     mov    di, offset fcb+11
  76.     mov    temp2, di
  77.     mov    ah,' '
  78. gofl5b:    mov    al,[si]        ;Get character from replacement filename
  79.     cmp    al,'?'
  80.     je    gofl5c
  81.     mov    [di],al        ;If not wild, simply replace existing letter
  82.     cmp    al,' '
  83.     je    gofl5c
  84.     mov    ah,'-'        ; and replace subsequent spaces with '-'
  85. gofl5c:    cmp    byte ptr [di],' '
  86.     jne    gofl5d        ;Replace spaces in filename with filler char
  87.     mov    [di],ah        ; either a space or a '-'.
  88.     cmp    ah,' '
  89.     jne    gofl5d
  90.     mov    temp2,di    ;Mark location where last space occurred
  91. gofl5d:    dec    di
  92.     dec    si
  93.     cmp    si,offset fcb2+8
  94.     jne    gofl5e
  95.     mov    ah,' '
  96. gofl5e:    cmp    si,offset fcb2
  97.     jae    gofl5b
  98.     sub    temp2,di
  99.     dec    temp2
  100.     cmp    temp2,8
  101.     jbe    gofl5f
  102.     mov    temp2,8
  103. gofl5f:    call    clrfln
  104.     mov    dx, offset fcb    ;Print the file name.
  105.     call    tfile                        ;[32c] end
  106.     cmp    flwflg, 0    ;Is file warning on?
  107.     jnz    gofl5x
  108.     jmp    gofil9        ;If not, just proceed.
  109. gofl5x:    mov    dx, offset fcb
  110.     call    openf        ;See if the file exists.
  111.     cmp    al, 0FFH    ;Does it exist?
  112.     jnz    gofil7
  113.     jmp    gofil9        ;If not create it.
  114.  
  115. gofil7:    mov    dx, offset scrfr ;Move cursor.
  116.     call    poscur                        ;[30c]
  117.     mov    dx, offset infms5 ;Inform the user we are renaming the file.
  118.     call    tmsg
  119.     mov    cx, temp2    ;Get the length of the file name. ;[32c] begin
  120.     mov    al, 0        ;Says if first field is full.
  121. gofil8:    cmp    cl, 8        ;Is the first field full?
  122.     jne    gofl81
  123.     mov    al, 0FFH    ;Set a flag saying so.
  124. gofl81:    mov    bx, offset fcb    ;Get the FCB.
  125.     add    bx, cx        ;Add in the character number.
  126.     mov    ah, '&'
  127.     mov    [bx], ah    ;Replace the char with an ampersand.
  128.     push    ax
  129.     push    bx
  130.     push    cx
  131.     mov    dx, offset fcb    ;See if the file exists.
  132.     call    openf
  133.     pop    cx
  134.     pop    bx
  135.     cmp    al, 0FFH    ;Does it exist?
  136.     pop    ax
  137.     jz    gofl89        ;If not create it.
  138.     cmp    al, 0        ;Get the flag.
  139.     jz    gofl83
  140.     dec    cl        ;Decrement the number of chars.
  141.     cmp    cl, 0
  142.     jz    gofl88        ;If no more, die.
  143.     jmp    gofl81
  144. gofl83:    inc    cl        ;Increment the number of chars.
  145.     jmp    gofil8                        ;[32c] end
  146.  
  147. gofl88:    mov    dx, offset screrr
  148.     call    poscur                        ;[30c]
  149.     mov    dx, offset ermes4 ;Tell the user that we can't rename it.
  150.     call    tmsg
  151.     ret
  152.  
  153. gofl89:    push    dx
  154.     mov    dx, offset fcb    ;Print the file name.        ;[31]
  155.     call    tfile                        ;[31]
  156.     pop    dx
  157. gofil9:    mov    dx, offset fcb    ;Delete the file if it exists.
  158.     call    delete
  159.     mov    dx, offset fcb    ;Now create it.
  160.     call    create
  161.     cmp    al, 0FFH    ;Is the disk full?
  162.     je    gofl9x
  163.     jmp    rskp
  164. gofl9x:    mov    dx, offset screrr ;Position cursor.
  165.     call    poscur                        ;[30c]
  166.     mov    dx, offset erms11
  167.     call    tmsg
  168.     ret
  169.  
  170. ; Make sure character in al is a legal filename character:    ;[11] begin
  171. ; Mask 8th bit, capitalize, and replace all illegal
  172. ; special characters with '#'
  173.  
  174. gofl20:    and    al, 7Fh        ;mask eighth bit        ;[28d]
  175.     cmp    al, '0'        ;Check for digit
  176.     jb    gofl21
  177.     cmp    al, '9'
  178.     jbe    gofl23
  179.     cmp    al, 'A'        ;Check for uppercase letter
  180.     jb    gofl21
  181.     cmp    al, 'Z'
  182.     jbe    gofl23
  183.     cmp    al, 'a'        ;Check for lowercase letter
  184.     jb    gofl21
  185.     cmp    al, 'z'
  186.     ja    gofl21
  187.     and    al, 5Fh        ;Capitalize lowercase
  188.     jmps    gofl23
  189. gofl21:    push    di
  190.     mov    di, offset spchar ;Special chars.
  191.     mov    cx, 20        ;Twenty of them.
  192.     repne    scasb        ;Search string for input char.
  193.     je    gofl22
  194.     mov    al, '#'        ;Replace illegal characters with '#'
  195. gofl22:    pop    di                        ;[28d] end 
  196. gofl23:    ret                            ;[11] end
  197.  
  198.  
  199. ; Get next filename from sorted directory list.  Return skip on success,
  200. ; plain return at end.
  201.  
  202. getfil:    cmp    cxzflg, 'Z'    ;[Rg] file interrupt flag set to 'Z'? ;[34c]
  203.     je    gtfl9
  204.     mov    si,dindex    ;Any more entries in list?
  205.     cmp    si,dircnt
  206.     jae    gtfl9
  207.     cld
  208. gtfl4:    push    ds
  209.     pop    es
  210.     mov    ds,word ptr membuf
  211.     mov    cl,4
  212.     shl    si,cl
  213.     inc    si
  214.     push    si
  215.     mov    di,offset fcb2+1
  216.     mov    cl,11
  217.     repe    cmpsb
  218.     pop    si
  219.     jae    gtfl6        ;If above starting filename, use it
  220.     push    es
  221.     pop    ds
  222.     inc    dindex
  223.     mov    si,dindex
  224.     cmp    si,dircnt
  225.     jb    gtfl4
  226.     mov    dx,offset erms28 ;No filenames below starting filename
  227.     call    tcrmsg
  228.     jmps    gtfl9
  229. gtfl6:    mov    di,offset fcb+1
  230.     mov    cx,11
  231.     rep    movsb        ;Move the name to the FCB
  232.     push    es
  233.     pop    ds
  234.     inc    dindex        ;Point to next entry
  235.     call    getopn
  236.     jmp    rskp
  237. gtfl9:    mov    wldflg, 0    ;Reset wild card flag.
  238.     ret                            ;[34c] end
  239.  
  240. ; open the file for sending
  241.  
  242. getopn:    mov    filflg, 0FFH    ;Nothing in the DMA.
  243.     mov    eoflag, 0    ;Not the end of file.
  244.     mov    dx, offset fcb
  245.     call    openf        ;Open the file.
  246.     ret
  247.  
  248. ;    Output the chars in a packet.
  249.  
  250. ptchr:    mov    temp1, ax    ;Save the    size.
  251.     mov    bx, offset data    ;Beginning of received packet data.
  252.     mov    outpnt, bx    ;Remember where we are.
  253.     mov    ch, rquote    ;Quote char.
  254. ptchr1:    dec    temp1        ;Decrement # of chars in packet.
  255.     jnl    pt1
  256.     jmp    rskp        ;Return successfully if done.
  257. pt1:    dec    chrcnt        ;Decrement number of chars in dta.
  258.     jns    ptchr2        ;Continue if space left.
  259.     call    outbuf        ;Output it if full.
  260.      jmp    r        ; Error return if disk is full.
  261. ptchr2:    mov    bx, outpnt    ;Get position in packet data buffer.
  262.     mov    ah, [bx]    ;Grab a char
  263.     inc    bx
  264.     mov    outpnt, bx    ;and bump pointer.
  265.     mov    al, 00h        ;First assume no 8th bit    ;[29g] begin
  266.     cmp    ebquot, 'N'    ;No 8th bit if we can't quote
  267.     je    ptch21
  268.     cmp    ebquot, 'Y'    ;  or if we can but aren't.
  269.     je    ptch21
  270.     cmp    ah, ebquot    ;Is this the 8th bit quote character?
  271.     jne    ptch21
  272.     mov    ah, [bx]    ;Get the quoted character
  273.     inc    bx
  274.     mov    outpnt, bx
  275.     dec    temp1        ;Decrement # of chars in packet.
  276.     mov    al, 80h        ;Set the 8th bit.        ;[29g] end
  277. ptch21:    cmp    ah, ch        ;Is it the quote char?
  278.     jne    ptchr4        ;If not proceed.
  279.     mov    ah, [bx]    ;Get the quoted character
  280.     inc    bx
  281.     mov    outpnt, bx    ;and bump pointer.
  282.     dec    temp1        ;Decrement # of chars in packet.
  283.     mov    dl, ah        ;Save the parity bit in dl.    ;[29g] begin
  284.     and    dl, 80H
  285.     and    ah, 7FH        ;Turn off the parity bit.
  286.     cmp    ah, ch        ;Is it the quote char?
  287.     je    ptchr3        ;If so just go write it out.
  288.     cmp    ebquot, 'N'    ;No 8th bit if we can't quote
  289.     je    ptch22
  290.     cmp    ebquot, 'Y'    ;  or if we can but aren't.
  291.     je    ptch22
  292.     cmp    ah, ebquot    ;Is this the 8th bit quote character?
  293.     je    ptchr3        ;If so, just go write it out.
  294. ptch22:    add    ah, 40H        ;Make it a control char again.    ;[29g] end
  295.     and    ah, 7FH        ;Modulo 128.
  296. ptchr3:    or    ah, dl        ;Or in the parity bit.
  297. ptchr4:    or    ah, al        ;Or in the quoted 8th bit.    ;[29g]
  298.     mov    bx, bufpnt    ;Destination buffer.
  299.     mov    [bx], ah    ;Store it.
  300.     inc    bx
  301.     mov    bufpnt, bx    ;Update the pointer
  302.     jmp    ptchr1        ;and loop to next char.
  303.  
  304.  
  305.     ; output the buffer, reset bufpnt and chrcnt
  306.  
  307. outbuf:    push    bx
  308.     push    cx
  309.     mov    dx, offset fcb
  310.     call    soutr        ;Write the record.
  311.     pop    cx
  312.     pop    bx
  313.     cmp    al, 0        ;Successful.
  314.     jz    outbf1
  315.     cmp    al, 1
  316.     jz    outbf0
  317.     mov    dx, offset screrr
  318.     call    poscur                        ;[30c]
  319.     mov    dx, offset erms17 ;Record length exceeds DTA.
  320.     call    tmsg
  321.     ret
  322. outbf0:    mov    dx, offset screrr
  323.     call    poscur                        ;[30c]
  324.     mov    dx, offset erms11 ;Disk full error.
  325.     call    tmsg
  326.     ret
  327. outbf1:    mov    bx, offset dma    ;Addr for beginning.
  328.     mov    bufpnt, bx    ;Store addr for beginning.
  329.     mov    ax, bufsiz-1    ;Buffer size.
  330.     mov    chrcnt, ax    ;Number of chars left.
  331.     jmp    rskp
  332.  
  333.  
  334. ;    Get the chars from the file.
  335.  
  336. gtchr:    mov    ch, squote    ;Keep quote char in c.
  337.     cmp    filflg, 0    ;Is there anything in the DMA?
  338.     jz    gtchr0        ;Yup, proceed.
  339.     mov    cl, 0        ;No chars yet.
  340.     call    inbuf
  341.      jmp    gtceof        ;No more chars, go return EOF.
  342. gtchr0:    mov    al, spsiz    ;Get the maximum packet size.
  343.     sub    al, 5        ;Subtract the overhead.
  344.     mov    ah, 0
  345.     mov    temp1, ax    ;Number of chars we're to get.
  346.     mov    bx, offset filbuf ;Where to put the data.
  347.     mov    cbfptr, bx    ;Remember where we are.
  348.     mov    cl, 0        ;No chars.
  349. gtchr1:    dec    temp1        ;Decrement the number of chars left.
  350.     jns    gtchr2        ;Go on if there is more than one left.
  351.     mov    al, cl        ;Return the count in A.
  352.     mov    ah, 0
  353.     jmp    rskp
  354. gtchr2:    mov    ax, chrcnt
  355.     dec    ax
  356.     jl    gtchr3
  357.     mov    chrcnt, ax
  358.     jmp    gtchr4
  359. gtchr3:    call    inbuf        ;Get another buffer full.
  360.     jmp    gtceof
  361.     cmp    chrcnt, 0
  362.     jne    gtchr4
  363.     sub    cl, 2        ;Don't count controllified Z.
  364.     mov    al, cl
  365.     mov    ah, 0
  366.     jmp    rskp
  367. gtchr4:    mov    bx, bufpnt    ;Position in DMA.
  368.     mov    ah, [bx]    ;Get a char from the file.
  369.     inc    bx
  370.     mov    bufpnt, bx
  371.     cmp    ebquot, 'N'    ;Can we not do 8th bit quoting? ;[29g] begin
  372.     je    gtch41
  373.     cmp    ebquot, 'Y'    ;Or are we not?
  374.     je    gtch41
  375.     mov    dh, ah
  376.     and    ah, 7Fh
  377.     and    dh, 80h        ;Is the 8th bit set?
  378.     je    gtch41        ;If not, no need for quoting
  379.     dec    temp1        ;Decrement the number of characters left
  380.     mov    dh, ebquot    ;Insert 8th bit quote char. in packet buffer
  381.     mov    bx, cbfptr
  382.     mov    [bx], dh
  383.     inc    cbfptr
  384.     inc    cl        ;Count the character
  385. gtch41:    mov    dl, ah        ;Save the char.        ;[29g] end
  386.     and    dl, 80H        ;Turn off all but parity.
  387.     and    ah, 7FH        ;Turn off the parity.
  388.     cmp    ah, ' '        ;Compare to a space.
  389.     jl    gtchr5        ;If less then its a control char, handle it.
  390.     cmp    ah, del        ;Is the char a delete?
  391.     jz    gtchr5        ;Go quote it.
  392.     cmp    ah, ch        ;Is it the quote char?
  393.     je    gtch42        ;If so, insert it in the buffer ;[29g] begin
  394.     cmp    ebquot, 'N'    ;Can we not do 8th bit quoting?
  395.     je    gtchr8
  396.     cmp    ebquot, 'Y'    ;Or are we not?
  397.     je    gtchr8
  398.     cmp    ah, ebquot    ;Is this the 8th bit quote character?
  399.     jne    gtchr8        ;If not, proceed
  400. gtch42:    dec    temp1        ;Decrement the chars remaining. ;[29g] end
  401.     mov    bx, cbfptr    ;Position in character buffer.
  402.     mov    [bx], ch    ;Precede char with send quote.
  403.     inc    cbfptr
  404.     inc    cl        ;Increment the char count.
  405.     jmp    gtchr8
  406. gtchr5:    or    ah, dl        ;Turn on the parity bit.
  407.     cmp    ah, ('Z'-100O)    ;Is it a ^Z?
  408.     jne    gtchr7        ;If not just proceed.
  409.     cmp    binflg, 0    ;ASCII file?            ;[16] begin
  410.     je    gtceof        ;If so, terminate
  411.     cmp    eoflag, 0    ;EOF flag set?            ;[16] end
  412.     jz    gtchr6        ;If not just go on.
  413.     mov    bx, bufpnt
  414.     mov    ax, chrcnt
  415.     mov    dh, al        ;Get number of chars left in DMA.
  416. gtch51:    dec    dh
  417.     jns    gtch52        ;Any chars left?
  418.     mov    chrcnt, 0    ;If not, say so.
  419.     mov    al, cl        ;Return the count in A.
  420.     mov    ah, 0
  421.     jmp    rskp
  422. gtch52:    mov    ah, [bx]    ;Get the next char.
  423.     inc    bx        ;Move the pointer.
  424.     cmp    ah, ('Z'-100O)    ;Is it a ^Z?
  425.     jz    gtch51        ;If so see if they rest are.
  426.  
  427. gtchr6:    mov    ah, ('Z'-100O)    ;Restore the ^Z.
  428. gtchr7:    xchg    ah, al
  429.     mov    ah, 0
  430.     mov    temp2, ax    ;Save the char.
  431.     dec    temp1        ;Decrement char counter.
  432.     mov    bx, cbfptr    ;Position in character buffer.
  433.     mov    [bx], ch    ;Put the quote in the buffer.
  434.     inc    cbfptr
  435.     inc    cl        ;Increment the char count.
  436.     mov    ax, temp2    ;Get the control char back.
  437.     xchg    al, ah
  438.     add    ah, 40H        ;Make the non-control.
  439.     and    ah, 7FH        ;Modulo 200 octal.
  440. gtchr8:    or    dl, dl        ;Do we have parity?        ;[29g]
  441.     jz    gtch81        ;If not, just send it.        ;[29g]
  442.     or    ah, dl        ;Or in the parity bit.
  443.     cmp    parflg,parnon    ;[par] no parity?
  444.     je    gtch81        ;[par] yes, keep going
  445.     and    ah,7fh        ;[par] else turn off parity from file
  446. ;[par]*** should probably mention that we're losing eighth bit here
  447.     push    ax                        ;[29g] begin
  448.     push    cx
  449.     mov    dx, offset scrhi ;mention that high bit is being lost
  450.     call    poscur                        ;[30c]
  451.     mov    dx, offset hibit
  452.     call    tmsg
  453.     pop    cx
  454.     pop    ax                        ;[29g] end
  455. gtch81:    mov    bx, cbfptr    ;Position in character buffer.
  456.     mov    [bx], ah    ;Put the char in the buffer.
  457.     inc    cbfptr
  458.     inc    cl        ;Increment the char count.
  459.     jmp    gtchr1        ;Go around again.
  460.  
  461. gtceof:    cmp    cl, 0        ;Had we gotten any data?
  462.     je    gteof0        ;Nope.
  463.     mov    filflg,0FFh    ;[23] fix ASCII extra buffers at eof
  464.     mov    eoflag,0FFh    ;[23]
  465.     mov    al, cl
  466.     mov    ah, 0
  467.     jmp    rskp
  468. gteof0:    mov    ah, 0FFH    ;Get a minus one.
  469.     ret
  470.  
  471. ;Input the next DMA buffer.
  472.  
  473. inbuf:    mov    ah, eoflag    ;Have we reached the end?
  474.     cmp    ah, 0
  475.     jz    inbuf0
  476.     ret            ;Return if set.
  477. inbuf0:    push    bx
  478.     push    cx
  479.     mov    bx, offset dma    ;Set the r/w buffer pointer.
  480.     mov    bufpnt, bx
  481.     mov    dx, offset fcb
  482.     call    sinr
  483.     cmp    al, 0        ;End of file?
  484.     je    inbuf1        ;Still have data left.
  485.     mov    eoflag, 0FFH    ;Set End-of-file.
  486.     mov    filflg, 0    ;Buffer not empty.
  487.     mov    chrcnt, 0    ;Say no characters.
  488.     pop    cx
  489.     pop    bx
  490.     ret
  491.  
  492. inbuf1:    mov    al, 80H        ;Use as counter for number of chars read.
  493.     pop    cx
  494.     pop    bx
  495.     cmp    filflg, 0    ;Ever used DMS?
  496.     jnz    inbf21        ;Nope, then don't change count.
  497.     dec    al        ;Fix boundary error.
  498. inbf21:    mov    ah, 0        ;Zero the flag (buffer not empty).
  499.     mov    chrcnt, ax    ;Number of chars read from file.
  500.     mov    filflg, 0    ;Buffer not empty.
  501.     jmp    rskp
  502.  
  503.  
  504.     DSEG $
  505.  
  506. temp1    dw    0
  507. temp2    dw    0
  508. dma    rb    80H
  509. filbuf    rb    60H        ;Character buffer.
  510. cpfcb    rb    25H        ;Save FCB in case of "*".
  511. rdbuf    rb    80H
  512. cnt    dw    0
  513. fcb    rb    36
  514. fcb2    rb    12        ;replacement receive filename    ;[32c]
  515. chrcnt    dw    0        ;Number of chars in the file buffer.
  516. filcnt    dw    0        ;Number of chars left to fill.
  517. outpnt    dw    0        ;Position in packet.
  518. bufpnt    dw    0        ;Position in file buffer.
  519. fcbptr    dw    0        ;Position in FCB.
  520. datptr    dw    0        ;Position in packet data buffer.
  521. cbfptr    dw    0        ;Position in character buffer.
  522. siz    dw    0        ;Size of data from gtchr.
  523. filflg    db    0        ;Non-zero when nothing in DMA buffer.
  524. filsiz    rw    02H        ;Double word for filesize (in bytes.)
  525. eoflag    db    0        ;EOF flag;non-zero on EOF.
  526. binflg    db    0        ;ASCII/Binary flag - 0 if ASCII file    ;[16]
  527. wldflg    db    0        ;Assume no "*" in fn.
  528.  
  529.