Wording fix.
[www.jankratochvil.net.git] / project / CasioA / Casio-A.asm
1 ;DEBUG  equ     1
2
3 ;TODO:
4 ; TRANSMIT/K/M & AppMessage w/arg>1
5
6         include "ssmac.h"
7
8 BaudRateBase    equ     1200
9 Def_BaudRateN   equ     3
10 Def_BaudRate    equ     BaudRateBase<<Def_BaudRateN
11 Def_Micros      equ     0       ;1000
12 SerBufSiz       equ     1024
13 LineBufSiz      equ     1024
14 AppBufSiz       equ     256
15 ASCII_ACK       equ     6
16 ASCII_EOT       equ     4
17 ASCII_CR        equ     13
18 ASCII_LF        equ     10
19 Char_Term       equ     '^'     ;Termination
20 Char_TermRepl   equ     '?'     ;How to replace Char_Term during recv
21 Char_CasCR      equ     $E4     ;<-/
22 Char_CasSep     equ     $F3     ;/#|
23 MUIMaster_MVer  equ     14
24 MUITags equ     $80420000
25 PackMenuHots    equ     7
26 FirstMenuCode   equ     6
27 SerErrTabSize   equ     13      ;*4
28
29         start
30
31         dbuf    Buttons,0
32         dv.l    TransmitButton
33         dv.l    ReceiveButton
34         dv.l    SettingsButton
35         dv.l    QuitButton
36         dv.l    AbortButton
37         dv.l    SaveButton
38         dv.l    UseButton
39         dv.l    RestoreButton
40         dv.l    CloseButton
41         dv.l    StatBar0
42         dv.l    StatBarNum0
43         dv.l    StatBar1
44         dv.l    StatBarNum1
45         dv.l    StatBar2
46         dv.l    StatBarNum2
47         dv.l    StatBar3
48         dv.l    StatBarNum3
49         dv.l    StatBar4
50         dv.l    StatBarNum4
51         dv.l    StatBar5
52         dv.l    StatBarNum5
53         dbuf.l  PartCounts,6
54         dbuf    Bitmaps,6*(bm_SIZEOF-7*4)
55         dbuf.l  SerErrMem,SerErrTabSize
56         dv.l    SerialTrk
57         dv.l    SerialIO
58         dv.l    TimerTrk
59         dv.l    CurLine
60         dv.l    TxFileSize
61         dv.l    ErrPtr
62         dv.l    muimasterbase
63         dv.l    MUIWaitMask
64         dv.l    BaudRateSlider
65         dv.l    BaudRateClass
66         dv.l    MenuStrip
67         dv.l    TransmitMItem
68         dv.l    ReceiveMItem
69         dv.l    ConfigMItem
70         dv.l    StatBarText
71         dv.l    StatBarBMap
72         dv.l    TransmitFName
73         dbuf    WOpenHook,h_SIZEOF
74         dbuf    AppObjHook,h_SIZEOF
75         dbuf    SerBuf,SerBufSiz        ;A!
76         dbuf    LineBuf,LineBufSiz      ;A!
77         dbuf    AppDropBuf,AppBufSiz
78         dv.w    GaugeSet
79         dbuf.w  MenusHots,PackMenuHots
80         dv.b    CurPart
81         dv.b    SerByte
82         dv.b    TimerPend
83         dv.b    FallOut
84         dv.b    Inside
85         dv.b    InAbort
86         dv.b    GotCmdArgs
87
88         moveq   #Def_Micros,d1
89         get.l   Arg_MicroWait,d0
90         beq.s   NoMicros
91         move.l  d0,a0
92         move.l  (a0),d1
93 NoMicros        put.l   d1,Arg_MicroWait
94         dtl     <serial.device>,a0
95         get.l   Arg_Device,d0
96         beq.s   NoDevice
97         move.l  d0,a0
98         move.l  (a0),a0
99 NoDevice        put.l   a0,Arg_Device
100         moveq   #0,d1
101         get.l   Arg_DevUnit,d0
102         beq.s   NoDevUnit
103         move.l  d0,a0
104         move.l  (a0),d1
105 NoDevUnit       put.l   d1,Arg_DevUnit
106         move.l  #Def_BaudRate,d1
107         get.l   Arg_Baud,d0
108         beq.s   NoBaud
109         move.l  d0,a0
110         move.l  (a0),d1
111 NoBaud  put.l   d1,Arg_Baud
112
113         lea     SerErrTab(pc),a0
114         move.l  a0,a2
115         geta    SerErrMem,a1
116 LoopSerErr      move.b  -(a0),1(a1)
117         beq.s   DoneSerErr
118         moveq   #0,d0
119         move.b  -(a0),d0
120         move.b  d0,3(a1)
121         addq    #4,a1
122         subq.b  #1,d0
123 LoopSerErr2     move.l  a2,(a1)+
124 SkipSerErr      tst.b   (a2)+
125         bne.s   SkipSerErr
126         dbra    d0,LoopSerErr2
127         bra.s   LoopSerErr
128
129 DoneSerErr      get.l   Arg_To,d0
130         vor.l   Arg_From,d0
131         snev    GotCmdArgs
132         tstv.l  Arg_MUI
133         bne.s   DoMUI
134         tst.l   d0
135         bne     ProcessCmdArgs
136 DoMUI   dtl     <muimaster.library>,a0
137         moveq   #MUIMaster_MVer,d0
138         call    TrackLibrary
139         put.l   d0,muimasterbase
140         move.l  d0,a6
141         bset.b  #svfb_errorreq,sv_flags+3(v)
142
143         dtl     <_Transmit>,a2
144         dt      <_Receive>
145         dt      <_Settings>
146         dt      <_Quit>
147         dt      <_Abort>
148         dt      <_Save>
149         dt      <_Use>
150         dt      <_Restore>
151         dt      <_Close>
152         geta    Buttons,a3
153         moveq   #8,d2
154 LoopMakeObj     push    a2
155         move.l  sp,a0
156         moveq   #MUIO_Button,d0
157         call    muimaster,MUI_MakeObjectA
158         addq    #4,sp
159         move.l  d0,(a3)+
160         bne.s   GenTButton
161 MUIDosError     dtl     <MUI error>,a0
162 SSDosError      jump    ss,DosError
163
164 GenTButton      tst.b   (a2)+
165         bne.s   GenTButton
166         move.l  d0,a0
167         move.w  #MUIA_CycleChain-MUITags,d0
168         moveq   #TRUE,d1
169         bsr     SetAttr
170         dbra    d2,LoopMakeObj
171
172         move.w  #MUIA_InputMode-MUITags,d0
173         moveq   #MUIV_InputMode_Toggle,d1
174         get.l   SettingsButton,a0
175         bsr     SetAttr
176         move.w  #MUIA_Weight-MUITags,d0
177         moveq   #0,d1
178         get.l   AbortButton,a0
179         bsr     SetAttr
180
181         move.w  #MUIA_Popstring_Toggle-MUITags,d0
182         moveq   #1,d1
183         get.l   TransmitButton,a0
184         bsr     SetAttr
185         move.w  #MUIA_Popstring_Toggle-MUITags,d0
186         moveq   #1,d1
187         get.l   ReceiveButton,a0
188         bsr     SetAttr
189
190         moveq   #(6*32*16/8)>>2,d0
191         rol.l   #2,d0
192         moveq   #MEMF_PUBLIC!MEMF_CHIP,d1       
193         call    ss,TrackAllocMem
194         move.l  d0,a6
195
196         lea     CasioIcons(pc),a2
197         lea     PartTab(pc),a4
198         geta    Bitmaps,a3
199         geta    StatBar0,a1
200         moveq   #5,d7
201 SkipZeroPart    tst.b   (a4)+
202         beq.s   SkipZeroPart
203         lea     -1(a4),a0
204         put.l   a0,StatBarText
205         put.l   a3,StatBarBMap
206         move.l  #$00040010,(a3)+        ;bm_BytesPerRow+bm_Rows
207         move.l  #$00010000,(a3)+        ;bm_Flags+bm_Depth+bm_Pad
208         move.l  a6,(a3)+                ;bm_Planes[0]
209         moveq   #15,d0
210 GenIconLine     move.w  (a2)+,d1
211         moveq   #15,d2
212 GenIconPix      move.w  d1,d4
213         roxr.w  #1,d4
214         roxr.l  #1,d3
215         roxr.w  #1,d1
216         roxr.l  #1,d3
217         dbra    d2,GenIconPix
218         move.l  d3,(a6)+
219         dbra    d0,GenIconLine
220         mpush   a1-a3/a6
221         lea     MUI_StatBar(pc),a3
222         bsr     GenerateMUI
223         mpop    a1-a3/a6
224         move.l  d0,(a1)+        ;StatBar
225         get.l   StatBarNumber,(a1)+     ;StatBarNum
226 SkipPartPart    tst.b   (a4)+
227         bne.s   SkipPartPart
228         dbra    d7,SkipZeroPart
229
230         move.l  #gnm_SIZEOF*PackMenuNum+1,d0
231         move.l  d0,d2
232         call    ss,IPAlloc
233         clr.l   -(sp)
234         push    d0
235         move.l  d0,a3
236         add.l   d0,d2
237         subq.l  #1,d2
238         lea     PackMenus(pc),a2
239         geta    MenusHots,a4
240         moveq   #FirstMenuCode,d3
241 NextMenuField   addq.b  #NM_ITEM,(a3)
242 NextMenuTag     move.b  (a2)+,d0
243         beq.s   GotMenuTitle
244         bpl.s   GotMenuHot
245         addq.b  #1,d0
246         bne.s   NotMenuSepar
247         subq.l  #-NM_BARLABEL,gnm_Label(a3)
248         bra.s   NextMenuRecord
249
250 NotMenuSepar    move.w  #CHECKIT!MENUTOGGLE,gnm_Flags(a3)
251         bra.s   NextMenuTag
252
253 GotMenuTitle    subq.b  #NM_ITEM-NM_TITLE,(a3)
254 GotMenuHot      subq.b  #2,d0
255         bmi.s   NotMenuHot
256         move.b  d0,(a4)
257         move.l  a4,gnm_CommKey(a3)
258         addq    #2,a4
259 NotMenuHot      move.l  a2,gnm_Label(a3)
260 ToEndLabel      tst.b   (a2)+
261         bne.s   ToEndLabel
262         move.l  d3,gnm_UserData(a3)
263         addq.l  #1,d3
264 NextMenuRecord  lea     gnm_SIZEOF(a3),a3
265         cmp.l   a3,d2
266         bne.s   NextMenuField
267         move.l  sp,a0
268         moveq   #MUIO_MenustripNM,d0
269         call    muimaster,MUI_MakeObjectA
270         put.l   d0,MenuStrip
271         beq     MUIDosError
272         addq    #8,sp
273         pea     (FirstMenuCode+1).w
274         push    #MUIM_FindUData
275         move.l  d0,a2
276         bsr     DoMethod
277         put.l   d0,TransmitMItem
278         addq.l  #1,4(sp)        ;2
279         bsr     DoMethod
280         put.l   d0,ReceiveMItem
281         beq     MUIDosError
282         addq.l  #6,4(sp)        ;8
283         bsr     DoMethod
284         put.l   d0,ConfigMItem
285         beq     MUIDosError
286         addq    #8,sp
287
288         get.l   sv_thistask,a0
289         move.l  v,TC_Userdata(a0)
290         sub.l   a0,a0
291         gett    STR_Slider,a1
292         sub.l   a2,a2
293         moveq   #6,d0
294         lea     BaudRateFunc(pc),a3
295         call    muimaster,MUI_CreateCustomClass
296         put.l   d0,BaudRateClass
297         beq     MUIDosError
298         move.l  d0,a0
299         move.l  mcc_Class(a0),a0
300         clr.l   -(sp)
301         push    sp      ;TRUE
302         push    #MUIA_CycleChain
303         pea     Def_BaudRateN.w
304         push    #MUIA_Numeric_Max
305         pea     Def_BaudRateN.w
306         push    #MUIA_Numeric_Value
307         pea     3.w
308         push    #MUIA_ExportID
309         sub.l   a1,a1
310         move.l  sp,a2
311         call    intuition,NewObjectA
312         lea     4*8+4(sp),sp
313         put.l   d0,BaudRateSlider
314         beq     MUIDosError
315
316         lea     MUI_Applic(pc),a3
317         bsr     GenerateMUI
318
319         lea     MUI_Notific(pc),a3
320         bsr     SetNotify
321
322         push    TriggerValPtr(pc)       ;28
323         vpush   MainWin                 ;24
324         push    #MUIM_Popstring_Open    ;20
325         pea     1.w                     ;16
326         vpush   TransmitAsl             ;12
327         pea     (FirstMenuCode+1).w     ;8
328         push    #MUIA_Application_MenuAction ;4
329         push    #MUIM_Notify            ;0
330         bsr     DoMethodAppl
331         addq.l  #1,8(sp)        ;2
332         get.l   ReceiveAsl,12(sp)
333         bsr     DoMethod
334         addq.l  #2,8(sp)        ;4
335         get.l   ApplObj,12(sp)
336         addq.l  #1,16(sp)       ;->2
337         move.w  #MUIM_Application_AboutMUI-MUITags,22(sp)
338         bsr     DoMethod
339         addq.l  #5,8(sp)        ;9
340         moveq   #MUIV_Application_Load_ENVARC,d0
341         move.l  d0,24(sp)
342         move.w  #MUIM_Application_Load-MUITags,22(sp)
343         bsr     DoMethod
344         addq.l  #1,8(sp)        ;10
345         move.w  #MUIM_Application_OpenConfigWindow-MUITags,22(sp)
346         clr.l   24(sp)
347         bsr     DoMethod
348         move.w  #MUIA_Window_Open-MUITags,6(sp)
349         move.l  EveryTimePtr(pc),8(sp)
350         move.w  #MUIM_CallHook-MUITags,22(sp)
351         geta    WOpenHook,a0
352         lea     WinOpenHook(pc),a1
353         move.l  a1,h_Entry(a0)
354         move.l  v,h_Data(a0)
355         move.l  a0,24(sp)
356         get.l   MainWin,a2
357         bsr     DoMethod
358         move.w  #MUIA_AppMessage-MUITags,6(sp)
359         move.l  a2,12(sp)
360         addq.l  #1,16(sp)       ;->3
361         geta    AppObjHook,a0
362         lea     AppDropHook(pc),a1
363         move.l  a1,h_Entry(a0)
364         move.l  v,h_Data(a0)
365         move.l  a0,24(sp)
366         bsr     DoMethod
367         lea     8*4(sp),sp
368
369         bsr     ActRestore
370
371         move.w  #MUIA_Window_Open-MUITags,d0
372         moveq   #TRUE,d1
373         get.l   MainWin,a0
374         bsr     SetAttr
375         move.w  #MUIA_Window_Open-MUITags,d0
376         get.l   MainWin,a0
377         bsr     GetAttr
378         beq     MUIDosError
379
380         bsr     ProcessCmdArgs
381         tstv.b  GotCmdArgs
382         bne     Return8
383
384 LoopNewInput    bsr.s   DoMUIPoll
385         get.l   MUIWaitMask,d0
386         beq.s   LoopNewInput
387         bsr.s   MUIPollEnd
388         bra.s   LoopNewInput
389
390 MUIPollEnd      bset.l  #SIGBREAKB_CTRL_C,d0
391         call    exec,Wait
392         put.l   d0,MUIWaitMask
393         btst.l  #SIGBREAKB_CTRL_C,d0
394         beq     Return8
395 BreakOut        moveq   #err_break,d0
396 SSReportError   jump    ss,ReportError
397
398 DoMUIPoll       call    ss,TestBreak
399         push    a2
400         vpea    MUIWaitMask
401         push    #MUIM_Application_NewInput
402         bsr     DoMethodAppl
403         addq    #8,sp
404         pop     a2
405         addq.l  #1,d0
406         beq     EXIT            ;MUIV_Application_ReturnID_Quit
407         subq.l  #2,d0
408         bmi     Return8
409         moveq   #8,d1
410         cmp.l   d0,d1
411         bcs     Return8
412         cmp.w   #5,d0
413         bcc.s   CallAct
414         tstv.b  Inside
415         bne.s   Return8
416 CallAct add.l   d0,d0
417         lea     ButtonAct(pc),a0
418         add.w   (a0,d0.w),a0
419         jmp     (a0)
420
421 ButtonAct       dc.w    ActTransmit-ButtonAct   ;0
422         dc.w    ActReceive-ButtonAct    ;1
423         dc.w    ActSave-ButtonAct       ;2
424         dc.w    ActUse-ButtonAct        ;3
425         dc.w    ActRestore-ButtonAct    ;4
426         dc.w    ActAbort-ButtonAct      ;5
427         dc.w    Return8-ButtonAct       ;6
428         dc.w    Return8-ButtonAct       ;7
429         dc.w    ActAbout-ButtonAct      ;8
430
431 ActAbout        moveq   #TRUE,d1
432         bsr.s   ApplicSleep
433         dtl.lc  <Casio-A version 1.0 - The communication>,a0
434         dt.lc   <software for Casio organizers series SF-Ax0>
435         dt.lc   <© 1996 Short Software ',60,'short@k332.feld.cvut.cz',62,'>
436         dt.lc   <This software is FreeWare.>
437         dt.lc   <>
438         dt.lc   <Thanks to Pavouk ',60,'pavouk@k332.feld.cvut.cz',62,'>
439         dt.lc   <for testing, icons and hardware support.>
440         dt.lc   <>
441         dt.lc   <This is a MUI-Application,
442         dt      <see "Project/About MUI..." for more.>
443         push    a2
444         dtl     <Okay>,a2
445         call    ss,SimpleRequest
446         pop     a2
447         moveq   #FALSE,d1
448 ApplicSleep     move.w  #MUIA_Application_Sleep-MUITags,d0
449         get.l   ApplObj,a0
450         bra     SetAttr
451
452 ActUse  push    #MUIV_Application_Save_ENV
453         bra.s   ActUseCont
454
455 ActSave push    #MUIV_Application_Save_ENVARC
456 ActUseCont      push    #MUIM_Application_Save
457         bsr     DoMethodAppl
458         addq    #8,sp
459         move.w  #MUIA_Window_Open-MUITags,d0
460         moveq   #FALSE,d1
461         get.l   ConfigWin,a0
462         bra     SetAttr
463
464 ActRestore      push    #MUIV_Application_Load_ENV
465         push    #MUIM_Application_Load
466         bsr     DoMethodAppl
467         addq    #8,sp
468 Return8 rts
469
470 ActTransmit     get.l   Arg_From,d0
471         bne     TrasmitClear
472         get.l   TransmitText,a0
473         bsr     GetAttrStr
474         bra     DoTransmit
475
476 ActReceive      get.l   ReceiveText,a0
477         bsr     GetAttrStr
478         bra     DoReceive
479
480 ActAbort        stv     InAbort
481 Return10        rts
482
483 ChangeState0    tstv.l  muimasterbase
484         beq.s   Return10
485         moveq   #0,d2
486 ;---------------
487 ChangeState     clr.l   -(sp)
488         vpush   ConfigGroup
489         vpush   ReceiveButton
490         vpush   TransmitButton
491         push    d2
492         push    #MUIA_Disabled
493         push    #MUIM_MultiSet
494         bsr     DoMethodAppl
495         lea     7*4(sp),sp
496         move.w  #MUIA_Menuitem_Enabled-MUITags,d0
497         bchg.l  #0,d2
498         move.l  d2,d1
499         get.l   TransmitMItem,a0
500         bsr.s   SetAttr
501         move.w  #MUIA_Menuitem_Enabled-MUITags,d0
502         move.l  d2,d1
503         get.l   ReceiveMItem,a0
504         bsr.s   SetAttr
505         move.w  #MUIA_Disabled-MUITags,d0
506         move.l  d2,d1
507         get.l   GaugeGroup,a0
508 SetAttr clr.l   -(sp)
509         push    d1
510         move.w  d0,-(sp)
511         move.w  #MUITags>>16,-(sp)
512         move.l  sp,a1
513         call    intuition,SetAttrsA
514         lea     12(sp),sp
515         rts
516 ;---------------
517 ProcessCmdArgs  get.l   Arg_To,d0
518         beq.s   NoArgTo
519         bsr.s   DoReceive
520         clrv.l  Arg_To
521 NoArgTo get.l   Arg_From,d0
522         beq.s   Return13
523 TrasmitClear    bsr.s   DoTransmit
524         clrv.l  Arg_From
525 Return13        rts
526
527 DoTransmit      pea     CallTransmit(pc)
528         moveq   #1,d1
529         bra.s   CallRoutine
530
531 DoReceive       pea     CallReceive(pc)
532         moveq   #2,d1
533 CallRoutine     put.b   d1,Inside
534         push    d0
535
536         tstv.l  muimasterbase
537         beq.s   SkipPrepCfg
538         moveq   #1,d2
539         bsr     ChangeState
540         get.l   DeviceString,a0
541         bsr     GetAttrStr
542         put.l   d0,Arg_Device
543         move.w  #MUIA_Numeric_Value-MUITags,d0
544         get.l   UnitNumber,a0
545         bsr     GetAttr
546         put.l   d0,Arg_DevUnit
547         move.w  #MUIA_Numeric_Value-MUITags,d0
548         get.l   BaudRateSlider,a0
549         bsr     GetAttr
550         moveq   #1200>>4,d1
551         addq.l  #4,d0
552         lsl.l   d0,d1
553         put.l   d1,Arg_Baud
554         move.w  #MUIA_Numeric_Value-MUITags,d0
555         get.l   MicroSecSlider,a0
556         bsr     GetAttr
557         put.l   d0,Arg_MicroWait
558
559         get.b   Inside,d0
560         subq.b  #1,d0
561         dtl     <Transmitting... %ld%% done>,a0
562         beq.s   SkipRecvInfo
563         dtl     <Receiving... %ld%% done>,a0
564 SkipRecvInfo    move.l  a0,d1
565         move.w  #MUIA_Gauge_InfoText-MUITags,d0
566         get.l   ProgressGauge,a0
567         bsr     SetAttr
568         moveq   #0,d0
569         bsr     DoSetGauge
570         moveq   #5,d2
571         vlea    PartCounts+6*4,a2
572         move.l  (v),a6
573 ClearCounts     clr.l   -(a2)
574         move.l  a2,a1
575         bsr.s   SetNumber
576         dbra    d2,ClearCounts
577 SkipPrepCfg     pop     a1
578         pop     a0
579         push    a1
580         moveq   #0,d0
581         clrv.b  InAbort
582         call    ss,CallBlock
583         get.b   Inside,d0
584         bmi.s   AskDelete
585         subq.b  #2,d0
586         beq.s   DoDelete
587         bra.s   WasTransmit
588
589 AskDelete       dtl.lc  <Data file "%s" hasn''t been received correctly.>,a0
590         dt      <Do you want to delete this corrupted file?>
591         move.l  sp,a1
592         dtl     <Yes, I''ll retry.|No, leave it!>,a2
593         call    ss,SimpleRequest
594         tst.l   d0
595         beq.s   WasTransmit
596 DoDelete        move.l  (sp),d1
597         call    dos,DeleteFile
598 WasTransmit     addq    #4,sp
599         clrv.b  Inside
600         tstv.b  FallOut
601         beq     ChangeState0
602 EXIT    stv     FallOut
603 SSExitCleanup   jump    ss,ExitCleanup
604
605 AddPartCount    moveq   #0,d0
606         get.b   CurPart,d0
607         beq.s   IsZeroPart
608         subq.b  #2,d0
609 IsZeroPart      lsl.l   #2,d0
610         lea     PartCounts(v,d0.w),a1
611         addq.l  #1,(a1)
612 SetNumber       push    a2
613         lea     -12(sp),sp
614         move.l  sp,a2
615         push    a1
616         dt      PercLUT,<%lu>
617         gett    PercLUT,a0
618         call    ss,FormatStr
619         pop     a1
620         move.l  sp,d1
621         geta    PartCounts,a0
622         sub.l   a0,a1
623         add.l   a1,a1
624         geta    StatBarNum0,a0
625         move.l  (a0,a1),a0
626         move.w  #MUIA_Text_Contents-MUITags,d0
627         bsr     SetAttr
628         lea     12(sp),sp
629         pop     a2
630         move.l  (v),a6
631         rts
632
633 CallReceive     move.l  a1,a0
634         moveq   #OPEN_NEW+OPEN_LINEBUF,d0
635         moveq   #0,d1
636         call    TrackOpenBuf
637         move.l  d0,a3
638         stv     CurPart
639         bsr     SerialInit
640         put.b   #ASCII_ACK,SerByte
641 WaitSig1        bsr     GetSerByte
642         cmp.b   #ASCII_CR,d0
643         bne.s   WaitSig1
644         bsr     GetSerByte
645         cmp.b   #ASCII_LF,d0
646         bne.s   WaitSig1
647         stv.b   Inside
648 NextRcvPacket   tstv.l  muimasterbase
649         beq.s   NotUpdGauge
650         get.b   CurPart,d0
651         bmi.s   NotUpdGauge
652         bne.s   NotZeroPart
653         moveq   #2,d0
654 NotZeroPart     subq.l  #1,d0
655         moveq   #100,d1
656         mulu.w  d1,d0
657         moveq   #7,d1
658         divu.w  d1,d0
659         bsr.s   ChkSetGauge
660 NotUpdGauge     bsr     SendItNow
661         bsr     GetSerByte
662         cmp.b   #ASCII_EOT,d0
663         bne.s   NotEndTrans
664         put.b   d0,Inside
665 FullGaugeRet    moveq   #100,d0
666 ChkSetGauge     vcmp.w  GaugeSet,d0
667         bls     Return7
668 DoSetGauge      tstv.l  muimasterbase
669         beq     Return7
670         put.w   d0,GaugeSet
671         ext.l   d0
672         move.l  d0,d1
673         move.w  #MUIA_Gauge_Current-MUITags,d0
674         get.l   ProgressGauge,a0
675         bra     SetAttr
676
677 NotEndTrans     cmp.b   #2,d0
678         beq.s   GotValidPkt
679         dtl     <Packet type ID: $02/$04 is $%02x>,a0
680         move.w  d0,-(sp)
681 ExitErrorA1     move.l  sp,a1
682 ExitError       jump    ExitError       
683
684 GotValidPkt     bsr     GetSerByte
685         move.b  d0,d7
686         vcmp.b  CurPart,d0
687         beq.s   IsCurPart
688         put.b   d0,CurPart
689         cmp.b   #8,d0
690         bcs.s   SmallPartN
691 BadPartN        dtl     <Unknown packet part #: $%02x>,a0
692         moveq   #0,d0
693         get.b   CurPart,d0
694         move.w  d0,-(sp)
695         bra.s   ExitErrorA1
696
697 SmallPartN      lea     PartTab(pc),a4
698 LoopPart        subq.b  #1,d0
699         bcs.s   DoneParts
700 ScanPart        tst.b   (a4)+
701         bne.s   ScanPart
702         bra.s   LoopPart
703         
704 DoneParts       tst.b   (a4)
705         beq.s   BadPartN
706         dtl     <',Char_Term,Char_Term,Char_Term,'>,a0
707         call    BPuts
708         move.l  a4,a0
709         call    BPutsNL
710         bra.s   NoFirstRec
711
712 IsCurPart       cmp.b   #7,d7
713         beq.s   NoFirstRec
714         dtl     <',Char_Term,Char_Term,'>,a0
715         call    BPutsNL
716 NoFirstRec      bsr     GetSerByte
717         add.b   d0,d7
718         move.b  d0,d2
719         bsr     GetSerByte
720         add.b   d0,d7
721         rol.w   #8,d0
722         move.b  d2,d0
723         cmp.w   #SerBufSiz-1,d0
724         bcs.s   OkaySize
725         dtl     <Packet too long: size=%u, max=%u>,a0
726         move.w  #SerBufSiz-1,-(sp)
727 ExitErrorD0W    move.w  d0,-(sp)
728         bra.s   ExitErrorA1
729
730 OkaySize        geta    SerBuf,a4
731         clr.b   (a4,d0.l)
732         move.w  d0,d2
733         move.w  d0,d3
734         bsr     SerReceiveX
735         bsr     GetSerByte
736         move.l  a4,a0
737 NextXSumChar    add.b   d0,d7
738         move.b  (a0)+,d0
739         dbra    d2,NextXSumChar
740         tst.b   d7
741         beq.s   GoodXSum
742         dtl     <Packet checksum bad - sum:$00 is $%02x>,a0
743         move.w  d7,-(sp)
744         clr.b   (sp)
745         bra     ExitErrorA1
746
747 GoodXSum        bsr     AddPartCount
748         st      d4
749         get.b   CurPart,d0
750         beq     BefRecScan
751         cmp.b   #7,d0   ;CALENDAR
752         beq.s   DoCalendar
753         cmp.b   #$F8,(a4)+
754         beq.s   AfterF8
755         dtl     <Packet data start magic @4:$F8 is $%02x>,a0
756         moveq   #0,d0
757         move.b  -(a4),d0
758         bra.s   ExitErrorD0W
759
760 DoCalendar      cmp.w   #6,d3
761         beq.s   GoodCalLen
762         dtl     <Calendar data length:6 is %u>,a0
763         move.w  d3,-(sp)
764         bra     ExitErrorA1
765
766 GoodCalLen      move.w  (a4)+,d0
767         bsr.s   PrintDate
768         moveq   #':',d0
769         call    BPutByte
770         moveq   #3,d0
771 ReadLELong      move.b  (a4)+,d2
772         ror.l   #8,d2
773         dbra    d0,ReadLELong
774         clr.w   -(sp)
775 NextDate        addq.w  #1,(sp)
776         ror.l   #1,d2
777         bcc.s   NotMarked
778         dtl     < %02u>,a0
779         move.l  sp,a1
780         call    BPrintf
781 NotMarked       cmp.w   #31,(sp)
782         bne.s   NextDate
783         addq    #2,sp
784         bra     DoneThisRec
785
786 PrintDate       move.w  d0,d1
787         and.w   #$000F,d1
788         move.w  d1,-(sp)
789         lsr.w   #4,d0
790         add.w   #$1900,d0
791         btst.l  #8,d0
792         bne.s   Not2000
793         add.w   #$2000-$1A00,d0
794 Not2000 move.w  d0,-(sp)
795         dtl     <%x-%02u>,a0
796         move.l  sp,a1
797         call    BPrintf
798         addq    #4,sp 
799 Return7 rts
800
801 AfterF8 cmp.b   #5,d0   ;SCHEDULE
802         bne     BefRecScan
803         cmp.b   #12,d3
804         bcc.s   LongSchedDat
805         dtl     <Schedule data too short: size=%u, min=12>,a0
806         move.w  d3,-(sp)
807         bra     ExitErrorA1
808
809 LongSchedDat    moveq   #0,d0
810         move.b  10(a4),d0
811         move.w  d0,-(sp)
812         move.b  8(a4),d0
813         move.w  d0,-(sp)
814         move.b  3(a4),d0
815         cmp.b   #$F3,d0
816         bne.s   BadSchDat
817         cmp.l   #$00F30000,(sp)
818         beq.s   GoodSched
819 BadSchDat       move.w  d0,-(sp)
820         dtl     <Bad schedule data - @8:$F3 is $%02x, @13:$F3 is $%02x, @15:$00 is $%02x>,a0
821         bra     ExitErrorA1
822
823 GoodSched       addq    #4,sp
824         move.w  1(a4),d0
825         rol.w   #8,d0
826         bsr.s   PrintDate
827         moveq   #0,d0
828         move.b  4(a4),d0
829         move.w  d0,-(sp)
830         move.b  5(a4),d0
831         move.w  d0,-(sp)
832         move.b  (a4),d0
833         move.w  d0,-(sp)
834         dtl     <-%02x: %02x:%02x>,a0
835         move.l  sp,a1
836         call    BPrintf
837         addq    #6,sp
838         moveq   #0,d0
839         move.b  7(a4),d0
840         cmp.b   #$30,d0
841         beq.s   NoEndTime
842         moveq   #0,d1
843         move.b  6(a4),d1
844         move.w  d1,-(sp)
845         move.w  d0,-(sp)
846         dtl     <-%02x:%02x>,a0
847         move.l  sp,a1
848         call    BPrintf
849         addq    #4,sp
850         moveq   #0,d0
851 NoEndTime       move.b  9(a4),d0
852         beq.s   NoSchedImg
853         move.w  d0,-(sp)
854         dtl.c   < >,a0
855         dt      PercUT,<%u>
856         move.l  sp,a1
857         call    BPrintf
858         addq    #2,sp
859 NoSchedImg      moveq   #10,d0
860         call    BPutChar
861         lea     11(a4),a4
862
863 BefRecScan      moveq   #0,d2
864 MainRecScan     move.b  (a4)+,d0
865         beq.s   DoneThisRec
866         cmp.b   #Char_Term,d0
867         bne.s   NotCharTerm
868         moveq   #Char_TermRepl,d0
869         bra.s   NotCharE4
870
871 NotCharTerm     cmp.b   #Char_CasSep,d0
872         bne.s   NotCharF3
873         tst.b   d4
874         bne.s   LoopRecScan
875         bsr.s   FlushRecScan
876         moveq   #Char_Term,d0
877         call    BPutByte
878         bra.s   DoCharNL
879
880 NotCharF3       cmp.b   #Char_CasCR,d0
881         bne.s   NotCharE4
882 DoCharNL        addq.l  #1,d2
883         bra.s   LoopRecScan
884
885 NotCharE4       move.w  d0,-(sp)
886         bsr.s   FlushRecScan
887         move.w  (sp)+,d0
888         call    BPutChar
889 LoopRecScan     clr.b   d4
890         bra.s   MainRecScan
891
892 DoneThisRec     moveq   #10,d0
893         call    BPutChar
894         bra     NextRcvPacket
895
896 FlushRecScan    tst.l   d2
897 FlushRecScanX   beq     Return7
898         moveq   #10,d0
899         call    BPutChar
900         subq.l  #1,d2
901         bra.s   FlushRecScanX
902 ;***************
903 CallTransmit    put.l   a1,TransmitFName
904         move.l  a1,a0
905         moveq   #OPEN_OLD,d0
906         moveq   #0,d1
907         call    TrackOpenBuf
908         push    d0
909         tstv.l  muimasterbase
910         beq.s   EmptyFile
911         move.l  d0,a0
912         move.l  bh_handle(a0),d1
913         move.l  d1,d4
914         moveq   #0,d2
915         moveq   #OFFSET_END,d3
916         call    dos,Seek
917         moveq   #OFFSET_BEGINNING,d3
918         move.l  d4,d1
919         call    Seek
920         put.l   d0,TxFileSize
921         bne.s   EmptyFile
922         addqv.l #1,TxFileSize
923 EmptyFile       bsr     SerialInit
924         move.l  (sp),a2
925         call    BFlush
926         put.l   sp,ErrPtr
927         moveq   #0,d6
928         stv     CurPart
929         move.w  #ASCII_CR<<8!ASCII_LF,-(sp)
930         move.l  sp,a0
931         moveq   #2,d0
932         bsr     DoSendBuf
933         addq    #2,sp
934         bsr     WaitAck
935 NextLine        addqv.l #1,CurLine
936         geta    LineBuf,a3
937         move.l  a3,a0
938         move.l  #LineBufSiz,d0
939         call    BGets
940         subq.l  #1,d0
941         beq.s   StringOK
942         bsr     FlushRec
943         addq    #4,sp
944         moveq   #ASCII_EOT,d0
945         bsr     DoSendByte
946         bra     FullGaugeRet
947
948 StringOK        cmp.w   #Char_Term<<8!Char_Term,(a3)
949         bne     NotSpec
950         bsr     FlushRec
951         addq    #2,a3
952         tst.b   (a3)
953         beq.s   NextLine
954         cmp.b   #Char_Term,(a3)+
955         beq.s   ReadPartID
956 DoInvUse        dt      InvUseT,<Invalid use of ''',Char_Term,'''%s>
957         tpea    InvUseT
958         bra.s   ErrDesc
959
960 ReadPartID      lea     PartTab(pc),a4
961         clrv.b  CurPart
962         moveq   #0,d2
963 LoopRdPartN     move.l  a3,a0
964         move.l  a4,a1
965         call    utility,Stricmp
966         move.l  (v),a6
967         beq.s   NextLine
968 ScanRdPartN     tst.b   (a4)+
969         bne.s   ScanRdPartN
970         addqv.b #1,CurPart
971         cmpv.b  #8,CurPart
972         bne.s   LoopRdPartN
973 DoUnkPID        dt      UnkPIDT,<Unknown part ID%s>,a0
974         tpea    UnkPIDT
975 ErrDesc geta    LineBuf,a0
976         push    a0
977 LenLine tst.b   (a0)+
978         bne.s   LenLine
979         sub.l   (sp),a0
980         vpush   CurLine
981         get.l   TransmitFName,a2
982         push    a2
983 LenFName        tst.b   (a2)+
984         bne.s   LenFName
985         sub.l   (sp),a2
986         add.l   a2,a0
987         lea     64(a0),a0
988         move.l  a0,d0
989         call    IPAlloc
990         move.l  d0,a2
991         dtl     < in "%s", line %lu: "%s">,a0
992         move.l  sp,a1
993         call    FormatStr
994         lea     12(sp),sp
995         pop     a0
996         get.l   ErrPtr,a1
997         move.l  a2,(a1)
998         bra     ExitErrorA1
999
1000 NotSpec move.l  d6,a0
1001         tst.l   d6
1002         bne     AlreadyBeginX
1003         moveq   #0,d4
1004         geta    SerBuf,a0
1005         move.b  #2,(a0)+
1006         get.b   CurPart,d0
1007         bmi.s   DoUnkPID
1008         move.b  d0,(a0)+
1009         clr.w   (a0)+   ;Length 2 B filled L8R
1010         cmp.b   #7,d0
1011         beq     WrCalendar
1012         tst.b   d0
1013         beq     AlreadyBegin
1014         move.b  #$F8,(a0)+
1015         move.b  #Char_CasSep,(a0)+
1016         cmp.b   #5,d0
1017         bne     AlreadyBegin
1018 WrSchedule      moveq   #'-',d3
1019         bsr     ParseYear
1020         move.w  -(a4),d0
1021         rol.w   #8,d0
1022         move.w  d0,(a4)+
1023         bsr     SchedStrStr
1024         cmp.l   #32,d0
1025         bcc     BadSched
1026         tst.l   d0
1027         beq     BadSched
1028         bsr     ConvByteBCD
1029         move.b  d0,-3(a4)
1030         move.w  #Char_CasSep<<8,(a4)+
1031         bsr     SchReadHour
1032         move.b  d0,(a4)+
1033         move.l  a4,a0
1034 LoopSch2Col     move.b  (a3)+,d0
1035         move.b  d0,(a4)+
1036         beq.s   TermSch2ColX
1037         cmp.b   #' ',d0
1038         beq.s   TermSch2Col
1039         cmp.b   #'-',d0
1040         bne.s   LoopSch2Col
1041 TermSch2ColX    subq    #1,a3
1042 TermSch2Col     bsr     StrStrToLA4
1043         cmp.l   #60,d0
1044         bcc.s   BadSched
1045         bsr     ConvByteBCD
1046         move.b  d0,-2(a4)
1047         clr.b   (a4)+
1048         move.l  #$30F30000,(a4)+
1049         move.l  a4,a0
1050 SkipSchSpc      move.b  (a3)+,d0
1051         beq.s   DoneSchParse
1052         cmp.b   #' ',d0
1053         beq.s   SkipSchSpc
1054         cmp.b   #'-',d0
1055         bne.s   NoEndSchTim
1056         bsr.s   SchReadHour
1057         move.b  d0,-4(a4)
1058         move.l  a4,a0
1059 LoopSch3Col     move.b  (a3)+,d0
1060         move.b  d0,(a4)+
1061         beq.s   TermSch3Col
1062         cmp.b   #' ',d0
1063         bne.s   LoopSch3Col
1064 TermSch3Col     bsr     StrStrToLA4
1065         cmp.l   #60,d0
1066         bcc.s   BadSched
1067         bsr.s   ConvByteBCD
1068         move.b  d0,-5(a4)
1069 NoEndSchTim     move.l  a4,a0
1070 LoopSch4Col     move.b  (a3)+,d0
1071         move.b  d0,(a4)+
1072         beq.s   TermSch4Col
1073         cmp.b   #' ',d0
1074         bne.s   LoopSch4Col
1075 TermSch4Col     bsr     StrStrToLA4
1076         move.l  d0,d1
1077         lsr.l   #8,d1
1078         bne.s   BadSched
1079         move.b  d0,-2(a4)
1080         subq    #1,a3
1081 LoopSch5Col     move.b  (a3)+,d0
1082         beq.s   DoneSchParse
1083         cmp.b   #' ',d0
1084         beq.s   LoopSch5Col
1085 BadSched        get.l   ErrPtr,sp
1086         dt      BadSchedT,<Schedule format bad - req. "YEAR-MN-DY: HS:MS[-HE:ME] [ICON]"%s>
1087         tpea    BadSchedT
1088         bra     ErrDesc
1089
1090 DoneSchParse    move.l  a4,d6
1091         bra     NextLine
1092
1093 SchReadHour     bsr     SchedStrStr
1094         cmp.l   #24,d0
1095         bcc.s   BadSched
1096 ConvByteBCD     divu.w  #10,d0
1097         move.w  d0,d1
1098         swap    d0
1099         rol.b   #4,d1
1100         or.b    d1,d0
1101         rts
1102
1103 ParseYear       move.l  a0,a4
1104 LoopYrMin       move.b  (a3)+,d0
1105         beq.s   BadYear
1106         move.b  d0,(a4)+
1107         cmp.b   #'-',d0
1108         bne.s   LoopYrMin
1109         bsr     StrStrToLA4
1110         cmp.l   #2100,d0
1111         bcs.s   SmallYrYear
1112 BadYear dt      BadYearT,<Year/Month format bad - req. "YEAR-MN"%s>
1113         tpea    BadYearT
1114         bra     ErrDesc
1115
1116 SmallYrYear     cmp.w   #1901,d0
1117         bcs.s   BadYear
1118         move.l  d0,d2
1119         move.l  a4,a0
1120 LoopYrCol       move.b  (a3)+,d0
1121         beq.s   BadYear
1122         move.b  d0,(a4)+
1123         cmp.b   d3,d0
1124         bne.s   LoopYrCol
1125         bsr     StrStrToLA4
1126         cmp.l   #13,d0
1127         bcc.s   BadYear
1128         tst.l   d0
1129         beq.s   BadYear
1130         sub.w   #1900,d2
1131         moveq   #10,d1
1132         divu.w  d1,d2
1133         swap    d2
1134         rol.b   #4,d2
1135         or.b    d2,d0
1136         move.b  d0,1(a4)
1137         clr.w   d2
1138         swap    d2
1139         divu.w  d1,d2
1140         swap    d2
1141         move.b  d2,d0
1142         swap    d2
1143         rol.b   #4,d2
1144         or.b    d2,d0
1145         move.b  d0,(a4)
1146         addq    #2,a4
1147 Return2 rts
1148
1149 WrCalendar      moveq   #':',d3
1150         bsr.s   ParseYear
1151         moveq   #0,d2
1152 NextCalenDay    move.l  a4,a0
1153 SkipSpcCalen    move.b  (a3)+,d0
1154         beq.s   SendCalend
1155         cmp.b   #' ',d0
1156         beq.s   SkipSpcCalen
1157         bra.s   SkipZeroCalI
1158
1159 SkipZeroCal     move.b  (a3)+,d0
1160 SkipZeroCalI    cmp.b   #'0',d0
1161         beq.s   SkipZeroCal
1162 CopyDayNum      move.b  d0,(a4)+
1163         move.b  (a3),d0
1164         beq.s   DoneDayNum
1165         addq    #1,a3
1166         cmp.b   #' ',d0
1167         bne.s   CopyDayNum
1168 DoneDayNum      clr.b   (a4)
1169         move.l  a0,a4
1170         call    StrToL
1171         subq.l  #1,d0
1172         bmi.s   BadCalend
1173         bset.l  d0,d2
1174         cmp.l   #31,d0
1175         bcs.s   NextCalenDay
1176 BadCalend       dt      CalBadT,<Calendar format bad - req. "...: D1 D2 ... Dn"%s>
1177         tpea    CalBadT
1178         bra     ErrDesc
1179
1180 SchedStrStr     move.l  a4,a0
1181 LoopSchCol      move.b  (a3)+,d0
1182         beq     BadSched
1183         move.b  d0,(a4)+
1184         cmp.b   #':',d0
1185         bne.s   LoopSchCol
1186 StrStrToLA4     clr.b   -(a4)
1187         move.l  a0,a4
1188         moveq   #0,d0
1189 StrStrToL       move.b  (a0)+,d0
1190         beq.s   Return2
1191         cmp.b   #' ',d0
1192         beq.s   StrStrToL
1193         cmp.b   #'0',d0
1194         beq.s   StrStrToL
1195         subq    #1,a0
1196         jump    StrToL
1197
1198 SendCalend      moveq   #3,d0
1199 WrCalenLong     move.b  d2,(a4)+
1200         ror.l   #8,d2
1201         dbra    d0,WrCalenLong
1202         move.l  a4,d6
1203         bsr.s   FlushRec
1204         bra     NextLine
1205
1206 AlreadyBeginX   moveq   #Char_CasCR-$100,d0
1207         bclr.l  #0,d4
1208         bne.s   PutToBuf
1209 AlreadyBegin    move.b  (a3)+,d0
1210         bne.s   NotNL
1211         addq.l  #1,d4
1212         move.l  a0,d6
1213         bra     NextLine
1214
1215 NotNL   cmp.b   #Char_Term,d0
1216         bne.s   PutToBuf
1217         tst.b   (a3)
1218         bne     DoInvUse
1219         moveq   #-1,d4
1220         moveq   #Char_CasSep-$100,d0
1221 PutToBuf        geta    SerBuf+SerBufSiz-1,a1
1222         cmp.l   a1,a0
1223         bcs.s   GoodPktLen
1224         move.w  #SerBufSiz,-(sp)
1225         dt      PktDatLT,<Packet data too long - max=%u%s>
1226         tpea    PktDatLT
1227         bra     ErrDesc
1228
1229 GoodPktLen      move.b  d0,(a0)+
1230         bra.s   AlreadyBegin
1231
1232 FlushRec        tst.l   d6
1233         beq.s   Return3
1234         tstv.l  muimasterbase
1235         beq.s   NoMUITxProg
1236         call    BTell
1237         moveq   #100,d1
1238         call    utility,UMult32
1239         get.l   TxFileSize,d1
1240         call    utility,UDivMod32
1241         bsr     DoSetGauge
1242         bsr     AddPartCount
1243 NoMUITxProg     move.l  d6,d0
1244         geta    SerBuf+4,a0
1245         sub.l   a0,d0
1246         ror.w   #8,d0
1247         put.w   d0,SerBuf+2
1248         ror.w   #8,d0
1249         addq.l  #5,d0
1250         move.l  d6,a1
1251         subq    #4,a0
1252         lea     1(a0),a1
1253         move.w  d0,d1
1254         subq.w  #4,d1
1255         move.b  (a1)+,d2
1256 TxXSum  add.b   (a1)+,d2
1257         dbra    d1,TxXSum
1258         neg     d2
1259         move.b  d2,(a1)
1260         moveq   #0,d6
1261         pea     WaitAck(pc)
1262
1263 DoSendBuf       subq.w  #1,d0
1264         bmi.s   Return3
1265 LoopSendB       push    d0
1266         move.b  (a0)+,d0
1267         push    a0
1268         bsr.s   DoSendByte
1269         pop     a0
1270         pop     d0
1271         dbra    d0,LoopSendB
1272 Return3 rts
1273
1274 DoSendByte      put.b   d0,SerByte
1275         get.l   TimerTrk,a1
1276         move.l  trk_data(a1),a0
1277         get.l   Arg_MicroWait,IOTV_TIME+TV_MICRO(a0)
1278         beq.s   SendItNow
1279         clr.l   IOTV_TIME+TV_SECS(a0)
1280         dtl     <TR_ADDREQUEST>,a0
1281         call    ss,ChkDoIO
1282 SendItNow       get.l   SerialIO,a0
1283         geta    SerByte,a1
1284         move.l  a1,IO_DATA(a0)
1285         moveq   #1,d0
1286         move.l  d0,IO_LENGTH(a0)
1287         move.w  #CMD_WRITE,IO_COMMAND(a0)
1288         dtl     <CMD_WRITE>,a0
1289         get.l   SerialTrk,a1
1290         jump    ss,ChkDoIO
1291 ;***************
1292 WaitAck bsr.s   GetSerByte
1293         cmp.b   #ASCII_ACK,d0
1294         beq.s   Return1
1295         addq    #2,sp
1296         move.w  d0,(sp)
1297         dtl     <Casio memory exhausted - got $%02x (ACK=$06)%s>,a0
1298         cmp.b   #5,d0
1299         beq.s   MemoryErr
1300         dtl     <Casio remote abort - got $%02x (ACK=$06)%s>,a0
1301         cmp.b   #ASCII_EOT,d0
1302         beq.s   MemoryErr
1303         dtl     <Expected ACK - $06, got $%02x%s>,a0
1304 MemoryErr       push    a0
1305         bra     ErrDesc
1306
1307 ;---------------
1308 GetSerByte      moveq   #1,d0
1309         subq    #2,sp
1310         move.l  sp,a0
1311         bsr.s   SerReceive
1312         moveq   #0,d0
1313         move.b  (sp)+,d0
1314 Return1 rts
1315 ;---------------
1316 SerReceiveX     move.l  a4,a0
1317 SerReceive      get.l   SerialIO,a1
1318         move.l  a0,IO_DATA(a1)
1319         move.w  #CMD_READ,IO_COMMAND(a1)
1320         move.l  d0,IO_LENGTH(a1)
1321         move.l  MN_REPLYPORT(a1),a0
1322         move.b  MP_SIGBIT(a0),d5
1323         call    exec,SendIO
1324 LoopSerInput    tstv.l  muimasterbase
1325         beq.s   SkipAbort
1326         bsr     DoMUIPoll
1327         tstv.b  InAbort
1328         beq.s   SkipAbort
1329         pea     SSExitCleanup(pc)
1330         put.b   #ASCII_EOT,SerByte
1331         bra     SendItNow
1332
1333 SkipAbort       get.l   SerialIO,a1
1334         call    exec,CheckIO
1335         tst.l   d0
1336         bne.s   DoneReadIO
1337         tstv.l  muimasterbase
1338         beq.s   ForceMUIPoll
1339         get.l   MUIWaitMask,d0
1340         beq.s   LoopSerInput
1341 ForceMUIPoll    bset.l  d5,d0
1342         bsr     MUIPollEnd
1343         bra.s   LoopSerInput
1344
1345 DoneReadIO      get.l   SerialIO,a1
1346         call    exec,WaitIO
1347         move.l  (v),a6
1348 ProcSerErr      ext.w   d0
1349         beq.s   Return1
1350         geta    SerErrMem,a0
1351 ;Stolen from SSLib.asm
1352 10$     move.w  d0,d1
1353         sub.w   (a0)+,d1
1354         bcs.s   11$
1355         move.w  (a0)+,d2
1356         beq.s   0$
1357         cmp.w   d2,d1
1358         bcc.s   12$
1359         lsl.w   #2,d1
1360         move.l  0(a0,d1.w),d2
1361         moveq   #err_iofail2,d0
1362         bra.s   01$
1363
1364 11$     move.w  (a0)+,d2
1365 12$     lsl.w   #2,d2
1366         add.l   d2,a0
1367         bra.s   10$
1368
1369 0$      moveq   #err_iofail,d0
1370         get.l   Arg_Device,d2
1371 01$     dtl     <CMD_READ>,a1
1372         jump    ReportError
1373 ;---------------
1374 SerialInit      dt      TimerDev,<timer.device>
1375         gett    TimerDev,a0
1376         moveq   #IOTV_SIZE,d0
1377         move.l  d0,a1
1378         moveq   #UNIT_MICROHZ,d0
1379         moveq   #0,d1
1380         sub.l   a2,a2
1381         call    ss,TrackDevice
1382         put.l   d1,TimerTrk
1383         move.w  #TR_ADDREQUEST,IO_COMMAND(a1)
1384
1385         get.l   Arg_Device,a0
1386         get.l   Arg_DevUnit,d0
1387         moveq   #IOEXTSER_SIZE,d1
1388         move.l  d1,a1
1389         moveq   #0,d1
1390         geta    SerErrMem,a2
1391         call    TrackDevice
1392         put.l   d1,SerialTrk
1393         put.l   a1,SerialIO
1394         move.w  #SDCMD_SETPARAMS,IO_COMMAND(a1)
1395         get.l   Arg_Baud,IO_BAUD(a1)
1396         move.l  #$08080100!SERF_XDISABLED!SERF_RAD_BOOGIE,IO_READLEN(a1)
1397                         ;io_ReadLen,io_WriteLen,io_StopBits,io_SerFlags
1398         dtl     <SDCMD_SETPARAMS>,a0
1399         move.l  d1,a1
1400         jump    ChkDoIO
1401 ;---------------
1402 GenerateMUI     gett    __BaseText,a2
1403         get.l   muimasterbase,a6
1404         moveq   #0,d2
1405         bra.s   .loopnext
1406
1407 BuildMUILoop    equ     *
1408 .loop   push    d2
1409 .loop2  move.l  #MUITags,d2
1410         move.w  (a3)+,d2
1411         beq.s   .end
1412         moveq   #-1,d0
1413         cmp.w   d0,d2
1414         bne.s   .loopnext
1415         move.l  #ASL_TB,d2
1416         move.w  (a3)+,d2
1417 .loopnext       moveq   #0,d3
1418         move.w  (a3)+,d3
1419         bmi.s   .subobj
1420         bclr    #14,d3
1421         bne.s   .numb
1422         add.l   a2,d3           ; String
1423         push    d3
1424         bra.s   .loop
1425
1426 .numb   cmp.w   #$2000,d3       ; Number
1427         beq.s   .long
1428         bcs.s   .plus
1429         or.l    #$FFFFE000,d3
1430 .plus   push    d3
1431         bra.s   .loop
1432 .long   push    (a3)+
1433         bra.s   .loop
1434
1435 .subobj bclr    #15,d3
1436         bclr    #14,d3
1437         bne.s   .var
1438         add.l   a2,d3
1439         link    a4,#0
1440         push    d3
1441         move.w  (a3)+,-(sp)
1442         push    d2
1443         clr.l   -(sp)
1444         bra.s   .loop2
1445
1446 .var    move.l  (a5,d3.w),-(sp)
1447         bra.s   .loop
1448
1449 .end    move.l  -4(a4),a0
1450         move.l  sp,a1
1451         call    MUI_NewObject
1452         tst.l   d0
1453         beq     MUIDosError
1454
1455         move.w  -6(a4),d3
1456         move.l  d0,(a5,d3.w)
1457         move.l  -10(a4),d2
1458         unlk    a4
1459         tst.w   d2
1460         beq.s   Return6
1461         push    d0
1462         bra     BuildMUILoop
1463 ;---------------
1464 DoMethodAppl    get.l   ApplObj,a2
1465 DoMethod        lea     4(sp),a1
1466         move.l  -4(a2),a0
1467 DoMethodEntry   move.l  h_Entry(a0),a6
1468         jmp     (a6)
1469 ;---------------
1470 GetAttrStr      move.w  #MUIA_String_Contents-MUITags,d0
1471 GetAttr move.l  #MUITags,d1
1472         move.w  d0,d1
1473         move.l  d1,d0
1474         clr.l   -(sp)
1475         move.l  sp,a1
1476         call    intuition,GetAttr
1477         pop     d0
1478 Return6 rts
1479 ;---------------
1480 ;-1=Done,-2=TriggerValue,-3=ReturnID_Quit,-4=ID 1
1481 SetNotify       move.l  sp,d2
1482         move.w  (a3)+,d0
1483         bpl.s   FilledLongD0E
1484         move.w  d0,d1
1485         addq.w  #1,d1
1486         beq.s   Return6
1487         move.l  #MUIV_TriggerValue,d0
1488 TriggerValPtr   equ     *-4
1489         addq.w  #1,d1
1490         beq.s   FilledLongD0
1491         push    #MUIV_Application_ReturnID_Quit
1492         addq.w  #1,d1
1493         beq.s   RetQuitID
1494         neg.w   d1
1495         ext.l   d1
1496         move.l  d1,(sp)
1497 RetQuitID       push    #MUIM_Application_ReturnID
1498         pea     2.w
1499         vpush   ApplObj
1500         bra.s   DoneRetID
1501
1502 FilledLongD0E   ext.l   d0
1503 FilledLongD0    push    d0
1504         move.w  (a3)+,-(sp)
1505         move.w  #MUITags>>16,-(sp)
1506         push    #MUIM_Set
1507         pea     3.w
1508         move.w  (a3)+,d0
1509         move.l  (v,d0.w),d0
1510         push    d0
1511 DoneRetID       move.w  (a3)+,d0
1512         ext.l   d0
1513         push    d0
1514         addq.l  #1,d0
1515         bne.s   NotEveryTime
1516         move.l  #MUIV_EveryTime,(sp)
1517 EveryTimePtr    equ     *-4
1518 NotEveryTime    move.w  (a3)+,-(sp)
1519         move.w  #MUITags>>16,-(sp)
1520         push    #MUIM_Notify
1521         move.w  (a3)+,d0
1522         move.l  (v,d0.w),a2
1523         bsr     DoMethod
1524         move.l  d2,sp
1525         bra.s   SetNotify
1526 ;---------------
1527 BaudRateFunc    cmp.l   #MUIM_Numeric_Stringify,(a1)
1528         beq.s   GotNumString
1529         move.l  cl_Super(a0),a0
1530         bra     DoMethodEntry
1531
1532 GotNumString    move.w  cl_InstOffset(a0),d0
1533         mpush   a2/a5/a6
1534         add.w   d0,a2
1535         move.l  4(a1),d0        ;offsetof(struct MUIP_Numeric_Stringify,value)
1536         moveq   #1200>>4,d1
1537         addq.l  #4,d0
1538         lsl.l   d0,d1
1539         push    d1
1540         move.l  4.w,a0
1541         move.l  ThisTask(a0),a0
1542         move.l  TC_Userdata(a0),v
1543         move.l  sp,a1
1544         gett    PercLUT,a0
1545         call    ss,FormatStr
1546         addq    #4,sp
1547         move.l  a2,d0
1548         mpop    a2/a5/a6
1549         rts
1550 ;---------------
1551 WinOpenHook     mpush   a5/a6
1552         move.l  h_Data(a0),v
1553         move.w  #MUIA_Window_Window-MUITags,d0
1554         get.l   MainWin,a0
1555         bsr     GetAttr
1556         get.l   sv_thistask,a0
1557         move.l  d0,pr_WindowPtr(a0)
1558         mpop    a5/a6
1559         rts
1560 ;---------------
1561 AppDropHook     mpush   d2/d3/a2/a5/a6
1562         move.l  h_Data(a0),v
1563         move.l  (a1),a1
1564         move.l  am_NumArgs(a1),d0
1565         beq.s   DoneDropHook
1566         subq.l  #1,d0
1567         beq.s   OneDropHook
1568 BeepDropHook    sub.l   a0,a0
1569         call    intuition,DisplayBeep
1570         bra.s   DoneDropHook
1571
1572 OneDropHook     tstv.b  Inside
1573         bne.s   BeepDropHook
1574         move.l  am_ArgList(a1),a0
1575         move.l  (a0)+,d1        ;wa_Lock
1576         push    (a0)    ;wa_Name
1577         geta    AppDropBuf,a2
1578         move.l  a2,d2
1579         move.l  #AppBufSiz,d3
1580         call    dos,NameFromLock
1581         pop     d2
1582         tst.l   d0
1583         beq.s   BeepDropHook
1584         move.l  a2,d1
1585         call    AddPart
1586         tst.l   d0
1587         beq.s   BeepDropHook
1588         put.l   a2,Arg_From
1589         moveq   #1,d0
1590         push    d0
1591         push    #MUIM_Application_ReturnID
1592         bsr     DoMethodAppl
1593         addq    #8,sp
1594         move.w  #MUIA_Application_Iconified-MUITags,d0
1595         moveq   #0,d1
1596         get.l   ApplObj,a0
1597         bsr     SetAttr
1598 DoneDropHook    mpop    d2/d3/a2/a5/a6
1599         rts
1600 ;---------------
1601 Cleanup get.l   muimasterbase,a6
1602         get.l   ApplObj,d0
1603         beq.s   NoApplObj
1604         move.l  d0,a0
1605         clrv.l  ApplObj
1606         call    MUI_DisposeObject
1607 NoApplObj       get.l   BaudRateClass,d0
1608         beq     Return6
1609         move.l  d0,a0
1610         clrv.l  BaudRateClass
1611         jump    MUI_DeleteCustomClass
1612 ;---------------
1613         dc.b    0,1,15,3,11,3,4,1,1
1614 SerErrTab       dc.b    'DevBusy',0
1615         dc.b    'BufErr',0
1616         dc.b    'InvParam',0
1617         dc.b    'LineErr',0
1618         dc.b    'TimerErr',0
1619         dc.b    'BufOverflow',0
1620         dc.b    'NoDSR',0
1621         dc.b    'DetectedBreak',0
1622 ;!!! SerErrTabSize on begin - keep fresh
1623 ;---------------
1624 PackMenus       dc.b    0,'Project',0           ;0
1625         dc.b    'T'+2,'Transmit...',0   ;1
1626         dc.b    'R'+2,'Receive...',0    ;2
1627         dc.b    -1
1628         dc.b    '?'+2,'About...',0      ;3
1629         dc.b    1,'About MUI...',0      ;4
1630         dc.b    -1
1631         dc.b    'H'+2,'Hide',0          ;5
1632         dc.b    'Q'+2,'Quit',0          ;6
1633         dc.b    0,'Configuration',0             ;7
1634         dc.b    -2,'C'+2,'Settings',0 ;8
1635         dc.b    1,'Restore last saved',0 ;9
1636         dc.b    -1
1637         dc.b    'M'+2,'MUI...',0        ;10
1638 PackMenuNum     equ     14
1639 ;!!! PackMenuHots on begin - keep fresh
1640 ;---------------
1641 PartTab dc.b    'ProtID',0      ;0
1642         dc.b    0               ;1
1643         dc.b    0               ;2
1644         dc.b    'Phone-B',0     ;3
1645         dc.b    'Phone-P',0     ;4
1646         dc.b    'Schedule',0    ;5
1647         dc.b    'Memo',0        ;6
1648         dc.b    'Calendar',0    ;7
1649         even
1650 ;---------------
1651 MTag    macro
1652         ifge    \1-MUITags
1653         dc.w    \1-MUITags
1654         else
1655         dc.w    -1,\1-ASL_TB
1656         endc
1657         endm
1658
1659 MOffs   macro
1660         dc.w    \1+\2-__BaseText
1661         endm
1662
1663 MObj    macro
1664         ifne    \1
1665         MTag    \1
1666         endc
1667         ifnd    STREX_\2
1668 STREX_\2        set     1
1669         dt      STR_\2,<\2.mui>
1670         endc
1671         MOffs   $8000,STR_\2
1672         ifgt    NARG-2
1673         dc.w    \3
1674         dv.l    \3
1675         elseif
1676         dc.w    __Trash
1677         endc
1678         endm
1679
1680 MText   macro
1681         MTag    \1
1682         dt      STR_\@a,<\2>
1683         MOffs   0,STR_\@a
1684         endm
1685
1686 MNum    macro
1687         MTag    \1
1688         ifge    \2-$2000
1689         dc.w    $6000
1690         dc.l    \2
1691         elseif
1692         ifle    \2+$2000
1693         dc.w    $6000
1694         dc.l    \2
1695         elseif
1696         dc.w    $4000+(\2&$3FFF)
1697         endc
1698         endc
1699         endm
1700
1701 MVar    macro
1702         MTag    \1
1703         ifd     \2
1704         ifge    \2-$4000
1705         fail
1706         endc
1707         endc
1708         dc.w    \2+$C000
1709         endm
1710
1711 MEnd    macro
1712         dc.w    0
1713         endm
1714
1715 Notify  macro
1716         ifeq    NARG-4
1717          ifc    'Quit','\4'
1718           dc.w  -3
1719          else
1720           dc.w  -(\4)-4
1721          endc
1722         else
1723          ifc    'TriggerValue','\6'
1724           dc.w  -2
1725          else
1726           dc.w  \6
1727          endc
1728          dc.w   MUIA_\5-MUITags,\4
1729         endc
1730         ifc     'EveryTime','\3'
1731          dc.w   -1
1732         else
1733          dc.w   \3
1734         endc
1735         dc.w    MUIA_\2-MUITags,\1
1736         endm
1737
1738         dv.l    __Trash
1739         dt.c    __BaseText,<>
1740 ;---------------
1741 MUI_Applic
1742  MObj   0,Application,ApplObj
1743   MText MUIA_Application_Title,<Casio-A>
1744   MText MUIA_Application_Version,<$VER: Casio-A 1.0 (31.8.96)>
1745   MText MUIA_Application_Copyright,<© 1996 Short Software>
1746   MText MUIA_Application_Author,<Jan Kratochvil>
1747   MText MUIA_Application_Description,<Comm. tool for Casio series A organizers>
1748   MText MUIA_Application_Base,<Casio-A>
1749   MVar  MUIA_Application_Menustrip,MenuStrip
1750   MObj  MUIA_Application_Window,Window,MainWin
1751    MText        MUIA_Window_Title,<Casio-A Communicator>
1752    MNum MUIA_Window_ID,'MAIN'
1753    MNum MUIA_Window_AppWindow,TRUE
1754    MObj MUIA_Window_RootObject,Group
1755     MObj        MUIA_Group_Child,Group,GaugeGroup
1756      MNum       MUIA_Group_Horiz,TRUE
1757      MNum       MUIA_Frame,MUIV_Frame_Button
1758      MNum       MUIA_Disabled,TRUE
1759      MVar       MUIA_Group_Child,AbortButton
1760      MObj       MUIA_Group_Child,Gauge,ProgressGauge
1761       MNum      MUIA_Gauge_Horiz,TRUE
1762       MText     MUIA_Gauge_InfoText,<%ld%%>
1763       MNum      MUIA_Frame,MUIV_Frame_Gauge
1764       MEnd
1765      MEnd
1766     MObj        MUIA_Group_Child,Rectangle
1767      MEnd
1768     MObj        MUIA_Group_Child,Group
1769      MNum       MUIA_Group_Columns,2
1770      MNum       MUIA_Frame,MUIV_Frame_Text
1771      MVar       MUIA_Group_Child,QuitButton
1772      MVar       MUIA_Group_Child,SettingsButton
1773      MObj       MUIA_Group_Child,Popasl,ReceiveAsl
1774       MVar      MUIA_Popstring_Button,ReceiveButton
1775       MObj      MUIA_Popstring_String,String,ReceiveText
1776        MNum     MUIA_ExportID,6
1777        MNum     MUIA_ShowMe,FALSE
1778        MEnd
1779       MText     ASLFR_TitleText,<Receive from Casio to file...>
1780       MNum      ASLFR_DoSaveMode,TRUE
1781       MNum      ASLFR_RejectIcons,TRUE
1782       MEnd
1783      MObj       MUIA_Group_Child,Popasl,TransmitAsl
1784       MVar      MUIA_Popstring_Button,TransmitButton
1785       MObj      MUIA_Popstring_String,String,TransmitText
1786        MNum     MUIA_ExportID,5
1787        MNum     MUIA_ShowMe,FALSE
1788        MEnd
1789       MText     ASLFR_TitleText,<Files for transmit to Casio...>
1790       MNum      ASLFR_RejectIcons,TRUE
1791       MEnd
1792      MEnd
1793     MObj        MUIA_Group_Child,Rectangle
1794      MEnd
1795     MObj        MUIA_Group_Child,Group
1796      MNum       MUIA_Group_Columns,2
1797      MNum       MUIA_Frame,MUIV_Frame_Group
1798      MText      MUIA_FrameTitle,<Casio Modes>
1799      MVar       MUIA_Group_Child,StatBar5
1800      MVar       MUIA_Group_Child,StatBar2
1801      MVar       MUIA_Group_Child,StatBar4
1802      MVar       MUIA_Group_Child,StatBar1
1803      MVar       MUIA_Group_Child,StatBar3
1804      MVar       MUIA_Group_Child,StatBar0
1805      MEnd
1806     MEnd
1807    MEnd
1808   MVar  MUIA_Application_DropObject,MainWin
1809   MObj  MUIA_Application_Window,Window,ConfigWin
1810    MText        MUIA_Window_Title,<Casio-A Settings>
1811    MNum MUIA_Window_ID,'SETT'
1812    MObj MUIA_Window_RootObject,Group,ConfigGroup
1813     MObj        MUIA_Group_Child,Group
1814      MNum       MUIA_Group_Horiz,TRUE
1815      MVar       MUIA_Group_Child,CloseButton
1816      MVar       MUIA_Group_Child,RestoreButton
1817      MVar       MUIA_Group_Child,UseButton
1818      MVar       MUIA_Group_Child,SaveButton
1819      MEnd
1820     MObj        MUIA_Group_Child,Group,MicroSecSlider
1821      MNum       MUIA_Group_Columns,2
1822      MNum       MUIA_Frame,MUIV_Frame_Button
1823      MObj       MUIA_Group_Child,Slider
1824       MNum      MUIA_Numeric_Min,0
1825       MNum      MUIA_Numeric_Max,1000
1826       MNum      MUIA_Numeric_Value,Def_Micros
1827       MNum      MUIA_ExportID,4
1828       MNum      MUIA_CycleChain,TRUE
1829       MEnd
1830      MObj       MUIA_Group_Child,Text
1831       MText     MUIA_Text_Contents,<',27,'rDelay [MicroSec]>
1832       MNum      MUIA_HorizWeight,0
1833       MEnd
1834      MVar       MUIA_Group_Child,BaudRateSlider
1835      MObj       MUIA_Group_Child,Text
1836       MText     MUIA_Text_Contents,<',27,'rBaud rate>
1837       MNum      MUIA_HorizWeight,0
1838       MEnd
1839      MObj       MUIA_Group_Child,String,UnitNumber
1840       MText     MUIA_String_Accept,<0123456789>
1841       MNum      MUIA_Frame,MUIV_Frame_String
1842       MVar      MUIA_String_Integer,Arg_DevUnit
1843       MNum      MUIA_ExportID,2
1844       MNum      MUIA_CycleChain,TRUE
1845       MEnd
1846      MObj       MUIA_Group_Child,Text
1847       MText     MUIA_Text_Contents,<',27,'rDevice unit>
1848       MNum      MUIA_HorizWeight,0
1849       MEnd
1850      MObj       MUIA_Group_Child,String,DeviceString
1851       MNum      MUIA_Frame,MUIV_Frame_String
1852       MVar      MUIA_String_Contents,Arg_Device
1853       MNum      MUIA_ExportID,1
1854       MNum      MUIA_CycleChain,TRUE
1855       MEnd
1856      MObj       MUIA_Group_Child,Text
1857       MText     MUIA_Text_Contents,<',27,'rDevice>
1858       MNum      MUIA_HorizWeight,0
1859       MEnd
1860      MEnd
1861     MEnd
1862    MEnd
1863   MEnd
1864
1865 MUI_StatBar
1866  MObj   0,Group
1867   MNum  MUIA_Group_Horiz,TRUE
1868   MNum  MUIA_Frame,MUIV_Frame_Text
1869   MObj  MUIA_Group_Child,Rectangle
1870    MNum MUIA_FixWidth,1
1871    MEnd
1872   MObj  MUIA_Group_Child,Text,StatBarNumber
1873    MText        MUIA_Text_Contents,<  0>
1874    MText        MUIA_Text_PreParse,<',27,'r',27,'8>
1875    MEnd
1876   MObj  MUIA_Group_Child,Text
1877    MVar MUIA_Text_Contents,StatBarText
1878    MNum MUIA_Text_SetMax,TRUE
1879    MEnd
1880   MObj  MUIA_Group_Child,Rectangle
1881    MNum MUIA_Rectangle_VBar,TRUE
1882    MNum MUIA_FixWidth,1
1883    MEnd
1884   MObj  MUIA_Group_Child,Bitmap
1885    MVar MUIA_Bitmap_Bitmap,StatBarBMap
1886    MNum MUIA_Bitmap_Width,32
1887    MNum MUIA_Bitmap_Height,16
1888    MNum MUIA_Bitmap_Precision,PRECISION_ICON
1889    MNum MUIA_Frame,MUIV_Frame_None
1890    MNum MUIA_FixWidth,32
1891    MNum MUIA_FixHeight,16
1892    MEnd
1893   MEnd
1894
1895 MUI_Notific
1896         Notify  SettingsButton,Selected,EveryTime,ConfigWin,Window_Open,TriggerValue
1897         Notify  ConfigWin,Window_Open,EveryTime,SettingsButton,Selected,TriggerValue
1898         Notify  ConfigWin,Window_Open,EveryTime,ConfigMItem,Menuitem_Checked,TriggerValue
1899         Notify  ConfigWin,Window_CloseRequest,TRUE,ConfigWin,Window_Open,FALSE
1900         Notify  CloseButton,Pressed,FALSE,ConfigWin,Window_Open,FALSE
1901         Notify  MainWin,Window_CloseRequest,TRUE,Quit
1902         Notify  TransmitText,String_Acknowledge,EveryTime,0
1903         Notify  ReceiveText,String_Acknowledge,EveryTime,1
1904         Notify  QuitButton,Pressed,FALSE,Quit
1905         Notify  SaveButton,Pressed,FALSE,2
1906         Notify  UseButton,Pressed,FALSE,3
1907         Notify  RestoreButton,Pressed,FALSE,4
1908         Notify  AbortButton,Pressed,FALSE,5
1909         Notify  ApplObj,Application_MenuAction,FirstMenuCode+5,ApplObj,Application_Iconified,TRUE
1910         Notify  ApplObj,Application_MenuAction,FirstMenuCode+6,Quit
1911         Notify  ConfigMItem,Menuitem_Checked,EveryTime,ConfigWin,Window_Open,TriggerValue
1912         dc.w    -1
1913 ;---------------
1914 CasioIcons      incbin  "Casio-A.gfx"
1915 ;---------------
1916         tags
1917         template <TO=RECEIVE/K,FROM=TRANSMIT/K,DEVICE/K,DEVUNIT/K/N,BAUD/K/N,MICROWAIT/K/N,MUI/S>
1918         dv.l    Arg_To
1919         dv.l    Arg_From
1920         dv.l    Arg_Device
1921         dv.l    Arg_DevUnit
1922         dv.l    Arg_Baud
1923         dv.l    Arg_MicroWait
1924         dv.l    Arg_MUI
1925         defvar  <Casio-A>
1926         diserr  1<<err_number
1927         exitrout Cleanup
1928         finish
1929
1930         end