antoine-source/appleworksgs/Scrap/Src/dbaworks.aii

1 line
10 KiB
Plaintext
Raw Normal View History

2023-03-04 02:45:20 +00:00
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