mirror of
https://github.com/antoinevignau/source.git
synced 2024-07-27 19:29:06 +00:00
1 line
10 KiB
Plaintext
1 line
10 KiB
Plaintext
|
load 'macros.dump'
include 'driver.equ'
include 'scrap.equ'
include 'dbsc.equ'
IMPORT D_AlertBox
IMPORT D_BeachBall
IMPORT D_CurCursor
IMPORT D_DateToStr
import DBDate
import X_DBTime
IMPORT X_DefaultDBFieldBlock
IMPORT FieldRecSize
IMPORT X_FieldRecord
IMPORT X_FieldRect
IMPORT X_FieldWidth
IMPORT D_GrowHandle
IMPORT D_GrowLHandle
IMPORT MinFieldSize
IMPORT D_NeedHandle
IMPORT X_OldCursor
IMPORT X_SSScratch
IMPORT X_ScratchRect
IMPORT D_SetCursor
IMPORT X_tenthsto80ths
IMPORT D_TimeToStr
import X_ClipData
import D_NeedHand
X_ScAWDBtoDBScrap PROC EXPORT
input Src:l
local Sptr:l,Dptr:l,NumReps:w,HeaderSize:w
local Rows:w,Columns:w,ScrapSize:l,Rowdex:w
local Coldex:w,FieldPtr:l,StringSize:w,FieldOff:l
local DataPointer:l,StringBlock:l,SBPtr:l,FHSize:w
local RowSize:l,ASptr:l,RealColumns:w,CatOffset:w
local FieldsSkipped:w,SBSize:l,DataOffset:l,CatName:w
local CatSize:w,Temp:l
output Dest:l
error err
begin
MoveWord >D_CurCursor,X_OldCursor
;Dereference source pointer
MoveLong [Src],Sptr
;How big is AWHeader?
MoveWord [Sptr],HeaderSize
;Get number of reports
ldy #X_RepNum
lda [Sptr],y
and #$ff
sta NumReps
;Now figure out how big this database is
ldy #222
lda [Sptr],y
and #$ff
sta Columns
MoveWord [Sptr]:#X_CatNum,a
and #$ff
sta RealColumns
Cmpw Columns,RealColumns
jeq noprob
call D_AlertBox,in=(#OKCancelBox:w,#HiddenStr:l),out=(a:w)
cmp #OK
beq noprob
MoveWord #-1,err
brl exit
HiddenStr STR 'You will lose the information in the',CR,'deleted categories.'
noprob MoveLong [Src],Sptr
ldy #X_RecNum
lda [Sptr],y
and #$7FFF ; strip off high-bit, incase it's a AW3.0 file<6C>J.K.
sta Rows
;Get block to store strings in. SBSize=RealColumns*128
;First multiply by 256
lda RealColumns
xba
tax
and #$ff
sta SBSize+2
txa
and #$ff00
sta SBSize
;Then shift right once
lsr SBSize+2
ror SBSize
call D_NeedHand,in=(SBSize:l),out=(StringBlock:l),err=err
bcc noerrx
brl exit
noerrx tool _MaxBlock,out=(ScrapSize:l)
call D_NeedHand,in=(ScrapSize:l),out=(Dest:l),err=err
bcc @1
tool _DisposeHandle,in=(StringBlock:l)
brl exit
@1 tool _Multiply,in=(Columns:w,#MinFieldSize:w),out=(:l)
AddLong s,#X_DBScHeaderSize,ScrapSize
call D_GrowHandle,in=(ScrapSize:l,Dest:l),err=err
bcc @2
tool _DisposeHandle,in=(StringBlock:l)
@2
;Now do as much of the header as we can
MoveLong [Dest],Dptr
lda #X_DBColumnType
sta [Dptr]
MoveWord Rows,[Dptr]:#X_DBRows
MoveWord Columns,[Dptr]:#X_DBColumns
MoveWord #0,[Dptr]:#X_DBLabels
MoveWord #X_DBFormHt,[Dptr]:#X_DBFormHeight
MoveWord #0,[Dptr]:#X_DBHeaderHeight
MoveWord #0,[Dptr]:#X_DBFooterHeight
;Copy defaults into working field header
tool _BlockMove,in=(#X_DefaultDBFieldBlock:l,#X_FieldRecord:l,#FieldRecSize:l)
;Now do the field headers
stz Coldex
;Initialize the form rectangle
MoveWord #X_DBFormVerBorder,X_ScratchRect
MoveWord #X_DBFormHorBorder,X_ScratchRect+2
MoveWord #X_DBFormVerBorder+X_DBEntryHeight,X_ScratchRect+4
MoveWord #X_DBFormHorBorder+X_DBEntryWidth,X_ScratchRect+6
MoveLong #X_DBScHeaderSize,FieldOff
loop MoveLong [Src],Sptr
MoveLong [StringBlock],SBptr
jsl D_BeachBall
lda Coldex
cmp Columns
jge endloop
lda #MinFieldSize
sta X_FieldRecord
;Get list width
AddWord Coldex,#X_ListWidthTable,y
lda [Sptr],y
and #$ff
jsl X_tenthsto80ths
sta X_FieldWidth
;Get form rectangle
MoveRect X_ScratchRect,X_FieldRect
;Get field name (growing the handle and adjusting the
;field size appropriately)
lda Coldex
clc
adc #X_ListOrder
tay
lda [Sptr],y
and #$ff
dec a
sta CatSize
tool _Multiply,in=(CatSize:w,#X_CatNameSize:w),out=(ax:l)
clc
adc #X_FirstCatName
tay
sty CatOffset
lda [Sptr],y
and #$ff
sta StringSize
; Addwl StringSize.<,X_FieldRecord
; Addwl StringSize.<,X_FieldRecord
asl a
clc
adc X_FieldRecord
sta X_FieldRecord
bcc @1
inc X_FieldRecord+2
@1 lda StringSize
asl a
clc
adc ScrapSize
sta ScrapSize
bcc @2
inc ScrapSize+2
@2
inc StringSize
lda Coldex
jsr Mul128
tay
lda CatSize
sta [SBPtr],y
call D_GrowHandle,in=(ScrapSize:l,Dest:l),err=err
bcc
|