home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / ZCPR33 / S-Z / XALIAS11.LBR / XALIAS0.ZZ0 / XALIAS0.Z80
Text File  |  2000-06-30  |  7KB  |  417 lines

  1. ; Program: XALIAS0
  2. ; Author: Paul Pomerleau and Richard Conn
  3. ; Version: 1.1
  4. ; Date: August 2, 1987
  5. ;
  6. version    equ    11
  7.  
  8. ;
  9. ;    The purpose of XALIAS0 is to create aliases using the VALIAS1
  10. ; program.
  11. ;
  12.  
  13. ;
  14. ; Basic Equates
  15. ;
  16. kill    equ    5000h
  17. kilsiz    equ    254
  18. buffer    equ    4000h        ;1K (approx) buffer
  19. tbuff    equ    80h
  20. fcb    equ    5ch
  21. cr    equ    0dh
  22. lf    equ    0ah
  23.  
  24. ;
  25. ; External References
  26. ;
  27.     ext    led
  28.     public    kill,kilsiz,cmdlst,cmdlen
  29.  
  30.     ext    $memry
  31.     ext    putcl
  32.     ext    z3init,getwhl,z3log
  33.     ext    print,sksp,crlf,pfn1,padc
  34.     ext    hmovb,sfa,cout,ccout,pstr,zfname,capstr,capin
  35.     ext    f$open,f$read,f$close,f$make,f$delete,f$write,f$exist,initfcb
  36.  
  37. ;
  38. ; Key Equates for Address Definition of Environment
  39. ;
  40. envdefn    equ    103H        ;Beginning of Environment Definition
  41. envclas    equ    108H        ;Address of Environment Descriptor Class
  42.  
  43. ENTRY:
  44.     jp    START
  45.     defb    'Z3ENV'
  46.     defb    1        ; Type-1 environment
  47. ENVADDR:
  48.     dw    0f300h
  49.  
  50. ; Configuration section
  51. ;
  52. CMDLST:    db    'QDSEXAF','S'+80h,'D'+80h,'G','H',127,'T',    ; For LED
  53.     db    127+80h,'R','Y'+80h,'YUVIPWMC'            ;
  54. CMDLEN    equ    $ - CMDLST
  55.  
  56. ; Main code section
  57. ;
  58. START:
  59.     call    z3init        ; Initialize library routines
  60.  
  61. ;
  62. ; Print Banner
  63. ;
  64.     call    print
  65.     db    'XALIAS, Version '
  66.     db    (version/10)+'0','.',(version mod 10)+'0',0
  67. ;
  68. ; Check for File
  69. ;
  70.     call    getwheel
  71.     xor    a
  72.     ld    (kill),a
  73.     ld    hl,fcb+1    ;pt to file name
  74.     ld    a,(hl)        ;get first char
  75.     cp    ' '        ;no name if space
  76.     jp    z,create    ;create an ALIAS if no name
  77.     cp    '/'        ;help?
  78.     jr    nz,start0
  79. ;
  80. ; Help Message
  81. ;
  82.     call    print
  83.     db    cr,lf,'XALIAS -- Create ALIAS Commands'
  84.     db    cr,lf,'Syntax:'
  85.     db    cr,lf,9,'XALIAS [dir:cmdname]',0
  86.     ret
  87.  
  88. ;
  89. ; Load ALIAS File
  90. ;
  91. start0:
  92. start1:
  93.     call    print
  94.     db    9,9,'ALIAS: ',0
  95.     ld    hl,fcb+1    ;pt to name
  96.     ld    b,8        ;8 chars
  97. nfcr0:
  98.     ld    a,(hl)        ;print name
  99.     cp    ' '
  100.     jr    z,nfcr1
  101.     call    cout
  102.     inc    hl        ;pt to next char
  103.     djnz    nfcr0
  104. nfcr1:    call    setcom        ;set file type of file in FCB to COM if not already
  105.     ld    de,fcb
  106.     call    z3log
  107.     ld    hl,buffer    ;pt to file storage buffer
  108.     call    f$open        ;open ALIAS file for input
  109.     jr    z,load        ;load file
  110. create:    call    print
  111.     db    cr,lf,lf,' New',0
  112.     call    codend
  113.     inc    hl
  114.     ld    e,(hl)
  115.     inc    hl
  116.     ld    d,(hl)
  117.     ex    de,hl
  118.     ld    de,-100H+17    ;compute offset
  119.     add    hl,de
  120.     ld    (oldaline),hl
  121.     ld    (hl),0
  122.     jp    input
  123.  
  124. ;
  125. ; Load ALIAS File
  126. ;
  127. load:
  128.     ld    hl,buffer    ;pt to load buffer
  129.     ld    c,9        ;set block count
  130. load1:
  131.     ld    de,fcb        ;pt to FCB
  132.     call    f$read        ;read next block
  133.     jr    nz,load2
  134.     ld    de,tbuff    ;pt to buffer
  135.     ex    de,hl
  136.     ld    b,128        ;128 bytes
  137.     call    hmovb
  138.     ex    de,hl        ;DE pts to next block
  139.     dec    c        ;count down
  140.     jr    nz,load1
  141. ;
  142. ; Error - Not an ALIAS File
  143. ;
  144. noALIAS:
  145.     call    crlf
  146.     call    crlf
  147.     ld    de,fcb+1
  148.     call    pfn1
  149.     call    print
  150.     db    ' is Not an ALIAS',0
  151.     ret
  152. ;
  153. ; Load Complete - Check for ALIAS File Structure
  154. ;
  155. load2:
  156.     call    f$close        ;close input file
  157.     ld    hl,(buffer+1)    ;get address of START
  158.     ld    de,buffer-100H
  159.     add    hl,de        ;pt to actual address
  160.     ld    de,9        ;skip to ALIAS ID
  161.     add    hl,de
  162.     ld    de,ALIASid    ;compare
  163.     ld    b,8        ;8 chars
  164. acheck:
  165.     ld    a,(de)        ;get char
  166.     cp    (hl)        ;compare
  167.     jr    nz,noALIAS
  168.     inc    hl        ;pt to next
  169.     inc    de
  170.     djnz    acheck
  171.     ld    (oldaline),hl    ;save ptr to old ALIAS command line
  172. ;
  173. ; Display Data on Old ALIAS
  174. ;
  175.     call    print
  176.     db    cr,lf,lf,' Old ALIAS Command Line:',0
  177.     ld    hl,(oldaline)
  178.     ld    b,1        ;set line count
  179. cr0a:
  180.     ld    a,(hl)        ;check for done
  181.     or    a
  182.     jr    z,cr1
  183.     call    crlf        ;new line
  184.     ld    a,b        ;print line number
  185.     call    padc
  186.     inc    b        ;increment count
  187.     call    print        ;print prompt
  188.     db    ' --> ',0
  189. cr0b:
  190.     ld    a,(hl)        ;get char
  191.     or    a
  192.     jr    z,cr1
  193.     call    ccout        ;print char with control char processing
  194.     inc    hl        ;pt to next
  195.     cp    ';'        ;next logical line?
  196.     jr    z,cr0a
  197.     jr    cr0b
  198.  
  199. cr1:;
  200. ; Input ALIAS from User
  201. ;
  202. cr1a:
  203.     call    print
  204.     db    cr,lf
  205.     db    cr,lf,' Edit',0
  206. input:    call    print
  207.     db    ' ALIAS:'
  208.     db    cr,lf,' --> ',0
  209.     ld    hl,(oldaline)
  210.     ld    de,MYBUF+1
  211.     ld    bc,201
  212.     ldir
  213.     ld    a,0ffh        ;upcase input line from user
  214.     call    bbline        ; MY REPLACEMENT
  215.     call    sksp        ;skip to non-blank
  216.     ld    a,(hl)        ;get char
  217.     or    a        ;any input?
  218.     ret    z
  219.     push    hl        ;save ptr
  220. ;
  221. ; Set Buffers in New ALIAS to Reflect the XALIAS0 Buffers
  222. ;
  223.     call    codend        ;pt to new alias
  224.     inc    hl        ;pt to start of buffers
  225.     inc    hl
  226.     inc    hl
  227.     ld    de,envdefn    ;pt to environment definition
  228.     ld    bc,8        ;prepare to copy 8 bytes for class 1
  229.                 ; bytes are:    DB    'Z3ENV',3
  230.                 ;        DW    envaddr
  231. ;
  232. ; Copy the Buffers Over
  233. ;
  234.     ex    de,hl
  235.     ldir
  236. ;
  237. ; Prep to Copy New Command Into ALIAS
  238. ;
  239.     call    codend        ;pt to new alias command buffer
  240.     inc    hl
  241.     ld    e,(hl)        ;get address of START
  242.     inc    hl
  243.     ld    d,(hl)
  244.     ld    hl,17        ;pt to buffer at START+17
  245.     add    hl,de
  246.     ld    de,-100H    ;compute offset
  247.     add    hl,de        ;HL contains offset
  248.     ex    de,hl
  249.     call    codend
  250.     add    hl,de        ;HL pts to absolute address
  251.     pop    de        ;pt to new command
  252. ;
  253. ; Copy New Command into ALIAS File
  254. ;
  255. cr2:
  256.     ld    bc,255        ;check for overflow (max number of chars)
  257.     ex    de,hl
  258.     ldir
  259. ;
  260. ; ALIAS Command Line Copied
  261. ;
  262. cr3:
  263.     call    crlf
  264.     ld    a,(fcb + 1)    ;file loaded?
  265.     cp    ' '        ;' '=no
  266.     jp    nz,write1
  267.     call    print
  268.     db    cr,lf,' Name of ALIAS: ',0
  269.     xor    a
  270.     ld    (MYBUF+1),a
  271.     ld    a,0ffh        ;capitalize
  272.     call    bbline
  273.     call    sksp        ;skip to non-blank
  274.     ld    a,(hl)
  275.     or    a
  276.     jp    z,create
  277.     call    crlf
  278.     ld    de,fcb        ;pt to FCB
  279.     call    zfname        ;convert and place in FCB
  280.     call    setcom
  281.     call    z3log
  282. ;
  283. ; Write File whose Name is in FCB
  284. ;
  285. write:
  286.     ld    de,fcb        ;check for file
  287.     call    initfcb        ;clear FCB
  288.     call    f$exist        ;check for existence
  289.     jr    z,write1
  290.     call    print
  291.     db    cr,lf,' File ',0
  292.     ld    de,fcb+1
  293.     call    pfn1
  294.     call    print
  295.     db    ' Exists - Overwrite (N for No)? ',0
  296.     call    capin
  297.     push    af
  298.     call    cout
  299.     pop    af
  300.     cp    'N'
  301.     ret    z        ;abort if not Y
  302.     ld    de,fcb        ;clear file attributes
  303.     xor    a
  304.     call    sfa        ;set file attributes to R/W DIR
  305.     call    f$delete    ;delete file
  306. ;
  307. ; Create New File
  308. ;
  309. write1:
  310.     ld    de,fcb        ;pt to FCB
  311.     call    initfcb        ;init it
  312.     call    f$make        ;create file
  313.     inc    a
  314.     jr    z,werr
  315.     ld    c,8        ;8 sectors
  316.     call    codend        ;pt to file
  317. write2:
  318.     ld    de,tbuff    ;copy sector into buffer
  319.     ld    b,128        ;128 bytes
  320.     call    hmovb
  321.     ld    de,fcb        ;write block
  322.     call    f$write
  323.     jr    nz,werr
  324.     dec    c        ;count down
  325.     jr    nz,write2
  326.     call    f$close        ;close file
  327.     call    print
  328.     db    cr,lf,' ALIAS Created',0
  329.     ret
  330. werr:
  331.     call    print
  332.     db    cr,lf,' Error in Creating File',0
  333.     ret
  334.  
  335. ;
  336. ; Determine End of Code to Nearest 128 bytes
  337. ;
  338. codend:
  339.     push    de
  340.     ld    hl,($memry)    ;get next available byte
  341.     ld    a,l        ;get low
  342.     and    80h        ;set MSB
  343.     ld    l,a
  344.     ld    de,128        ;next 128 bytes
  345.     add    hl,de
  346.     pop    de
  347.     ret
  348.  
  349. ;
  350. ; Set File Type of File in FCB to COM if Not Already Set
  351. ;
  352. setcom:
  353.     push    hl
  354.     push    de
  355.     push    bc
  356.     ld    hl,comtyp    ;set COM type
  357.     ld    de,fcb+9    ;copy into file type
  358.     ld    b,3        ;3 bytes
  359.     call    hmovb
  360.     pop    bc
  361.     pop    de
  362.     pop    hl
  363.     ret
  364. ;
  365. ; Input ALIAS Command from User
  366. ;
  367. getwheel:
  368.     call    getwhl        ;get wheel byte
  369.     ret    nz
  370.     pop    hl
  371.     call    print
  372.     db    cr,lf,' Modification of ALIAS Not Permitted',0
  373.     ret
  374.  
  375. ;
  376. ; Replacement for SYSLIB's BBLINE
  377. ;
  378. BBLINE:    push    de
  379.     push    bc
  380.     push    af
  381.     ld    de,MYBUF
  382.     xor    a
  383.     ld    (de),a
  384.     ld    bc,254
  385.     ld    a,00011001b    ; Ouput the line, start at start, 
  386.                 ;  keep the insert, initialize length/location
  387.     call    led
  388.     pop    af
  389.     or    a
  390.     ld    hl,MYBUF+1
  391.     push    hl
  392.     call    nz,capstr
  393.     pop    hl
  394.     pop    bc
  395.     pop    de
  396.     ret
  397.  
  398. ;
  399. ; Hidden Buffer:  MYBUF
  400. ;
  401. MYBUF:    ds    256
  402.  
  403. ;
  404. ; Buffers
  405. ;
  406. comtyp:
  407.     db    'COM'        ;COM File Type
  408. aliasid:
  409.     db    'Z3 ALIAS'    ;ALIAS File ID
  410. FUNC10:    dw    0
  411. oldaline:
  412.     dw    0        ;ptr to old alias line
  413.  
  414.     end
  415. COM'        ;COM File Type
  416. aliasid:
  417.     db    'Z3 AL