home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / UNIFLEX / UNIFLEX / UniFLEX_Common.tar.Z / UniFLEX_Common.tar / install < prev    next >
Text File  |  1985-02-14  |  5KB  |  281 lines

  1.  opt pag,nol
  2.  lib sysdef
  3.  ttl Install Utility
  4.  opt lis
  5.  pag
  6.  info UniFLEX Install Utility
  7.  ifc &a,"tsc"
  8.  info TSC Internal Version - Not for distribution
  9.  endif
  10.  info Version 1.01; Released September 3, 1982
  11.  info Copyright (c) 1982 by
  12.  info Technical Systems Consultants, Inc.
  13.  info All rights reserved.
  14.  
  15. * Install Utility
  16.  
  17. * Equates
  18.  
  19.  ifnc &b,"pennywise"
  20. MAPdate equ $5000 Pointer to Install Date
  21. MAPkey equ $5004 Pointer to Install key
  22.  else
  23. MAPdate equ $4000 Pointer to Install Date
  24. MAPkey equ $4004 Pointer to Install key
  25.  endif
  26. *
  27. UNIdate equ $9030 Old version date address
  28. UNIkey equ $902B Old version key byte
  29.  
  30.  
  31. inst ldd 0,s get arg count
  32.  cmpd #2
  33.  lbne synerr error?
  34.  ldd 4,s get file name
  35.  std iopn2 set up open call
  36.  sys ind,iopn open uniflex file
  37.  lbes err1 error?
  38.  std fd save file descriptor
  39.  sys read,bhdr,24 read in header record
  40.  lbes err2 error?
  41.  ldd bhdr get 1st 2 bytes
  42.  cmpd #$212 is it binary file?
  43.  lbne err3
  44.  ifnc &a,"tsc"
  45. * Special code -- just to screw up the hacks!
  46.  sys cpint,12,catch funny here!
  47.  ldx #$5555
  48.  aslb
  49.  rora
  50. * ldd 0,x
  51.  ldu #$100
  52.  tfr u,y
  53.  pshs y
  54.  ldy $10
  55.  puls y
  56.  sys gtid get task id
  57.  sys spint,12 send interrupt
  58.  swi
  59.  fcb 3,44,11,199,33,233,11,9,76,88,55,29,86,146,222,76
  60.  fcb 44,76,82,34,125,167,23,251,222,76,33,22,11,23,100
  61. cont
  62.  endif
  63. *
  64.  ldd #2 check UniFLEX type (old vs. configurable)
  65.  ldx #MAPdate
  66.  jsr findrec
  67.  bes 99f jump if error
  68.  lda 0,x check for old version UniFLEX
  69.  cmpa #$16 used to be a long branch
  70.  bne 0f isn't - assume configurable
  71.  inc OLD_UniFLEX
  72.  ldx #UNIkey go get key byte
  73.  bra 1f
  74. 0 ldx #MAPkey get pointer to key byte
  75.  ldd #2 read key address
  76.  jsr findrec
  77.  bes 99f
  78.  ldx 0,x get pointer
  79. 1 ldd #1 read 1 byte
  80.  jsr findrec
  81.  bes 99f
  82.  lda 0,x get key byte
  83.  lbne err3 already installed!
  84.  ifnc &a,"tsc"
  85.  lda #123 set key byte value
  86.  else
  87.  lda #0 set key byte value
  88.  endif
  89.  sta 0,x
  90.  ldd #1 rewrite 1 byte
  91.  jsr putrec
  92.  bes 99f
  93. *
  94.  tst OLD_UniFLEX Old version of UniFLEX?
  95.  beq 0f no - continue
  96.  ldx #UNIdate yes - fix up address
  97.  bra 1f
  98. 0 ldd #2 read 2 bytes
  99.  ldx #MAPdate
  100.  jsr findrec
  101.  bes 99f
  102.  ldx 0,x
  103. 1 ldd #4 read 4 bytes of time
  104.  jsr findrec
  105.  bes 99f
  106.  sys time,sbuf get current time
  107.  ldd sbuf copy date info
  108.  std 0,x
  109.  ldd sbuf+2
  110.  std 2,x
  111.  ldd #4 rewrite 4 bytes
  112.  jsr putrec rewrite record
  113.  bes 99f
  114. *
  115.  ldd fd get file desc
  116.  sys close close the file
  117.  sys update
  118.  ldd #0 set status
  119.  sys term exit
  120.  
  121. *
  122. 99 lbra err2 go report I/O error
  123.  
  124. *
  125. * findrec
  126. *
  127. * Locate the data record which contains the
  128. * address (X).  Return with (X) pointing into
  129. * the data record for the desired item.
  130. *
  131. findrec pshs d,x,y,u save registers
  132.  ldd fd reposition file
  133.  sys seek,0,24,0 just past binary header
  134.  bes 90f
  135. 10 ldd fd read next "record" info
  136.  sys read,rechdr,4
  137.  bes 90f
  138.  cmpd #0 end of file?
  139.  beq 90f
  140.  ldd rechdr+2 get record address
  141.  cmpd 2,s check if record contains desired address
  142.  bhi 20f jump if not
  143.  addd rechdr compute end of record
  144.  cmpd 2,s
  145.  bls 20f jump if not found
  146. * Found appropriate record - seek to desired data
  147.  ldd 2,s compute relative position
  148.  subd rechdr+2
  149.  std isk2 set up for seek
  150.  ldd fd
  151.  sys ind,isk seek to data
  152.  bes 90f
  153.  ldd 0,s get number of characters desired
  154.  std ird2
  155.  ldd fd read data
  156.  sys ind,ird
  157.  bes 90f
  158.  ldx #buf set up return parameters
  159.  stx 2,s
  160.  bra 95f jump - successful exit
  161. * Current record not the one we want - go to next one
  162. 20 ldd rechdr set to seek past record
  163.  std isk2
  164.  ldd fd
  165.  sys ind,isk seek past record
  166.  bes 90f
  167.  bra 10b continue
  168. 90 std 0,s set up return value
  169.  sec return - failure exit
  170.  bra 99f
  171. 95 clc return - success exit
  172. 99 puls d,x,y,u,pc return
  173.  
  174. *
  175. * putrec
  176. *
  177. * Rewrite a portion of the file.
  178. *  (X) - Buffer address of changed portion
  179. *  (D) - Number of bytes altered
  180. *
  181. putrec
  182.  pshs d,x,y,u save registers
  183.  std iwrt2 set up for write
  184.  coma
  185.  comb
  186.  addd #1 compute -(D)
  187.  std sk_back2 set up seek call
  188.  ldd fd reposition file
  189.  sys ind,sk_back
  190.  bes 90f
  191.  ldd fd rewrite data
  192.  sys ind,iwrt
  193.  bes 90f
  194.  bra 95f exit
  195. 90 std 0,s return error code
  196.  sec return - failure
  197.  bra 99f
  198. 95 clc return - success
  199. 99 puls d,x,y,u,pc
  200.  
  201.  
  202.  ifnc &a,"tsc"
  203.  
  204. * more junk
  205.  
  206.  fcb 11,22,65,77,55,34,99,87,23,44,56,77,123,43
  207.  fcb 44,33,65,77,21,76,87,34,23,87,65,87,123,11
  208.  
  209. catch ldd #cont
  210.  std 10,s reset pc
  211.  rti return
  212.  
  213.  fcb 1,33,55,66,88,97,65,123,234,251,218,23,87,108
  214.  endif
  215.  
  216.  
  217.  
  218. *
  219. * Error routines
  220. *
  221.  
  222. synerr ldd #2 set file desc
  223.  sys write,E0,S0
  224.  ldd #$ff set status
  225.  sys term
  226. err1 pshs d
  227.  ldd #2
  228.  sys write,E1,S1
  229.  puls d
  230.  sys term
  231. err2 pshs d
  232.  ldd #2
  233.  sys write,E2,S2
  234.  puls d
  235.  sys term
  236. err3 ldd #2
  237.  sys write,E3,S3
  238.  ldd #$ff set status
  239.  sys term
  240.  
  241. * messages
  242.  
  243. E0 fcc 'Command syntax error.',$d
  244. S0 equ *-E0
  245. E1 fcc "Can't open the specified file.",$d
  246. S1 equ *-E1
  247. E2 fcc 'File read error.',$d
  248. S2 equ *-E2
  249. E3 fcc 'Bad file!',$d
  250. S3 equ *-E3
  251.  
  252. * storage
  253.  
  254. iopn fcb open open call
  255. iopn2 fdb 0,2
  256.  
  257. isk fcb seek seek call
  258.  fdb 0
  259. isk2 fdb 0,1
  260.  
  261. sk_back fcb seek seek backward in file
  262.  fdb -1
  263. sk_back2 fdb 0,1
  264.  
  265. ird fcb read read data
  266.  fdb buf buffer address
  267. ird2 fdb 0 buffer size
  268.  
  269. iwrt fcb write write data
  270.  fdb buf
  271. iwrt2 fdb 0 buffer size
  272.  
  273. fd fdb 0
  274. OLD_UniFLEX fcb 0 Old UniFLEX file being installed
  275. rechdr fdb 0,0 Absolute Load record header
  276. sbuf rzb 32 status buffer
  277. bhdr rzb 32 header record buffer
  278. buf rmb 512 space for data record
  279.  
  280.  end inst
  281.