/*******************************************************************//*                                                                 *//* RTOS-UH System M_A_N_A_G_E_R:SYSM v1.17  Marcel Dasen 21/10/87  *//*                                                                 *//* vereinfacht kopieren von Disketten in den Speicher und umgekehrt*//*                                                                 *//* Laden mit LOAD Fx:SYSMSR anschliessend <CONTR><A>SYSM           *//* von nun an belegt SYSM die Fuktionstaste f1                     *//*******************************************************************/S=$1756; MODULE MANAGER;SYSTEM;   TERM: A1<->;   VO: VO.LINK->;   VI: VI.LINK<-;   XC :XC->;   INKEY:B1(TFU=1,AI=$3C00)<-;PROBLEM;   SPC XC   DATION OUT   ALPHIC CONTROL(ALL);   SPC VO   DATION OUT   ALPHIC CONTROL(ALL);   SPC TERM DATION INOUT ALPHIC CONTROL(ALL);   SPC VI      DATION IN    ALPHIC CONTROL(ALL);   SPC INKEY DATION IN ALPHIC CONTROL(ALL);/********************************************************************//*   PROCEDURE TO READ THE DIRECTORY OUTPUT FIELD OF FILENAMES      */readdir:PROCEDURE (tn CHAR(8),disk CHAR(2), names() CHAR(8) IDENT,                                   fnum FIXED IDENT) GLOBAL;    DCL line CHAR(80),last CHAR(8) INIT('********');    DCL nam CHAR(8),col FIXED;    DCL limit INV FIXED INIT(80); PUT 'SU ',tn,';O VO.LINK;DIR ',disk,'.--C ',tn TO XC BY (6)A,SKIP; PUT '**********' >< TOCHAR(13) TO VO BY A; GET line FROM VI BY A; fnum = 0; col=0; WHILE (fnum < limit) AND (nam/=last) REPEAT;   IF col==0     THEN GET line FROM VI BY A;   FIN;   FOR I TO 8 REPEAT;     IF (disk=='ED')THEN      nam.CHAR(I)=line.CHAR(I+2+col*10);     ELSE nam.CHAR(I)=line.CHAR(col*16+I);     FIN;   END;   IF (nam.CHAR(1)/='*') AND (nam.CHAR(1) NE ' ')     THEN fnum=fnum+1;     names(fnum)=nam;   FIN;   IF col==4 THEN col=0;   ELSE col=col+1;   FIN;  END; /*REPEAT*/END;/*PROC readdir*//********************* adapted from c't 1/87 *************************//*********************************************************************/gotoxy:PROCEDURE (xpos FIXED(8),ypos FIXED(8)) GLOBAL;   DCL ESC CHAR(1);  ESC=TOCHAR(27);  IF ypos > 25 THEN ypos=25;FIN;  IF xpos > 80 THEN xpos=80;FIN;  xpos=ABS(xpos+32);ypos=ABS(ypos+32);  PUT ESC,'=',TOCHAR(ypos),TOCHAR(xpos) TO TERM BY (4)A;END;/*********************************************************************/clr:PROCEDURE (var FIXED(4)) GLOBAL;  var=ABS(var);  CASE var    ALT PUT TOCHAR(27),'*' TO TERM BY (2)A;/*CLEAR SCREEN*/    ALT PUT TOCHAR(27),'Y' TO TERM BY (2)A;/*CLEAR FROM CURPOS*/    OUT;  FIN;END;/*************** VIDEO MODE *******************************************/videomod:PROCEDURE (mod FIXED(8)) GLOBAL;   mod=ABS(mod);   CASE mod     ALT PUT TOCHAR(27),'G0' TO TERM BY (2)A;/*NORMAL CHAR */     ALT PUT TOCHAR(27),'G4' TO TERM BY (2)A;/*INVERSE CHAR */     ALT PUT TOCHAR(27),'G8' TO TERM BY (2)A;/*UNDERLINE CHAR */     ALT PUT TOCHAR(27),'b' TO TERM BY (2)A;/*NORMAL MODE OK*/         PUT TOCHAR(27),'G0' TO TERM BY (2)A;     OUT;   FIN;END;/************* COPY FILE TO DEVICE XX ********************************/copyf:PROCEDURE(tn CHAR(8),source CHAR(2),dest CHAR(3),name CHAR(8))                                                   GLOBAL;  PUT 'SU ',tn,';COPY.SYS  PRIO 15 ',source,'.',name,'>',dest,':',name,                                '--CONTINUE ',tn TO XC BY (12)A,SKIP;END;/*********************************************************************/dispf:PROC (fnum FIXED,name() CHAR(8) IDENT) GLOBAL; FOR I TO fnum REPEAT;         IF I < 21 THEN CALL gotoxy(2,I+2);           PUT I,' ',name(I) TO TERM BY F(2),(2)A;         ELSE           IF I < 41 THEN CALL gotoxy(18,I-18);             PUT I,' ',name(I) TO TERM BY F(2),(2)A;           ELSE             IF I < 61 THEN CALL gotoxy(34,I-38);               PUT I,' ',name(I) TO TERM BY F(2),(2)A;             ELSE               CALL gotoxy(50,I-58);               PUT I,' ',name(I) TO TERM BY F(2),(2)A;             FIN;           FIN;         FIN;         END;END;/*********************************************************************/SYSM:TASK PRIO 02;   DCL NAME(80) CHAR(8);   DCL (FNUM) FIXED;   DCL IND CHAR(2) INIT('F0'),OUTD CHAR(3) INIT('EDB');   DCL CH CHAR(1);   DCL X FIXED(4);   DCL CHANGEDEV BIT(1) INIT('1'B);REPEAT; PUT 'F1 ^ASYSM^M' TO XC BY A;/*PROGRAM WRITTEN TO F1-KEY*/ CALL clr(1);/*CLEAR*/ IF CHANGEDEV THEN   CALL readdir('SYSM    ',IND,NAME,FNUM); FIN; CALL videomod(2);/*INV*/ CALL gotoxy(20,1); PUT 'input device <- ',IND,' output device -> ',OUTD TO TERM BY (4)A; CALL videomod(1);   CALL gotoxy(24,7);   PUT 'A)COPY FILE(S) ' TO TERM BY A;   CALL gotoxy(24,8);   PUT 'B)CHANGE IN\OUTPUT DEVICE ' TO TERM BY A;   CALL gotoxy(24,9);   PUT 'C)CHANGE FLOPPY' TO TERM BY A;   CALL gotoxy(24,10);   PUT 'D)BACKUP DISK'TO TERM BY A;   CALL gotoxy(24,11);   PUT 'E)ERASE' TO TERM BY A;   CALL gotoxy(24,12);   PUT 'F)EXIT' TO TERM BY A;   PUT TOCHAR(07) TO TERM BY A;   CALL gotoxy(24,13);   GET CH FROM INKEY BY A(1);   IF TOFIXED(CH) > 90 THEN CH=TOCHAR(TOFIXED(CH)-32);/*LOWERCASE CHAR*/   FIN;     CASE TOFIXED(CH)-64/*--------------------------------------------------------------------*/     ALT   /* COPY FILES FROM INputDevice  TO OUTputDevice */         CALL clr(1);CALL gotoxy(20,1);  /*CLEAR SCREEN*/         CALL videomod(2);         PUT 'input device <- ',IND,' output device -> ',OUTD TO TERM              BY (4)A,SKIP;         CALL videomod(3);         PUT FNUM,' FILES   ' TO TERM BY F(4),A;         CALL videomod(1);         CALL dispf(FNUM,NAME);         X=FNUM;         WHILE (X <= FNUM) AND (X NE 0) REPEAT;          X=0;          CALL gotoxy(2,23);          PUT 'ENTER FILENUMBER: ' TO TERM BY A;          GET X FROM TERM BY SKIP,E(2);          IF ST(TERM) NE 0 THEN X=0;          FIN;          IF (X <= FNUM) AND (X NE 0) THEN           CALL copyf('SYSM   ',IND,OUTD,NAME(X));          FIN;         END;         CHANGEDEV=('0'B);/*--------------------------------------------------------------------*/     ALT    /* CHANGE DEVICE POINTERS */        CHANGEDEV='1'B;        CALL clr(1);         /*CLEAR SCEREEN*/        CALL gotoxy(28,1);PUT 'CHANGE IN\OUTPUT DEVICE' TO TERM BY A;        CALL gotoxy(20,3);        CALL videomod(2);    /* inv */   PUT 'input device <- ',IND,' output device -> ',OUTD TO TERM BY (4)A;        CALL videomod(1);        CALL gotoxy(25,7);        PUT 'A)INPUT EDB:<- OUTPUT ->F0:' TO TERM BY A;        CALL gotoxy(25,8);        PUT 'B)INPUT F0:<- OUTPUT ->EDB:' TO TERM BY A;        CALL gotoxy(25,9);        PUT 'C)INPUT ED:<- OUTPUT ->PRINTER' TO TERM BY A;        CALL gotoxy(25,10);        PUT 'D)INPUT F0:<- OUTPUT ->PRINTER' TO TERM BY A,SKIP;        CALL gotoxy(25,13);        GET CH FROM INKEY BY SKIP,A;        IF TOFIXED(CH) > 90 THEN CH=TOCHAR(TOFIXED(CH)-32);        FIN;        CASE TOFIXED(CH)-64          ALT IND:='ED';OUTD:=' F0';  /*SET IN/OUT-PUT DEVICE POINTER*/          ALT IND:='F0';OUTD:='EDB';          ALT IND:='ED';OUTD:=' PP';          ALT IND:='F0';OUTD:=' PP';          OUT PUT TOCHAR(7) TO TERM BY A;              CHANGEDEV='0'B;        FIN;/*--------------------------------------------------------------------*/     ALT   /*CHANGE FLOPPY */       CALL gotoxy(19,1);            /*CENTER*/       CALL videomod(2);             /*inverse*/       PUT '          insert new disk now !!            ' TO TERM BY A;       CALL videomod(1);       CALL gotoxy(0,22);       PUT 'SYNC F0:;CF F0:' TO XC BY A;       PUT 'PRESS RETURN WHEN READY ' TO TERM BY A; /*SYNC F0 DEVICE*/       GET CH FROM INKEY BY SKIP,A;       AFTER 1.30 SEC RESUME;       CHANGEDEV='1'B;             /*SET DIRECTORY READ FLAG*//*--------------------------------------------------------------------*/     ALT  /* CALL BACKUPPROGRAMM */       CALL clr(1); /*clear screen*/       CALL gotoxy(20,1);       CALL videomod(2);       PUT '      BACKUP OF RTOS-UH DISK       ' TO TERM BY A;       CALL videomod(1);       LBLC: CALL gotoxy(20,5);   /* REPEAT UNTIL BACKUPSR FOUND */       PUT 'SYNC F0:;CF F0:' TO XC BY A;       PUT 'PUT RTOS-UH UTILITY DISK INTO DRIVE F0 <RET>' TO TERM BY A;       GET CH FROM INKEY;       IF CH NE TOCHAR(27) THEN        CALL readdir('SYSM   ','F0',NAME,FNUM);        FOR I TO FNUM WHILE NAME(I) NE 'BACKUPSR' REPEAT;X=I;END;       IF X == FNUM THEN GOTO LBLC;FIN;/* END REPEAT UNTIL */        CALL gotoxy(20,6);        PUT 'WAIT A MOMENT PLEASE' TO TERM BY A;        AFTER  1.30 SEC RESUME;        PUT 'LOAD F0:BACKUPSR--COP' TO        XC BY A;        CALL clr(1);        TERMINATE SYSM;        FIN;       CHANGEDEV ='0'B;/*--------------------------------------------------------------------*/     ALT  /* ERASE FILES FORM INPUT DEVICE FLOPPY OR RAM  */       X=FNUM;                        /*BYPASS WHILE CONDITION*/      WHILE (X <= FNUM+1) AND (X NE 0) REPEAT;       CALL clr(1);       CALL gotoxy(25,1);       CALL videomod(2);       PUT 'ERASE FILES FROM ',IND TO TERM BY A;       CALL videomod(1);       CALL dispf(FNUM,NAME);       CALL gotoxy(2,23);       PUT 'ENTER FILES TO ERASE ' TO TERM BY A;       GET X FROM TERM BY SKIP,E(2);       IF ST(TERM) NE 0 THEN X=0;       FIN;       IF (X NE 0) AND (X <= FNUM) THEN        CALL gotoxy(2,23);        PUT 'DO YOU REALLY WANT TO ERASE ',NAME(X),' Y/N ' TO TERM        BY (3)A;        GET CH FROM INKEY BY SKIP,A;        IF CH == 'Y' THEN          PUT 'RM ',IND,':',NAME(X) TO XC BY (4)A,SKIP;          IF IND NE 'ED' THEN           AFTER 3.8 SEC RESUME;          FIN;          CALL readdir('SYSM   ',IND,NAME,FNUM);        FIN;       FIN;      END;      CALL clr(1);      CHANGEDEV='0'B;/*--------------------------------------------------------------------*/     OUT        CALL videomod(4);        CALL clr(1);        TERMINATE SYSM;     FIN;                             /*case *//*--------------------------------------------------------------------*/  END;                                /* infinit loop */END;                                 /* task end */MODEND;