home *** CD-ROM | disk | FTP | other *** search
/ norge.freeshell.org (192.94.73.8) / 192.94.73.8.tar / 192.94.73.8 / pub / computers / cpm / alphatronic / PASCALZ4.ZIP / D3 / FILEXT.SRC < prev    next >
Text File  |  1999-04-05  |  2KB  |  98 lines

  1. ;ROUTINES  SUPPORT RESETTING AN INPUT FILE AND REWRITING AN OUTPUT FILE
  2. ;
  3.     NAME FILEXT
  4.     ENTRY .ADDRCK,.MOVNAM
  5.     EXT .TIN,.TOUT,.FILNAM,.MXUT1
  6.     INCLUDE DEFLT.SRC
  7.  
  8. ;.ADDRCK CHECKS THE OUTPUT FILE LIST FOR THE CONTENTS
  9. ;OF HL. Y POINTS TO THE START OF THE LIST
  10. ;.ADDRCK SETS THE CARRY AND RETURNS THE ELEMENTS ADDRESS IN BC
  11. .ADDRCK:    INX    Y
  12.     MOV    A,L
  13.     LXI    B,.MXUT1    ;NUMBER OF BYTES OF OUTPUT FILE ADDRS.
  14. CONTLK:    CMP    0(Y)
  15.     JRZ    FNDLOW    ;LOW BYTE MATCH
  16.     INX    Y
  17.     INX    Y    ;NEXT OUTPUT FILE ADDRESS
  18.     DCR    B
  19.     DJNZ    CONTLK
  20.     XRA    A    ;ELEMENT NOT FOUND
  21.     RET
  22.  
  23. ;FOUND LOW BYTE        ;CHECK HIGH BYTE
  24. FNDLOW:    MOV    A,H
  25.     INX    Y
  26.     DCR    B
  27.     CMP    0(Y)
  28.     JRZ    FNDIT    ;HIGH BYTE MATCH
  29.     MOV    A,L
  30.     INX    Y
  31.     DJNZ    CONTLK
  32.     XRA    A    ;ELEMENT NOT FOUND
  33.     RET
  34.  
  35. ;FOUND ELEMENT IN LIST
  36. FNDIT:    PUSH    Y
  37.     POP    B
  38.     XRA    A
  39.     STC
  40.     RET
  41.  
  42.  
  43. ;.MOVNAM MOVES THE FILENAME FROM TI BUFFER
  44. ;STACK INTO THE FILE BUFFER AREA
  45. ;.MOVNAM IS CALLED WITH A ZERO.
  46. ;DE CONTAINING THE FIRST RETURN ADDRESS
  47. ;HL CONTAINING THE FILE CONTROL BLOCK
  48. ;AND THE FILENAME ON THE STACK
  49. ;.MOVNAM MUST RETURN THESE REGISTERS UNCHANGED
  50. ;AND THE FILENAME REMOVED FROM THE STACK
  51. ;THE LENGTH OF THE STRING TO BE MOVED IS IN C
  52.  
  53. STAKSP    EQU    3
  54.  
  55. .MOVNAM:    CALL    .TIN    ;EXHAUST TI BUFFER
  56.     JRNC    .MOVNAM
  57.     PUSH    H    ;FILE CONTROL BLOCK
  58.     LXI    H,STAKSP;GET DISPLACEMENT
  59.     DAD    S
  60.     XRA    A
  61.     MOV    B,A
  62.     DAD    B    ;ADD LENGTH
  63.     PUSH    H    ;NEW STACK POINTER
  64. ;MOVE FILENAME TO THE TI BUFFER
  65.     MOV    B,C
  66. TOTI:    MOV    C,M
  67.     CALL    .TOUT
  68.     DCX    H
  69.     DJNZ    TOTI
  70. ;MOVE A CARRIAGE RETURN INTO TI BUFFER
  71.     MVI    C,CR
  72.     CALL    .TOUT
  73. ;PARSE FILENAME AND MOVE IT INTO BUFFER AREA
  74.     POP    B    ;NEW STACK POINTER
  75.     POP    H    ;FILE CONTROL BLOCK
  76.     CALL    .FILNAM
  77.     EXAF
  78. EMPBUF:    CALL    .TIN
  79.     CPI    CR
  80.     JRNZ    EMPBUF
  81.     EXAF
  82.     PUSH    B    ;NEW SP
  83.     XTHL        ;HL <- NEW SP
  84.     POP    B    ;GET FILE CONTROL BLOCK
  85.     MOV    M,D    ;HIGH BYTE OF FIRST RETURN ADDRESS
  86.     DCX    H    ;DECR. NEW SP
  87.     MOV    A,E    ;LOW BYTE OF FIRST RETURN ADDRESS
  88.     MOV    D,B    ;FILE CONTROL BLOCK INTO DE
  89.     MOV    E,C
  90.     POP    B    ;SECOND RETURN ADDRESS
  91.     SPHL        ;REMOVE FILENAME FROM STACK
  92.     XCHG        ;FILE CONTROL BLOCK
  93.     POP    D    ;HIGH BYTE OF FIRST RETURN ADDRESS
  94.     MOV    E,A    ;LOW BYTE
  95.     PUSH    B    ;SECOND RETURN ADDRESS
  96.     MVI    A,0    ;CLEAR ACC WITHOUT DISTURBING CARRY
  97.     RET
  98.