home *** CD-ROM | disk | FTP | other *** search
/ The Very Best of Atari Inside / The Very Best of Atari Inside 1.iso / sharew / dfue / midi.net / anetmidi / anetmctr.mod next >
Encoding:
Text File  |  1987-03-03  |  12.4 KB  |  348 lines

  1. MODULE Control; (* by fred brooks logictek san diego ca PD software *)
  2.  
  3. IMPORT GEMVDIbase, GEMAESbase, AESMenus, AESForms, AESObjects, AESEvents,
  4.        AESResources ;
  5.  
  6. FROM   AESGraphics      IMPORT GrafMouse;
  7.  
  8. FROM   AESObjects       IMPORT ObjectDraw;
  9.  
  10. FROM   MYLIB    IMPORT  InitResource,Terminate,
  11.                         DeselectObject,
  12.                         dTree,MenuTree,x,y,w,h,InitWindow,CloseWindow;
  13.  
  14. FROM   SYSTEM   IMPORT  ADR,ADDRESS,CODE,TSIZE;
  15.  
  16. FROM   Strings  IMPORT  String, Concat;
  17.  
  18. FROM   XBIOS    IMPORT  SuperExec;
  19.  
  20. FROM   BIOS     IMPORT  DriveSet;
  21.  
  22. FROM   GEMDOS   IMPORT  ExecMode,Exec,Open,Close,Read,Write,Create;
  23.  
  24. FROM   Streams  IMPORT  StreamKinds;
  25.  
  26. FROM   M2Conversions    IMPORT  ConvertToCardinal;
  27.  
  28. TYPE
  29.   SequenceNr  = [0..1];
  30.   control     = RECORD
  31.                  magic          :       LONGCARD;
  32.                  USER           :       CARDINAL;
  33.                  REMOTEUSER     :       CARDINAL;
  34.                  reset          :       BOOLEAN;
  35.                  networkactive  :       BOOLEAN;
  36.                  remotedrive    :       CARDINAL;
  37.                  drivemap       :       DriveSet;
  38.                 nextframetosend :       ARRAY [0..15] OF SequenceNr;
  39.                 frameexpected   :       ARRAY [0..15] OF SequenceNr;
  40.                 sendreset       :       BOOLEAN;
  41.                END;
  42.  
  43.   consave     = RECORD
  44.                  magic          :       LONGCARD;
  45.                  USER           :       CARDINAL;
  46.                  REMOTEUSER     :       CARDINAL;
  47.                  reset          :       BOOLEAN;
  48.                  networkactive  :       BOOLEAN;
  49.                 END;
  50. CONST
  51.        resourcefilename = "ANETMIDI.RSC" ;
  52.        RTS              = 04E75H ;
  53.  
  54. CONST
  55.      ABOUT = 1 ;
  56.    ABOUTOK = 1 ;
  57.       MENU = 0 ;
  58.       DESK = 3 ;
  59.       MODE = 5 ;
  60.       FILE = 4 ;
  61.     USERID = 6 ;
  62.    OPTIONS = 7 ;
  63.        SEQ = 8 ;
  64.   ABOUTNET = 11 ;
  65.       QUIT = 21 ;
  66.       LOAD = 20 ;
  67.        INT = 23 ;
  68.      MODE2 = 25 ;
  69.      MODE1 = 24 ;
  70.   REBOOTOK = 27 ;
  71.      USERID1 = 29 ;
  72.      USERID2 = 30 ;
  73.      USERID3 = 31 ;
  74.      USERID5 = 33 ;
  75.      USERID4 = 32 ;
  76.      USERID6 = 34 ;
  77.      USERID7 = 35 ;
  78.      USERID9 = 37 ;
  79.      USERID8 = 36 ;
  80.     USERID10 = 38 ;
  81.     USERID11 = 39 ;
  82.     USERID13 = 41 ;
  83.     USERID12 = 40 ;
  84.     USERID14 = 42 ;
  85.     USERID15 = 43 ;
  86.     USERID16 = 44 ;
  87.       DRVA = 46 ;
  88.       DRVB = 47 ;
  89.       DRVD = 49 ;
  90.       DRVC = 48 ;
  91.       DRVE = 50 ;
  92.       DRVF = 51 ;
  93.      SEQUP = 53 ;
  94.        S00 = 54 ;
  95.        S10 = 55 ;
  96.        S11 = 57 ;
  97.        S01 = 56 ;
  98.  
  99. VAR    status                              : INTEGER;
  100.        resourcename,nulls,on,off,netdrv    : ARRAY [0..16] OF CHAR ;
  101.        tempchar                            : ARRAY [0..2] OF CHAR;
  102.        char                                : CHAR;
  103.        result,handle                       : INTEGER ;
  104.        done,OK                             : BOOLEAN;
  105.        Cptr    [0210H]                     : ADDRESS;
  106.        Dptr    [0214H]                     : DriveSet;
  107.        Mptr    [0218H] ,count              : LONGCARD;
  108.        C                                   : POINTER TO control;
  109.        CSAVE                               : POINTER TO consave;
  110.        drvnr,i,usernumber,e                : CARDINAL;
  111.        idnumber                            : ARRAY [0..15] OF String;
  112.  
  113.  
  114.   PROCEDURE DoAboutDialog ;
  115.   BEGIN
  116.         AESResources.ResourceGetAddr(GEMAESbase.RTree,ABOUT,dTree) ;
  117.         AESForms.FormCenter(dTree,x,y,w,h) ;
  118.         AESForms.FormDialogue(GEMAESbase.FormStart,0,0,0,0,x,y,w,h) ;
  119.         AESForms.FormDialogue(GEMAESbase.FormGrow,0,0,0,0,x,y,w,h) ;
  120.         ObjectDraw(dTree,0,10,x,y,w,h) ;
  121.         result := AESForms.FormDo(dTree,-1) ;
  122.         DeselectObject(ABOUT,ABOUTOK) ; 
  123.         AESForms.FormDialogue(GEMAESbase.FormShrink,0,0,0,0,x,y,w,h) ;
  124.         AESForms.FormDialogue(GEMAESbase.FormFinish,0,0,0,0,x,y,w,h) ;
  125.   END DoAboutDialog ;
  126.  
  127.  
  128. (* ------------------------------------------------------------------- *)
  129.  
  130.  
  131. PROCEDURE Events ;
  132. (* Handle resource events *)
  133. VAR
  134.   pipeBuff : ARRAY [0..9] OF INTEGER ;
  135.  
  136.  
  137.   PROCEDURE SelectMenu( Menu, Item : INTEGER ) ;
  138.   BEGIN
  139.  
  140.       CASE Menu OF
  141.       DESK     : IF Item = ABOUTNET THEN
  142.                    DoAboutDialog ;
  143.                  END                        ;       |
  144.       FILE     : CASE Item OF
  145.                    LOAD     : C^.networkactive:=(NOT C^.networkactive); |
  146.                    QUIT     : done := TRUE  ;                           | 
  147.                  ELSE
  148.                  END ;
  149.                  IF C^.networkactive THEN 
  150.                     AESMenus.MenuText(MenuTree,LOAD,ADR(on));
  151.                  ELSE
  152.                     AESMenus.MenuText(MenuTree,LOAD,ADR(off));
  153.                  END;                                                   |
  154.  
  155.       MODE     : CASE Item OF
  156.                    INT        : Create("ANETMIDI.INT",0,handle);
  157.                    count:=TSIZE(consave);
  158.                    Write(handle,count,CSAVE);
  159.                    OK:=Close(handle);  |
  160.                    REBOOTOK   : CODE(03F3CH,0020H,04E41H,
  161.                                      042B9H,0,0420H,042B9H,0,043AH,
  162.                                      02079H,0,4,04ED0H)  ;       | 
  163.                  ELSE
  164.                  END ;                              |
  165.  
  166.       USERID     : CASE Item OF
  167.                    USERID1    : i:=0  ;       | 
  168.                    USERID2    : i:=1  ;       | 
  169.                    USERID3    : i:=2  ;       | 
  170.                    USERID4    : i:=3  ;       | 
  171.                    USERID5    : i:=4  ;       | 
  172.                    USERID6    : i:=5  ;       | 
  173.                    USERID7    : i:=6  ;       | 
  174.                    USERID8    : i:=7  ;       | 
  175.                    USERID9    : i:=8  ;       | 
  176.                    USERID10    : i:=9   ;       | 
  177.                    USERID11    : i:=10  ;       | 
  178.                    USERID12    : i:=11  ;       | 
  179.                    USERID13    : i:=12  ;       | 
  180.                    USERID14    : i:=13  ;       | 
  181.                    USERID15    : i:=14  ;       |
  182.                    USERID16    : i:=15  ;       | 
  183.                  ELSE
  184.                  END ;
  185.                  AESMenus.MenuItemCheck(MenuTree,29+C^.REMOTEUSER,0);
  186.                  FOR e:=0 TO 30 DO
  187.                    IF (idnumber[0][e]=0C) OR (idnumber[0][e]= "=") THEN
  188.                        idnumber[0][e]:=0C;
  189.                    END;
  190.                  END;
  191.                  ConvertToCardinal(idnumber[0],OK,usernumber);
  192.                  IF OK THEN
  193.                     C^.USER := usernumber; (* set local id *)
  194.                  END;
  195.                  FOR e:=0 TO 30 DO
  196.                    IF (idnumber[i][e]=0C) OR (idnumber[i][e]= "=") THEN
  197.                        idnumber[i][e]:=0C;
  198.                    END;
  199.                  END;
  200.                  ConvertToCardinal(idnumber[i],OK,usernumber);
  201.                  IF OK THEN
  202.                     C^.REMOTEUSER := usernumber; (* set remote id *)
  203.                  END;
  204.                  AESMenus.MenuItemCheck(MenuTree,29+C^.REMOTEUSER,1); |
  205.  
  206.       SEQ      : CASE Item OF
  207.                    SEQUP    : C^.sendreset:= TRUE ; |
  208.                  ELSE
  209.                  END ;   |
  210.     ELSE
  211.     END ; 
  212.     (* put header back normal*)
  213.      AESMenus.MenuItemCheck(MenuTree,S00,0);
  214.      AESMenus.MenuItemCheck(MenuTree,S10,0);
  215.      AESMenus.MenuItemCheck(MenuTree,S01,0);
  216.      AESMenus.MenuItemCheck(MenuTree,S11,0);
  217.      IF (C^.nextframetosend[C^.REMOTEUSER]=0) AND (C^.frameexpected[C^.REMOTEUSER]=0) THEN
  218.         AESMenus.MenuItemCheck(MenuTree,S00,1);
  219.      END;
  220.      IF (C^.nextframetosend[C^.REMOTEUSER]=1) AND (C^.frameexpected[C^.REMOTEUSER]=0) THEN
  221.         AESMenus.MenuItemCheck(MenuTree,S10,1);
  222.      END;
  223.      IF (C^.nextframetosend[C^.REMOTEUSER]=0) AND (C^.frameexpected[C^.REMOTEUSER]=1) THEN
  224.         AESMenus.MenuItemCheck(MenuTree,S01,1);
  225.      END;
  226.      IF (C^.nextframetosend[C^.REMOTEUSER]=1) AND (C^.frameexpected[C^.REMOTEUSER]=1) THEN
  227.         AESMenus.MenuItemCheck(MenuTree,S11,1);
  228.      END;
  229.     AESMenus.MenuTitleNormal(MenuTree,Menu,1) ;
  230.   END SelectMenu ;
  231.  
  232. BEGIN
  233.   GrafMouse(GEMAESbase.Arrow,NIL) ; (* put pointing mouse *)
  234.   done := FALSE ;
  235.   REPEAT
  236.     AESEvents.EventMessage(ADR(pipeBuff)) ;
  237.     CASE pipeBuff[0] OF         (* message type *)
  238.       GEMAESbase.MenuSelected   : SelectMenu(pipeBuff[3],pipeBuff[4]) ; |
  239.       GEMAESbase.WindowClosed   : done := TRUE ; |
  240.     ELSE
  241.     END ;
  242.   UNTIL done ;
  243. END Events ;
  244.  
  245. (*$P- *) (* set vector to control record *)
  246. PROCEDURE getcontrol;
  247. BEGIN
  248.         C := Cptr;
  249.         CSAVE := Cptr;
  250.         CODE(RTS);
  251. END     getcontrol;
  252.  
  253. BEGIN
  254.         nulls:="   ";
  255.         on :="  ON  ";
  256.         off:="  OFF ";
  257.         SuperExec(PROC(getcontrol));
  258.         IF C^.magic#3141592653 THEN
  259.            Exec(loadExecute,"ANETMIDI.PRG",nulls,nulls,result);
  260.            IF result<0 THEN HALT END;
  261.            SuperExec(PROC(getcontrol));
  262.         END;
  263.         Open("ANETMIDI.INT",0,handle);
  264.         IF handle>0 THEN        (* if there is, load in init file *)
  265.            count:=TSIZE(consave);
  266.            Read(handle,count,CSAVE);
  267.            OK:=Close(handle);
  268.         END;
  269.         Open("ANETMIDI.ID",0,handle);
  270.         IF handle>0 THEN        (* if there is, load in user file *)
  271.            count:=1;
  272.            FOR i:=0 TO 15 DO
  273.                LOOP
  274.                    Read(handle,count,ADR(char));
  275.                    IF (char=12C) THEN EXIT END;
  276.                    IF (char=12C) OR (char=15C) THEN char:=0C END; 
  277.                    tempchar[0]:=char;
  278.                    Concat(idnumber[i],tempchar,idnumber[i]);
  279.                END;
  280.            END;
  281.            OK:=Close(handle);
  282.         ELSE
  283.            result:=AESForms.FormAlert(1,"[3][You must have a ANETMIDI.ID|in this directory!][DARN]");
  284.            HALT;
  285.         END;
  286.         resourcename:=resourcefilename ;
  287.         IF InitResource(resourcename,MENU) THEN
  288.  
  289.         FOR e:=29 TO 44 DO
  290.             AESMenus.MenuText(MenuTree,e,ADR(idnumber[e-29]));
  291.         END;
  292.  
  293.         AESMenus.MenuItemCheck(MenuTree,29+C^.REMOTEUSER,1);
  294.  
  295.         netdrv:="  DRV A = F";
  296.         drvnr:=2;
  297.         WHILE drvnr IN C^.drivemap DO
  298.               INC(drvnr);
  299.         END; (* while *)
  300.         INC(drvnr);
  301.         netdrv[6]:="A"; netdrv[10]:=CHAR(041H+drvnr);
  302.         AESMenus.MenuText(MenuTree,DRVA,ADR(netdrv));
  303.         netdrv[6]:="B"; netdrv[10]:=CHAR(041H+drvnr+1);
  304.         AESMenus.MenuText(MenuTree,DRVB,ADR(netdrv));
  305.         netdrv[6]:="C"; netdrv[10]:=CHAR(041H+drvnr+2);
  306.         AESMenus.MenuText(MenuTree,DRVC,ADR(netdrv));
  307.         netdrv[6]:="D"; netdrv[10]:=CHAR(041H+drvnr+3);
  308.         AESMenus.MenuText(MenuTree,DRVD,ADR(netdrv));
  309.         netdrv[6]:="E"; netdrv[10]:=CHAR(041H+drvnr+4);
  310.         AESMenus.MenuText(MenuTree,DRVE,ADR(netdrv));
  311.         netdrv[6]:="F"; netdrv[10]:=CHAR(041H+drvnr+5);
  312.         AESMenus.MenuText(MenuTree,DRVF,ADR(netdrv));
  313.  
  314.         CASE C^.remotedrive OF       (* PLACE CHECK IN REMOTE MENU *)
  315.              0    :  AESMenus.MenuItemCheck(MenuTree,DRVA,1); |
  316.              1    :  AESMenus.MenuItemCheck(MenuTree,DRVB,1); |
  317.              2    :  AESMenus.MenuItemCheck(MenuTree,DRVC,1); |
  318.              3    :  AESMenus.MenuItemCheck(MenuTree,DRVD,1); |
  319.              4    :  AESMenus.MenuItemCheck(MenuTree,DRVE,1); |
  320.              5    :  AESMenus.MenuItemCheck(MenuTree,DRVF,1); |
  321.         ELSE
  322.         END;
  323.         IF C^.networkactive THEN 
  324.            AESMenus.MenuText(MenuTree,LOAD,ADR(on));
  325.         ELSE
  326.            AESMenus.MenuText(MenuTree,LOAD,ADR(off));
  327.         END;
  328.  
  329. (*        AESMenus.MenuItemCheck(MenuTree,S00,0);
  330.         AESMenus.MenuItemCheck(MenuTree,S10,0);
  331.         AESMenus.MenuItemCheck(MenuTree,S01,0);
  332.         AESMenus.MenuItemCheck(MenuTree,S11,0); *)
  333.         IF (C^.nextframetosend[C^.REMOTEUSER]=0) AND (C^.frameexpected[C^.REMOTEUSER]=0) THEN
  334.            AESMenus.MenuItemCheck(MenuTree,S00,1);
  335.         END;
  336.         IF (C^.nextframetosend[C^.REMOTEUSER]=1) AND (C^.frameexpected[C^.REMOTEUSER]=0) THEN
  337.            AESMenus.MenuItemCheck(MenuTree,S10,1);
  338.         END;
  339.         IF (C^.nextframetosend[C^.REMOTEUSER]=0) AND (C^.frameexpected[C^.REMOTEUSER]=1) THEN
  340.            AESMenus.MenuItemCheck(MenuTree,S01,1);
  341.         END;
  342.         IF (C^.nextframetosend[C^.REMOTEUSER]=1) AND (C^.frameexpected[C^.REMOTEUSER]=1) THEN
  343.            AESMenus.MenuItemCheck(MenuTree,S11,1);
  344.         END;
  345.         Events ;
  346.         END;
  347.         Terminate ;
  348. END     Control.