home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 25 / CD_ASCQ_25_1095.iso / dos / prg / cpe50 / files.asm < prev    next >
Assembly Source File  |  1995-09-11  |  26KB  |  1,310 lines

  1.  ; routines for loading/saving tape/disk/snapshot files
  2.  
  3.     IDEAL
  4.     INCLUDE "cpe2\macros.inc"
  5.  
  6. EXTRN simstack:WORD,simz80l:PROC,sz80performret:PROC,sz80performpushhl:PROC
  7. EXTRN sz80wbhlAL:PROC,sz80InitPCSeg:PROC,sysstat:BYTE
  8.  
  9. EXTRN ClearKeymap:PROC
  10. EXTRN LoadSnap:PROC,DiskChange:WORD
  11. EXTRN KeyCode:BYTE
  12. EXTRN RestoreScreen:PROC,PutChar:PROC,OpenTextScr:PROC
  13.  
  14. ; *** Code from comp386.asm
  15.  
  16. EXTRN UnpackArea:PROC,PackArea:PROC
  17.  
  18. ; *** exports
  19.  
  20. PUBLIC GetDirs,GetSnapDir,SelFile,SelSnap,GetSaveSnapName,InitTape,CloseTape
  21. PUBLIC CASInOpen,CASRead,CASWrite,CASCheck,CAScont,CASInH
  22. PUBLIC snapha,snapdir,snaname,dradir,draname,mvadir,mvaname
  23.  
  24. P386
  25.  
  26. GROUP   DGROUP _stack,_data
  27.  
  28. SEGMENT _text PAGE PUBLIC 'CODE'
  29. ASSUME CS:_text
  30. ASSUME DS:DGROUP
  31.  
  32. GetDirs:
  33.     MOV     AX,2f00h
  34.     INT     21h
  35.     MOV     [dtaoff],BX
  36.     MOV     BX,ES
  37.     MOV     [dtaseg],BX
  38.  
  39.     CALL    GetDir
  40.     CALL    GetSnapDir
  41.     CALL    GetTapeDir
  42.  
  43.         MOV     [lastsnap],0
  44.         MOV     [lastfile],0
  45.  
  46.         RET
  47.  
  48. GetDir:
  49.     PUSH    ES
  50.     PUSHAD
  51.     MOV     DX,SEG nametbl
  52.     MOV     ES,DX
  53.     XOR     DI,DI
  54.     MOV     AX,[dtaseg]
  55.     MOV     FS,AX
  56.     MOV     DX,OFFSET wildcard
  57.     MOV     AX,4E00h
  58.     XOR     CX,CX
  59.     INT     21h
  60.     MOV     EBX,OFFSET nametbl
  61.     JC      GD_Whoops
  62.  
  63.     CALL    GD_Loop
  64. GD_Whoops:
  65.     PUSH    EBX
  66.     MOV     DX,OFFSET wildcar2
  67.     MOV     AX,4E00h
  68.     XOR     CX,CX
  69.     INT     21h
  70.     POP     EBX
  71.     JC      GD_Whoops2
  72.  
  73.     CALL    GD_Loop
  74. GD_Whoops2:
  75.  
  76.     MOV     [filcnt],DI
  77.     MOV     BX,OFFSET nametbl
  78.     CALL    SortDir
  79.     POPAD
  80.     POP     ES
  81.     RET
  82. GD_Loop:
  83.     MOV     CX,[dtaoff]
  84.     ADD     CX,1eh
  85.     INC     DI
  86.     XOR     ESI,ESI
  87. GD_Copy:
  88.     MOV     AL,[FS:ECX+ESI]
  89.     CMP     AL,46          ; Punkt
  90.     JE      GD_Copied
  91.     MOV     [ES:BX+SI],AL
  92.     INC     SI
  93.     JMP     GD_Copy
  94. GD_Copied:
  95.     MOV     [BYTE PTR ES:BX+SI],0
  96.     ADD     BX,8
  97.     MOV     AX,4F00h
  98.     INT     21h
  99.     JC      GD_End
  100.     JMP     GD_Loop
  101. GD_End:
  102.     RET
  103.  
  104. GetSnapDir:
  105.     PUSHAD
  106.     PUSH    DS
  107.     PUSH    ES
  108.     MOV     DX,SEG snaptbl
  109.     MOV     ES,DX
  110.     XOR     DI,DI
  111.     MOV     AX,[dtaseg]
  112.     MOV     FS,AX
  113.     MOV     DX,OFFSET snapcard
  114.     MOV     AX,4E00h
  115.     XOR     CX,CX
  116.     INT     21h
  117.     JC      GSD_End
  118.     MOV     EBX,OFFSET snaptbl
  119. GSD_Loop:
  120.     MOV     CX,[dtaoff]
  121.     ADD     CX,1eh
  122.     INC     DI
  123.     XOR     ESI,ESI
  124. GSD_Copy:
  125.     MOV     AL,[FS:ECX+ESI]
  126.     OR      AL,AL
  127.     JE      GSD_Copied
  128.     CMP     AL,46          ; Punkt
  129.     JE      GSD_Copied
  130.     MOV     [ES:BX+SI],AL
  131.     INC     SI
  132.     JMP     GSD_Copy
  133. GSD_Copied:
  134.     MOV     [BYTE PTR ES:BX+SI],0
  135.     ADD     BX,8
  136.     MOV     AX,4F00h
  137.     INT     21h
  138.     JC      GSD_End
  139.     JMP     GSD_Loop
  140. GSD_End:
  141.     MOV     [snapcnt],DI
  142.     MOV     BX,OFFSET snaptbl
  143.     CALL    SortDir
  144.     POP     ES
  145.     POP     DS
  146.     POPAD
  147.     RET
  148.  
  149. SortDir:                        ; in: BX: name table
  150.     CMP     [BYTE PTR ES:BX],0
  151.     JE      SDIR_End
  152. SDIR_Loop1:
  153.     MOV     CX,BX
  154.     MOV     DX,BX
  155.     ADD     DX,8
  156.     CMP     [BYTE PTR ES:EDX],0
  157.     JE      SDIR_End
  158. SDIR_Loop2:
  159.     CMP     [BYTE PTR ES:EDX],0
  160.     JE      SDIR_Loop2OK
  161.     MOV     SI,CX
  162.     MOV     DI,DX
  163. SDIR_Loop3:
  164.     MOV     AL,[ES:SI]
  165.     MOV     AH,[ES:DI]
  166.     INC     SI
  167.     INC     DI
  168.     CMP     AL,AH
  169.     JE      SDIR_Loop3
  170.     JC      SDIR_CXOK
  171.     MOV     CX,DX
  172. SDIR_CXOK:
  173.     ADD     DX,8
  174.     JMP     SDIR_Loop2
  175. SDIR_Loop2OK:
  176.     MOV     DX,CX
  177.     MOV     CX,8
  178. SDIR_Ex:
  179.     MOV     AL,[ES:EBX]
  180.     MOV     AH,[ES:EDX]
  181.     MOV     [ES:EDX],AL
  182.     MOV     [ES:EBX],AH
  183.     INC     BX
  184.     INC     DX
  185.     LOOP    SDIR_Ex
  186.     JMP     SDIR_Loop1
  187. SDIR_End:
  188.     RET
  189.  
  190. GetTapeDir:
  191.     PUSHAD
  192.     PUSH    ES
  193.     MOV     DX,SEG tapetbl
  194.     MOV     ES,DX
  195.  
  196.     XOR     DI,DI
  197.     MOV     AX,[dtaseg]
  198.     MOV     FS,AX
  199.     MOV     DX,OFFSET tapecard
  200.     MOV     AX,4E00h
  201.     XOR     CX,CX
  202.     INT     21h
  203.     JC      GTD_End
  204.     MOV     EBX,OFFSET tapetbl
  205. GTD_Loop:
  206.     MOV     CX,[dtaoff]
  207.     ADD     CX,1eh
  208.     INC     DI
  209.     XOR     ESI,ESI
  210.     MOV     [DWORD PTR ES:EBX],0
  211.     MOV     [DWORD PTR ES:EBX+4],0
  212.     MOV     [DWORD PTR ES:EBX+8],0
  213. GTD_Copy:
  214.     MOV     AL,[FS:ECX+ESI]
  215.     OR      AL,AL
  216.     JE      GTD_Copied
  217.     MOV     [ES:BX+SI],AL
  218.     INC     SI
  219.     CMP     SI,12
  220.     JE      GTD_Copied
  221.     JMP     GTD_Copy
  222. GTD_Copied:
  223.     MOV     EAX,[FS:ECX-4]
  224.     MOV     [ES:BX+12],EAX
  225.     ADD     BX,16
  226.     MOV     AX,4F00h
  227.     INT     21h
  228.     JC      GTD_End
  229.     CMP     DI,1000
  230.     JC      GTD_Loop
  231. GTD_End:
  232.     MOV     [tfilcnt],DI
  233.  
  234.     MOV     BX,OFFSET tapetbl
  235. GTD_CheckArcs:
  236.     MOV     EAX,[ES:BX]
  237.     MOV     [DWORD PTR tapname],EAX
  238.     MOV     EAX,[ES:BX+4]
  239.     MOV     [DWORD PTR tapname+4],EAX
  240.     MOV     EAX,[ES:BX+8]
  241.     MOV     [DWORD PTR tapname+8],EAX
  242.  
  243.     PUSH    BX
  244.  
  245.     MOV     BX,OFFSET tapname
  246. GTD_CheckTAR:
  247.     CMP     [BYTE PTR BX],0
  248.     JE      GTD_NoTAR
  249.     INC     BX
  250.     CMP     [DWORD PTR BX-1],'RAT.'
  251.     JNE     GTD_CheckTAR
  252.  
  253.     MOV     DX,OFFSET tapedir
  254.     MOV     AX,3d02h
  255.     INT     21h
  256.     JC      GTD_NoArc
  257.     MOV     [tapeha],AX
  258.  
  259.     MOV     CX,8
  260.     MOV     BX,[tapeha]
  261.     MOV     DX,OFFSET tfilheader
  262.     MOV     AX,3F00h
  263.     INT     21h
  264.     JC      GTD_NoArc
  265.     CMP     [DWORD PTR tfilheader],'XURC'
  266.     JNE     GTD_NoArc
  267.     CMP     [DWORD PTR tfilheader+4],'CRAT'
  268.     JNE     GTD_NoArc
  269.     POP     BX
  270.     MOV     [DWORD PTR ES:BX+12],0ffffffffh
  271.     PUSH    BX
  272. GTD_NoArc:
  273.     MOV     BX,[tapeha]
  274.     MOV     AX,3e00h
  275.     INT     21h
  276. GTD_NoTAR:
  277.     POP     BX
  278.     ADD     BX,16
  279.     CMP     [DWORD PTR ES:BX],0
  280.     JNE     GTD_CheckArcs
  281.  
  282.     POP     ES
  283.     POPAD
  284.     RET
  285.  
  286. InitTape:
  287.     MOV     [tfilptr],0
  288.     MOV     [tapeha],0ffffh
  289.     CALL    GetTapeFile
  290.     RET
  291.  
  292. GetTapeFile:
  293.     CMP     [tfilcnt],0
  294.     JE      GTFI_Ret
  295.     PUSH    ES
  296.     PUSHAD
  297.     CALL    CloseTape
  298.     MOV     DX,SEG tapetbl
  299.     MOV     ES,DX
  300.     MOV     [tfiloff],0
  301.     MOV     AX,[tfilptr]
  302.     CMP     AX,[tfilcnt]
  303.     JC      GTFI_NumOk
  304.     XOR     AX,AX
  305.     MOV     [tfilptr],0
  306. GTFI_NumOk:
  307.     MOV     BX,AX
  308.     SHL     BX,4
  309.     ADD     BX,OFFSET tapetbl
  310.  
  311.     MOV     EAX,[ES:BX]
  312.     MOV     [DWORD PTR tapname],EAX
  313.     MOV     EAX,[DWORD PTR ES:BX+4]
  314.     MOV     [DWORD PTR tapname+4],EAX
  315.     MOV     EAX,[DWORD PTR ES:BX+8]
  316.     MOV     [DWORD PTR tapname+8],EAX
  317.  
  318.     MOV     EAX,[DWORD PTR ES:BX+12]
  319.     MOV     [tfillen],EAX
  320.     XOR     EAX,EAX
  321.     MOV     [tapeha],0ffffh
  322.  
  323.     MOV     DX,OFFSET tapedir
  324.     MOV     AX,3d02h
  325.     INT     21h
  326.     JC      GTFI_End
  327.     MOV     [tapeha],AX
  328.  
  329.     CMP     [tfillen],128
  330.     JC      GTFI_NoHeader
  331.  
  332.     MOV     CX,128
  333.     MOV     BX,[tapeha]
  334.     MOV     DX,OFFSET tfilheader
  335.     MOV     AX,3F00h
  336.     INT     21h
  337.     JC      GTFI_End
  338.     CMP     [DWORD PTR tfilheader],'XURC'
  339.     JNE     GTFI_NoArchive
  340.     CMP     [DWORD PTR tfilheader+4],'CRAT'
  341.     JNE     GTFI_NoArchive
  342.     MOV     [tarcdiroffs],12
  343.     MOV     [tarcfilenum],0
  344.     MOV     [tfisarc],1
  345.     CALL    GetTArchivedFile
  346.     JMP     GTFI_End
  347. GTFI_NoArchive:
  348.     MOV     [tfisarc],0
  349.     MOV     AX,0
  350.     MOV     BX,OFFSET tfilheader
  351.     XOR     CH,CH
  352. GTFI_CalcChksum:
  353.     MOV     CL,[BX]
  354.     ADD     AX,CX
  355.     INC     BX
  356.     CMP     BX,OFFSET tfilheader+43h
  357.     JNE     GTFI_CalcChksum
  358.     CMP     AX,[BX]
  359.     JNE     GTFI_NoHeader
  360.     SUB     [tfillen],128
  361.     JMP     GTFI_HeaderOK
  362. GTFI_NoHeader:
  363.     MOV     BX,[tapeha]
  364.     XOR     CX,CX
  365.     XOR     DX,DX
  366.     MOV     AX,4200h
  367.     INT     21h
  368.     MOV     [BYTE PTR tfilheader+12h],16h
  369.     MOV     AX,[WORD PTR tfillen]
  370.     MOV     [WORD PTR tfilheader+18h],AX
  371. GTFI_HeaderOK:
  372.     MOV     AX,[WORD PTR tfilheader+18h]
  373.     MOV     [WORD PTR tfillen],AX
  374.  
  375.     MOV     [lasthdread],0
  376.     MOV     [WORD PTR tfilheader+13h],2048
  377.     CMP     [tfillen],2048
  378.     JNC     GTFI_BlockLenLess
  379.     MOV     AX,[WORD PTR tfillen]
  380.     MOV     [WORD PTR tfilheader+13h],AX
  381. GTFI_BlockLenLess:
  382.     MOV     [BYTE PTR tfilheader+17h],0ffh
  383.     MOV     [BYTE PTR tfilheader+11h],0
  384.     CMP     [tfillen],2049
  385.     JNC     GTFI_NotLast
  386.     MOV     [BYTE PTR tfilheader+11h],0ffh
  387. GTFI_NotLast:
  388.     MOV     [BYTE PTR tfilheader+10h],1
  389.     MOV     EAX,[DWORD PTR tapname]
  390.     MOV     [DWORD PTR tfilheader],EAX
  391.     MOV     EAX,[DWORD PTR tapname+4]
  392.     MOV     [DWORD PTR tfilheader+4],EAX
  393.     MOV     EAX,[DWORD PTR tapname+8]
  394.     MOV     [DWORD PTR tfilheader+8],EAX
  395.     MOV     [DWORD PTR tfilheader+12],0
  396.     XOR     EAX,EAX
  397.     MOV     BX,OFFSET tfilheader+11
  398. GTFI_KillSpaces:
  399.     CMP     [BYTE PTR BX],32
  400.     JNE     GTFI_SpacesKilled
  401.     MOV     [BYTE PTR BX],0
  402.     DEC     BX
  403.     JNE     GTFI_KillSpaces
  404. GTFI_SpacesKilled:
  405. GTFI_End:
  406.     POPAD
  407.     POP     ES
  408. GTFI_Ret:
  409.     RET
  410.  
  411. GetNextTArcFile:
  412.     PUSHAW
  413.     INC     [tarcfilenum]
  414.     CMP     [tarcfilenum],32
  415.     JNE     TARC_FilNumOK
  416.     MOV     BX,[tapeha]
  417.     MOV     AX,4200h
  418.     MOV     CX,[WORD PTR tarcdiroffs+2]
  419.     MOV     DX,[WORD PTR tarcdiroffs]
  420.     INT     21h
  421.     MOV     AX,3f00h
  422.     MOV     CX,4
  423.     MOV     DX,OFFSET tarcdiroffs
  424.     INT     21h
  425.     CMP     [tarcdiroffs],0
  426.     JE      TARC_ArchiveEnd
  427.     MOV     [tarcfilenum],0
  428. TARC_FilNumOK:
  429.     CALL    GetTArchivedFile
  430.     POPAW
  431.     RET
  432.  
  433. GetTArchivedFile:
  434.     MOV     BX,[tapeha]
  435.     MOV     CX,[WORD PTR tarcdiroffs+2]
  436.     MOV     DX,[WORD PTR tarcdiroffs]
  437.     MOV     AL,[tarcfilenum]
  438.     MOV     AH,24
  439.     MUL     AH
  440.     ADD     AX,4
  441.     ADD     DX,AX
  442.     ADC     CX,0
  443.     MOV     AX,4200h
  444.     INT     21h
  445.     MOV     AX,3f00h
  446.     MOV     CX,24
  447.     MOV     DX,OFFSET TapeBuffer
  448.     INT     21h
  449.     CMP     [BYTE PTR TapeBuffer],0
  450.     JE      TARC_ArchiveEnd
  451.     MOV     SI,OFFSET TapeBuffer
  452.     MOV     DI,OFFSET tfilheader
  453.     MOV     CX,12
  454.     PUSH    ES
  455.     PUSH    DS
  456.     POP     ES
  457.     REP     MOVSB
  458.     POP     ES
  459.     MOV     [DWORD PTR DI],0
  460.     MOV     AL,[SI]
  461.     MOV     [BYTE PTR tfilheader+012h],AL
  462.     MOV     EAX,[SI+1]
  463.     AND     EAX,000ffffffh
  464.     MOV     [DWORD PTR tfilheader+40h],EAX
  465.     MOV     [WORD PTR tfilheader+18h],AX
  466.     MOV     AX,[SI+4]
  467.     MOV     [WORD PTR tfilheader+15h],AX
  468.     MOV     AX,[SI+6]
  469.     MOV     [WORD PTR tfilheader+1Ah],AX
  470.     MOV     EAX,[SI+8]
  471.     MOV     [tarcdataptr],EAX
  472.  
  473.     XOR     EAX,EAX
  474.     MOV     AX,[WORD PTR tfilheader+18h]
  475.     MOV     [tfillen],EAX
  476.  
  477.     MOV     [lasthdread],0
  478.     MOV     [WORD PTR tfilheader+13h],2048
  479.     CMP     [tfillen],2048
  480.     JNC     TARC_BlockLenLess
  481.     MOV     AX,[WORD PTR tfillen]
  482.     MOV     [WORD PTR tfilheader+13h],AX
  483. TARC_BlockLenLess:
  484.     MOV     [BYTE PTR tfilheader+17h],0ffh
  485.     MOV     [BYTE PTR tfilheader+11h],0
  486.     CMP     [tfillen],2049
  487.     JNC     TARC_NotLast
  488.     MOV     [BYTE PTR tfilheader+11h],0ffh
  489. TARC_NotLast:
  490.     MOV     [BYTE PTR tfilheader+10h],1
  491.  
  492.     XOR     EAX,EAX
  493.     MOV     BX,OFFSET tfilheader
  494.     MOV     CX,42h
  495.     XOR     DX,DX
  496. TARC_BuildChk:
  497.     LODSB
  498.     ADD     DX,AX
  499.     LOOP    TARC_BuildChk
  500.     MOV     [WORD PTR tfilheader+43h],DX
  501.  
  502.     RET
  503.  
  504. TARC_ArchiveEnd:
  505.     INC     [tfilptr]
  506.     CALL    GetTapeFile
  507.     RET
  508.  
  509. CloseTape:
  510.     CMP     [tapeha],0ffffh
  511.     JE      CLTA_End
  512.     PUSHAD
  513.     MOV     BX,[tapeha]
  514.     MOV     AX,3e00h
  515.     INT     21h
  516.     POPAD
  517. CLTA_End:
  518.     RET
  519.  
  520. CASInOpen:
  521.     MOV     sFree,[WORD PTR sysstat]
  522.     AND     sFree,4
  523.     JNZ     CASOops
  524.     BT      AX,8
  525.     JC      CAIO_COK
  526.         CALL    sz80performret
  527.     JMP     simz80l
  528. CAIO_COK:
  529.         CALL    sz80performpushhl
  530.  
  531.     PUSHAD
  532.     MOV     BX,[CASInH]
  533.     MOV     DX,0
  534. CAIO_TestLess12:
  535.     MOV     AL,[BYTE PTR ES:BX]
  536.     CMP     AL,0
  537.     JE      CAIO_Less12
  538.     CMP     AL,32
  539.     JNE     CAIO_TL12_NoSpace
  540.     CMP     [BYTE PTR ES:BX+1],32 ; we can compact 2 spaces to one, since
  541.     JE      CAIO_TL12_Space       ; neither combination is allowed in DOS
  542.     CMP     [BYTE PTR ES:BX+1],'.'
  543.     JE      CAIO_TL12_Space
  544.     CMP     [BYTE PTR ES:BX+1],0
  545.     JNE     CAIO_TL12_NoSpace
  546. CAIO_TL12_Space:
  547.     PUSH    BX
  548.     MOV     DI,BX
  549.     INC     BX
  550. CAIO_TL12_SPCLoop:
  551.     MOV     AL,[ES:BX]
  552.     MOV     [ES:DI],AL
  553.     INC     DI
  554.     INC     BX
  555.     CMP     AL,0
  556.     JNE     CAIO_TL12_SPCLoop
  557.     POP     BX
  558.     DEC     BX
  559.     DEC     DX
  560. CAIO_TL12_NoSpace:
  561.     INC     DX
  562.     INC     BX
  563.     CMP     DX,13
  564.     JNE     CAIO_TestLess12
  565.     JMP     CAIO_End
  566. CAIO_Less12:
  567.     MOV     [CASNameLen],DX
  568.  
  569.     MOV     DI,[CASInH]
  570.  
  571.     PUSH    DX
  572.     CALL    CAIO_SearchName
  573.     POP     DX
  574.     CMP     BX,0ffffh
  575.     JNE     CAIO_Found
  576.  
  577.     MOV     DX,[CASNameLen]
  578.     CMP     DX,9
  579.     JNC     CAIO_CheckArcs
  580.     MOV     [DWORD PTR ES:EDI+EDX],'SAB.'
  581.     PUSH    DX
  582.     CALL    CAIO_SearchName
  583.     POP     DX
  584.     CMP     BX,0ffffh
  585.     JNE     CAIO_Found
  586.  
  587.     MOV     DX,[CASNameLen]
  588.     CMP     DX,9
  589.     JNC     CAIO_End
  590.     MOV     [DWORD PTR ES:EDI+EDX],'NIB.'
  591.  
  592.     PUSH    DX
  593.     CALL    CAIO_SearchName
  594.     POP     DX
  595.     CMP     BX,0ffffh
  596.     JNE     CAIO_Found
  597. CAIO_CheckArcs:
  598.     MOV     BX,[tfilptr]
  599.     MOV     [oldtfilptr],BX
  600.     MOV     DX,[CASNameLen]
  601.     MOV     [DWORD PTR ES:EDI+EDX],0
  602.     PUSH    DX
  603.     CALL    CAIO_SearchInArcs
  604.     POP     DX
  605.     CMP     BX,0ffffh
  606.     JNE     CAIO_End
  607.  
  608.     MOV     [DWORD PTR ES:EDI+EDX],'SAB.'
  609.     PUSH    DX
  610.     CALL    CAIO_SearchInArcs
  611.     POP     DX
  612.     CMP     BX,0ffffh
  613.     JNE     CAIO_End
  614.  
  615.     MOV     [DWORD PTR ES:EDI+EDX],'NIB.'
  616.     PUSH    DX
  617.     CALL    CAIO_SearchInArcs
  618.     POP     DX
  619.     CMP     BX,0ffffh
  620.     JNE     CAIO_End
  621.  
  622.     MOV     [DWORD PTR ES:EDI+EDX],0
  623.     MOV     BX,[oldtfilptr]
  624.     MOV     [tfilptr],BX
  625.     CALL    GetTapeFile
  626.     JMP     CAIO_End
  627. CAIO_Found:
  628.     MOV     [tfilptr],BX
  629.     CALL    GetTapeFile
  630. CAIO_End:
  631.     POPAD
  632.     JMP     simz80l
  633.  
  634. CAIO_SearchName:                        ; assumes ES: == rambase ???
  635.     MOV     SI,OFFSET tapetbl
  636.     MOV     CX,[tfilcnt]
  637.     MOV     BX,0
  638. CAIO_SN_Loop:
  639.     PUSH    DS
  640.     MOV     DX,SEG tapetbl
  641.     MOV     DS,DX
  642.     PUSH    SI
  643.     PUSH    DI
  644.     MOV     DX,0
  645.     CMP     [DWORD PTR DS:SI+12],0ffffffffh    ; avoid tarcs
  646.     JE      CAIO_SN_NotEqual
  647. CAIO_SN_Cmp:
  648.     CMP     DX,12
  649.     JE      CAIO_SN_Found
  650.     MOV     AL,[DS:SI]
  651.     CMPSB
  652.     JNE     CAIO_SN_NotEqual
  653.     CMP     AL,0
  654.     JE      CAIO_SN_Found
  655.     INC     DX
  656.     JMP     CAIO_SN_Cmp
  657. CAIO_SN_NotEqual:
  658.     POP     DI
  659.     POP     SI
  660.     POP     DS
  661.     ADD     SI,16
  662.     INC     BX
  663.     LOOP    CAIO_SN_Loop
  664.     MOV     BX,0ffffh
  665.     RET
  666. CAIO_SN_Found:
  667.     POP     DI
  668.     POP     SI
  669.     POP     DS
  670.     RET
  671.  
  672. CAIO_SearchInArcs:
  673.     PUSH    FS
  674.     MOV     SI,SEG tapetbl
  675.     MOV     FS,SI
  676.  
  677.     MOV     SI,OFFSET tapetbl
  678.     MOV     CX,[tfilcnt]
  679.     MOV     BX,0
  680. CAIO_SIA_Loop:
  681.     CMP     [DWORD PTR FS:SI+12],0ffffffffh    ; only tarcs
  682.     JNE     CAIO_SIA_NextFile
  683.     MOV     [tfilptr],BX
  684.     CALL    GetTapeFile
  685. CAIO_SIA_CheckArc:
  686.     CMP     [tfilptr],BX
  687.     JNE     CAIO_SIA_NextFile
  688.     MOV     DX,0
  689.     PUSH    SI
  690.     PUSH    DI
  691.     MOV     SI,OFFSET tfilheader
  692. CAIO_SIA_Cmp:
  693.     CMP     DX,12
  694.     JE      CAIO_SIA_Found
  695.     MOV     AL,[SI]
  696.     CMPSB
  697.     JNE     CAIO_SIA_NotEqual
  698.     CMP     AL,0
  699.     JE      CAIO_SIA_Found
  700.     INC     DX
  701.     JMP     CAIO_SIA_Cmp
  702. CAIO_SIA_NotEqual:
  703.     POP     DI
  704.     POP     SI
  705.     CALL    GetNextTarcFile
  706.     JMP     CAIO_SIA_CheckArc
  707. CAIO_SIA_NextFile:
  708.     ADD     SI,16
  709.     INC     BX
  710.     LOOP    CAIO_SIA_Loop
  711.     MOV     BX,0ffffh
  712.     POP     FS
  713.     RET
  714. CAIO_SIA_Found:
  715.     POP     DI
  716.     POP     SI
  717.     POP     FS
  718.     RET
  719.  
  720. CASRead:
  721.     MOV     sFree,[WORD PTR sysstat]
  722.     AND     sFree,4
  723.     JNZ     CASOops
  724.     CMP     [tapeha],0ffffh
  725.     JE      CAS_Err
  726.     CMP     AL,2ch
  727.     JE      CASR_Header
  728.     CMP     AL,16h
  729.     JE      CASR_Block
  730. CASR_Block:
  731.     CMP     [tfisarc],0
  732.     JE      CASR_Block_Norm
  733.     PUSHAD
  734.     MOV     CX,[WORD PTR tarcdataptr+2]
  735.     MOV     DX,[WORD PTR tarcdataptr]
  736.     MOV     BX,[tapeha]
  737.     MOV     AX,4200h
  738.     INT     21h
  739.     MOV     CX,840h
  740.     MOV     DX,OFFSET TapeLoadBuf+6
  741.     MOV     BX,[tapeha]
  742.     MOV     AX,3F00h
  743.     INT     21h
  744.     XOR     ECX,ECX
  745.     MOV     CX,[WORD PTR TapeLoadBuf+6]
  746.     ADD     [tarcdataptr],ECX
  747.     CMP     CX,840h
  748.     JNC     CASR_BlockRead
  749.     MOV     [DWORD PTR TapeLoadBuf],'XURC'
  750.     MOV     [DWORD PTR TapeLoadBuf+4],'KCAP'
  751.     PUSH    ES
  752.     PUSH    DS
  753.     POP     ES
  754.     MOV     SI,OFFSET TapeLoadBuf
  755.     MOV     DI,OFFSET TapeBuffer
  756.     MOV     CX,800h
  757.     CALL    FAR UnpackArea
  758.     POP     ES
  759.     POPAD
  760.     JMP     CASR_BlockRead
  761. CASR_Block_Norm:
  762.     PUSHAD
  763.     MOV     CX,[WORD PTR tfilheader+13h]
  764.     MOV     DX,OFFSET TapeBuffer
  765.     MOV     BX,[tapeha]
  766.     MOV     AX,3F00h
  767.     INT     21h
  768.     POPAD
  769. CASR_BlockRead:
  770.     PUSHAD
  771.     MOV     SI,OFFSET TapeBuffer
  772.     CMP     sDE,0
  773.     JNE     CASR_CopyBlock
  774.     MOV     sDE,[WORD PTR tfilheader+13h]
  775.     JCXZ    CASR_BlockCopied
  776. CASR_CopyBlock:
  777.     MOV     AL,[SI]
  778.     CALL    sz80wbhlAL
  779.     INC     SI
  780.     INC     nsHL
  781.     DEC     sDE
  782.     JNE     CASR_CopyBlock
  783. CASR_BlockCopied:
  784.     CALL    AdjustHeader
  785.     POPAD
  786.     JMP     CASR_End
  787.  
  788. CASR_Header:
  789.     PUSHAD
  790.     CMP     [lasthdread],0
  791.     JE      CASR_FilePosOK
  792.     CMP     [tfillen],2048
  793.     JC      CASR_Adjust
  794.     MOV     BX,[tapeha]
  795.     MOV     AX,4201h
  796.     XOR     CX,CX
  797.     MOV     DX,2048
  798.     INT     21h
  799.     POPAD
  800.     PUSHAD
  801. CASR_Adjust:
  802.     CALL    AdjustHeader
  803. CASR_FilePosOK:
  804.     MOV     [lasthdread],1
  805.     MOV     SI,OFFSET tfilheader
  806. CASR_CopyHeader:
  807.     MOV     AL,[SI]
  808.     CALL    sz80wbhlAL
  809.     INC     SI
  810.     INC     nsHL
  811.     DEC     sDE
  812.     JNE     CASR_CopyHeader
  813.     POPAD
  814. CASR_End:
  815.     OR      AH,1
  816.     MOV     sBC,1
  817.     MOV     sPC,[CAScont]
  818.     CALL    sz80InitPCSeg
  819.     JMP     simz80l
  820.  
  821. AdjustHeader:
  822.     PUSH    AX
  823.     SUB     [tfillen],2048
  824.     JZ      ADJH_NewFile
  825.     JC      ADJH_NewFile
  826.     MOV     AX,[WORD PTR tfilheader+13h]
  827.     MOV     [BYTE PTR tfilheader+17h],0
  828.     MOV     [BYTE PTR tfilheader+11h],0
  829.     CMP     [tfillen],2049
  830.     JNC     ADJH_NotLast
  831.     MOV     [BYTE PTR tfilheader+11h],0ffh
  832. ADJH_NotLast:
  833.     MOV     AX,[WORD PTR tfillen]
  834.     CMP     AX,2048
  835.     JNC     ADJH_BlockLenLess
  836.     MOV     [WORD PTR tfilheader+13h],AX
  837. ADJH_BlockLenLess:
  838.     INC     [BYTE PTR tfilheader+10h]
  839.     JMP     ADJH_End
  840. ADJH_NewFile:
  841.     CMP     [tfisarc],0
  842.     JE      ADJH_NormFile
  843.     CALL    GetNextTarcFile
  844.     JMP     ADJH_End
  845. ADJH_NormFile:
  846.     INC     [tfilptr]
  847.     CALL    GetTapeFile
  848. ADJH_End:
  849.     POP     AX
  850.     MOV     [lasthdread],0
  851.     RET
  852.  
  853. CAS_Err:
  854.     MOV     AX,100h
  855.         CALL    sz80performret
  856.     JMP     simz80l
  857.  
  858. CASWrite:
  859.     MOV     sFree,[WORD PTR sysstat]
  860.     AND     sFree,4
  861.     JNZ     CASOops
  862.     XOR     AL,AL
  863.     AND     AH,0feh
  864.         CALL    sz80performret
  865.     JMP     simz80l
  866.  
  867. CASCheck:
  868.     MOV     sFree,[WORD PTR sysstat]
  869.     AND     sFree,4
  870.     JNZ     CASOops
  871.     XOR     AL,AL
  872.     AND     AH,0feh
  873.         CALL    sz80performret
  874.     JMP     simz80l
  875.  
  876. CASOops:
  877.     JMP     simz80l
  878.  
  879. SelectSomething:
  880.     MOV     [selsucc],0
  881.     CMP     [selcnt],0
  882.     JE      SELC_Ret
  883.     PUSH    ES
  884.     PUSHAD
  885.     MOV     DX,SEG nametbl
  886.     MOV     ES,DX
  887.  
  888.         CALL    OpenTextScr
  889.  
  890.     MOV     BX,[selhead]
  891.     XOR     DX,DX
  892.     MOV     AH,15
  893. SELC_Header:
  894.     MOV     AL,[BX]
  895.     OR      AL,AL
  896.     JE      SELC_HeaderOK
  897.         CALL    PutChar
  898.     INC     BX
  899.     INC     DX
  900.     JMP     SELC_Header
  901. SELC_HeaderOK:
  902.  
  903.     MOV     [keycode],0
  904.     XOR     AX,AX
  905.     MOV     EDX,162
  906.     XOR     EBX,EBX
  907.     MOV     BX,[seltabl]
  908. SELC_Display:
  909.     XOR     SI,SI
  910.     MOV     EAX,[ES:EBX]
  911.     OR      EAX,EAX
  912.     JE      SELC_Displayed
  913.     XOR     EAX,EAX
  914.     MOV     AH,15
  915.         PUSH    DX
  916. SELC_NameLoop:
  917.     MOV     AL,[ES:EBX+ESI]
  918.     OR      AL,AL
  919.     JE      SELC_NameOK
  920.         CALL    PutChar
  921.         INC     DX
  922.     INC     SI
  923.     CMP     SI,8
  924.     JNE     SELC_NameLoop
  925. SELC_NameOK:
  926.         POP     DX
  927.     ADD     DX,10
  928.     ADD     BX,8
  929.     JMP     SELC_Display
  930. SELC_Displayed:
  931.     MOV     BX,[sellast]
  932. SELC_Loop:
  933.     MOV     AX,BX
  934.     SHR     AX,3
  935.     MOV     CX,80
  936.     MUL     CX
  937.     MOV     CX,BX
  938.     AND     CX,7
  939.     ADD     CX,CX
  940.     MOV     DX,CX
  941.     ADD     DX,DX
  942.     ADD     DX,DX
  943.     ADD     CX,DX
  944.     ADD     AX,CX
  945.         ADD     AX,161
  946.         MOV     DX,AX
  947.         MOV     AX,0F10h
  948.         CALL    PutChar
  949.     CMP     [keycode],0
  950.     JE      SELC_Loop
  951.     CMP     [keycode],28
  952.     JE      SELC_Affirmative
  953.     CMP     [keycode],1
  954.     JE      SELC_End
  955.         MOV     AX,020h
  956.         CALL    PutChar
  957.     CMP     [keycode],4bh
  958.     JNE     SELC_nlf
  959.     CMP     BX,0
  960.     JE      SELC_LoopEnd
  961.     DEC     BX
  962.     JMP     SELC_LoopEnd
  963. SELC_nlf:
  964.     CMP     [keycode],4dh
  965.     JNE     SELC_nrt
  966.     INC     BX
  967.     CMP     BX,[selcnt]
  968.     JC      SELC_LoopEnd
  969.     DEC     BX
  970.     JMP     SELC_LoopEnd
  971. SELC_nrt:
  972.     CMP     [keycode],48h
  973.     JNE     SELC_nup
  974.     SUB     BX,8
  975.     JNC     SELC_LoopEnd
  976.     XOR     BX,BX
  977.     JMP     SELC_LoopEnd
  978. SELC_nup:
  979.     CMP     [keycode],50h
  980.     JNE     SELC_ndn
  981.     ADD     BX,8
  982.     CMP     BX,[selcnt]
  983.     JC      SELC_LoopEnd
  984.     MOV     BX,[selcnt]
  985.     SUB     BX,1
  986.     JMP     SELC_LoopEnd
  987. SELC_ndn:
  988.     MOVZX   BP,[keycode]
  989.     ADD     BP,OFFSET typekeytab
  990.     MOV     AL,[BP]
  991.     OR      AL,AL
  992.     JE      SELC_LoopEnd
  993.         MOV     CX,BX
  994.         XOR     EBX,EBX
  995.         XOR     EBP,EBP
  996. SELC_FindPressedChar:
  997.         MOV     BP,[seltabl]
  998.         LEA     EBP,[EBX*8+EBP]
  999.         CMP     [ES:BP],AL
  1000.         JE      SELC_LoopEnd
  1001.         INC     BX
  1002.         CMP     BX,[selcnt]
  1003.         JC      SELC_FindPressedChar
  1004.         MOV     BX,CX
  1005. SELC_LoopEnd:
  1006.     MOV     [keycode],0
  1007.     JMP     SELC_Loop
  1008. SELC_Affirmative:
  1009.         MOV     [sellast],BX
  1010.     MOV     DX,[selnapt]
  1011.     SHL     BX,3
  1012.     ADD     BX,[seltabl]
  1013.     XOR     SI,SI
  1014. SELC_GenName:
  1015.     MOV     AL,[ES:EBX]
  1016.     OR      AL,AL
  1017.     JE      SELC_GenExt
  1018.     MOV     [EDX],AL
  1019.     INC     BX
  1020.     INC     DX
  1021.     INC     SI
  1022.     CMP     SI,8
  1023.     JNE     SELC_GenName
  1024. SELC_GenExt:
  1025.     MOV     EAX,[selext]
  1026.     MOV     [DWORD PTR EDX],EAX
  1027.     XOR     EAX,EAX
  1028.     ADD     DX,4
  1029.     MOV     [BYTE PTR EDX],0
  1030.     MOV     [selsucc],1
  1031. SELC_End:
  1032.  
  1033.     POPAD
  1034.     POP     ES
  1035.         CALL    RestoreScreen
  1036.     CALL    ClearKeyMap
  1037.     MOV     [keycode],0
  1038. SELC_Ret:
  1039.     RET
  1040.  
  1041. GetSaveSnapName:
  1042.         PUSH    ES
  1043.         PUSHAD
  1044.         CALL    OpenTextScr
  1045.  
  1046.     MOV     DX,SEG nametbl
  1047.     MOV     ES,DX
  1048.  
  1049.     MOV     BX,OFFSET SnLsTitle
  1050.     XOR     DX,DX
  1051.     MOV     AH,15
  1052. GSSN_Header:
  1053.     MOV     AL,[BX]
  1054.     OR      AL,AL
  1055.     JE      GSSN_HeaderOK
  1056.         CALL    PutChar
  1057.     INC     BX
  1058.     INC     DX
  1059.     JMP     GSSN_Header
  1060. GSSN_HeaderOK:
  1061.  
  1062.     MOV     BX,OFFSET SSnaTitle
  1063.     MOV     DX,80*23
  1064.     MOV     AH,15
  1065. GSSN_Prompt:
  1066.     MOV     AL,[BX]
  1067.     OR      AL,AL
  1068.     JE      GSSN_PromptOK
  1069.         CALL    PutChar
  1070.     INC     BX
  1071.     INC     DX
  1072.     JMP     GSSN_Prompt
  1073. GSSN_PromptOK:
  1074.  
  1075.     XOR     AX,AX
  1076.     MOV     EDX,162
  1077.     XOR     EBX,EBX
  1078.     MOV     BX,OFFSET SnapTbl
  1079. GSSN_ShowFiles:
  1080.     XOR     SI,SI
  1081.     MOV     EAX,[ES:BX]
  1082.     OR      EAX,EAX
  1083.     JE      GSSN_FilesShown
  1084.     XOR     EAX,EAX
  1085.     MOV     AH,15
  1086.         PUSH    DX
  1087. GSSN_NameLoop:
  1088.     MOV     AL,[ES:EBX+ESI]
  1089.     OR      AL,AL
  1090.     JE      GSSN_NameOK
  1091.         CALL    PutChar
  1092.         INC     DX
  1093.     INC     SI
  1094.     CMP     SI,8
  1095.     JNE     GSSN_NameLoop
  1096. GSSN_NameOK:
  1097.         POP     DX
  1098.     ADD     DX,10
  1099.     ADD     BX,8
  1100.     JMP     GSSN_ShowFiles
  1101. GSSN_FilesShown:
  1102.  
  1103.     MOV     [keycode],0
  1104.     XOR     AX,AX
  1105.     MOV     BX,AX
  1106.         MOV     AH,0Fh
  1107.         MOV     [snaname],0
  1108. GSSN_Loop:
  1109.         MOV     EDX,24*80
  1110.         XOR     ECX,ECX
  1111. GSSN_Display:
  1112.         MOV     AL,[snaname+ECX]
  1113.         OR      AL,AL
  1114.         JZ      GSSN_DisplayOK
  1115.         CALL    PutChar
  1116.         INC     CX
  1117.         INC     DX
  1118.         JMP     GSSN_Display
  1119. GSSN_DisplayOK:
  1120.         MOV     AL,'_'
  1121.         CALL    PutChar
  1122.         INC     DX
  1123.         MOV     AL,' '
  1124.         CALL    PutChar
  1125.  
  1126. GSSN_WaitKey:
  1127.     CMP     [keycode],0
  1128.     JE      GSSN_WaitKey
  1129.  
  1130.     CMP     [keycode],1
  1131.     JE      GSSN_Break
  1132.     CMP     [keycode],28
  1133.     JE      GSSN_GotAName
  1134.         OR      BX,BX
  1135.         JZ      GSSN_NoDel
  1136.         CMP     [keycode],14
  1137.         JNE     GSSN_NoDel
  1138.         DEC     BX
  1139.         MOV     [BX+snaname],0
  1140. GSSN_NoDel:
  1141.         CMP     BX,8
  1142.         JE      GSSN_LoopEnd
  1143.  
  1144.     MOVZX   BP,[keycode]
  1145.     ADD     BP,OFFSET typekeytab
  1146.     MOV     AL,[BP]
  1147.     OR      AL,AL
  1148.     JE      GSSN_LoopEnd
  1149.     MOV     [BX+snaname],AL
  1150.     MOV     AH,0fh
  1151.         LEA     EDX,[EBX+24*80]
  1152.         CALL    PutChar
  1153.     INC     BX
  1154.         MOV     [BX+snaname],0
  1155. GSSN_LoopEnd:
  1156.     MOV     [keycode],0
  1157.     JMP     GSSN_Loop
  1158.  
  1159. GSSN_Break:
  1160.         MOV     [snaname],0
  1161.         JMP     GSSN_End
  1162. GSSN_GotAName:
  1163.     MOV     [DWORD BX+snaname],'ANS.'
  1164.     MOV     [BX+snaname+4],0
  1165. GSSN_End:
  1166.         POPAD
  1167.         POP     ES
  1168.         CALL    RestoreScreen
  1169.         CALL    ClearKeyMap
  1170.         RET
  1171.  
  1172. SelFile:
  1173.     PUSH    AX
  1174.     MOV     AX,[filcnt]
  1175.     MOV     [selcnt],AX
  1176.         MOV     AX,[lastfile]
  1177.         MOV     [sellast],AX
  1178.     MOV     [selnapt],OFFSET draname
  1179.     MOV     [seltabl],OFFSET nametbl
  1180.     MOV     [selhead],OFFSET DiskTitle
  1181.     MOV     [selext],'DPC.'
  1182.     CALL    SelectSomething
  1183.         MOV     AX,[sellast]
  1184.         MOV     [lastfile],AX
  1185.     CMP     [selsucc],0
  1186.     JE      SFIL_End
  1187.     MOV     [diskchange],1
  1188. SFIL_End:
  1189.     POP     AX
  1190.     RET
  1191.  
  1192. SelSnap:
  1193.     PUSH    AX
  1194.     MOV     AX,[snapcnt]
  1195.     MOV     [selcnt],AX
  1196.         MOV     AX,[lastsnap]
  1197.         MOV     [sellast],AX
  1198.     MOV     [selnapt],OFFSET snaname
  1199.     MOV     [seltabl],OFFSET snaptbl
  1200.     MOV     [selhead],OFFSET SnapTitle
  1201.     MOV     [selext],'ANS.'
  1202.     CALL    SelectSomething
  1203.         MOV     AX,[sellast]
  1204.         MOV     [lastsnap],AX
  1205.     CMP     [selsucc],0
  1206.     JE      SSNA_End
  1207.     CALL    LoadSnap
  1208. SSNA_End:
  1209.     POP     AX
  1210.     RET
  1211.  
  1212. ENDS
  1213.  
  1214. SEGMENT _data PAGE PUBLIC 'DATA'
  1215.  
  1216. snapdir db 'snap\'
  1217. snaname db 'snapshot.sna',0,0
  1218.  
  1219. dradir  db 'disks\'
  1220. draname db 'drivea  .cpd',0,0
  1221.     dd 0
  1222.  
  1223. mvadir  db 'disc\'
  1224. mvaname db 'drivea  .dsk',0,0
  1225.     dd 0
  1226.  
  1227. tapedir db 'tape\'
  1228. tapname db 16 DUP (0)
  1229.  
  1230. wildcard db 'disks\*.cpd',0
  1231. wildcar2 db 'disc\*.dsk',0
  1232. tapecard db 'tape\*.*',0
  1233. snapcard db 'snap\*.*',0
  1234.  
  1235. DiskTitle db '     Select the diskfile you want to insert into drive A:',0
  1236. SnapTitle db '     Select a snapshot to load:',0
  1237. SnLsTitle db '     List of snapshot files:',0
  1238. SsnaTitle db '     Type a name for the snapshot file:',0
  1239.  
  1240.     EVEN
  1241. tapeha  dw 0
  1242. snapha  dw 0
  1243.  
  1244. dtaoff  dw 0
  1245. dtaseg  dw 0
  1246.  
  1247. filcnt  dw 0
  1248. tfilcnt dw 0
  1249. snapcnt dw 0
  1250.  
  1251. selcnt  dw 0
  1252. selext  dd 0
  1253. selnapt dw 0
  1254. seltabl dw 0
  1255. selsucc dw 0
  1256. selhead dw 0
  1257.  
  1258. sellast dw 0
  1259.  
  1260. LABEL TypeKeyTab BYTE
  1261.  ;                ESC  1   2   3   4   5   6   7   8   9   0   ß   ∩  DEL TAB
  1262.     db    00h,00h,'1','2','3','4','5','6','7','8','9','0',000,000,000,000
  1263.  ;             Q   W   E   R   T   Z   U   I   O   P   ü   +   CR CTL  A   S
  1264.     db    'Q','W','E','R','T','Y','U','I','O','P',000,000,013,000,'A','S'
  1265.  ;             D   F   G   H   J   K   L   ö   ä    ° LSH  #'  Y   X   C   V
  1266.     db    'D','F','G','H','J','K','L',000,000,000,000,000,'Z','X','C','V'
  1267.  ;             B    N    M
  1268.     db    'B','N','M',0,12 DUP (0)
  1269.     db    4*16 DUP (0)
  1270.  
  1271.  ; ************************************************ Tape
  1272.         EVEN
  1273. CAScont     dw    2a72h
  1274. CASInH      dw    0b807h
  1275. CASNameLen  dw    0
  1276.  
  1277. tfilptr     dw    0
  1278. tfiloff     dw    0
  1279. tfilheader  db    128 DUP (1)
  1280. tfillen     dd    0
  1281. lasthdread  dw    0
  1282.  
  1283. tfisarc     db    0
  1284. tarcfilenum db    0
  1285. tarcdiroffs dd    0
  1286. tarcdataptr dd    0
  1287. oldtfilptr  dw    0
  1288.  
  1289. lastsnap    dw    0
  1290. lastfile    dw    0
  1291.  
  1292. ENDS
  1293.  
  1294. SEGMENT _stack PARA STACK 'STACK'
  1295.  
  1296. TapeBuffer  dw    800h DUP (?)
  1297. TapeLoadBuf dw    800h DUP (?)
  1298.  
  1299. ENDS
  1300.  
  1301. SEGMENT tables PRIVATE PARA
  1302.  
  1303. nametbl dd 1000 DUP (?)
  1304. tapetbl dd 4000 DUP (?)
  1305. snaptbl dd 1000 DUP (?)
  1306.  
  1307. ENDS
  1308.  
  1309. END
  1310.